rt-thread驱动篇(05)---STM32F429单片机STemWin移植与使用
目录
一、前言
二、移植前的准备
1、STemWin的源文件
2、LTDC和LCD驱动
3、修改OS支持文件
三、向工程添加文件
四、移植注意事项
一、前言
在rt-thread中,有一个STemWin的软件包,但是驱动是MCU屏的,对EMWIN的支持不是很好。要在rt-thread中使用RGB屏需要自己移植驱动,所以我就不使用rt-thread的软件包了,自己手动添加
二、移植前的准备
1、STemWin的源文件
从ST的官网或是STM32Cube包中获取,本次使用的是5.40版本,获取到的源文件目录如下:
| 文件 | 说明 | |
| Config | GUIConf.c | GUI初始化、内存分配 |
| GUIConf.h | GUI配置设置,是否使用操作系统、鼠标、窗口管理等信息 | |
| LCDConf_Lin_Template.c | ST官方提供的RGB液晶屏驱动模板文件,有基本的打点读点填充等函数,需要修改 | |
| GUI_X_Touch_Analog.c | 触摸屏坐标AD值读取接口,需要根据自己的驱动添加 | |
| inc | STemWin函数的头文件 | |
| Lib | STemWin的函数库 | |
| OS | 裸机或使用OS的接口 | |
| Software | 使用到的一些软件 | |
| examples | 官方的demo | |
2、LTDC和LCD驱动
STM32F429自带了LTDC(LCD-TFT控制器)和DMA2D(图形加速器),大大提高了RGB屏驱动显示性能。从正点原子例程中拷贝以下两个文件到\libraries\HAL_Drivers目录下,从安富莱例程中拷贝 LCDConf_Lin_Template.c 到\STemWin\Config目录下
drv_ltdc.c 主要提供了ltdc参数配置以及基本的画点划线填充函数,供drv_lcd_rgb.c使用
drv_lcd_rgb.c 提供了LCD的一些基本操作函数,画点划线画矩形、填充、显示字符显示数字等,在没有EMWIN的情况下也可以用来绘制一些简单的界面
3、修改OS支持文件
在STemWin\OS目录下新建一个GUI_X_rtthread.c文件,参考其模板完善函数功能
三、向工程添加文件
为了可以通过menuconfig来选择EMWIN,每次在通过scons重新构建工程时相关的文件能自动添加进工程中,需要修改kconfig配置文件和SConscript构建脚本。最后生成的工程目录如下:

1、在 \board\Kconfig中添加 BSP_USING_LCD 、 BSP_USING_LTDC、RT_STEMWIN、RT_STEMWIN_DEMO 的配置项,这样可以通过menuconfig来开启这个宏
menu "Onboard Peripheral Drivers"...config BSP_USING_LCDbool "Enable RGB-LCD"select BSP_USING_LTDCselect BSP_USING_SDRAMdefault nendmenumenu "On-chip Peripheral Drivers"... config BSP_USING_LTDCbooldefault n
endmenumenu "Board extended module Drivers"menuconfig RT_STEMWINbool "Enable STemWin"default nif RT_STEMWINconfig RT_STEMWIN_DEMObool "Enable STemWin Demo"default nendif
endmenu
2、在 \libraries\HAL_Drivers\SConscript 中添加一下如下内容,这样在定义了BSP_USING_LCD 后就能将drv_lcd_rgb.c 和 drv_ltdc.c 文件添加到工程中
if GetDepend('BSP_USING_LCD'):src += ['drv_lcd_rgb.c']src += ['drv_ltdc.c']
3、在 \libraries\STM32F4xx_HAL\SConscript 中添加一下如下内容,这样在定义了BSP_USING_LTDC 后就能将HAL驱动的相关文件添加到工程中
if GetDepend(['BSP_USING_LTDC']):src += ['STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_ltdc.c']src += ['STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_ltdc_ex.c']src += ['STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma2d.c']src += ['STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_dma2d.c']src += ['STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dsi.c']src += ['STM32F4xx_HAL_Driver/Src/stm32f4xx_ltdc.c']
4、在EMWIN软件包的各个文件中分别添加对应的SConscript文件,在定义了BSP_USING_LCD 和 RT_STEMWIN_DEMO 宏后就能将相应的文件添加到对应的工程目录中
(1)\packages\EMWIN
import os
from building import *cwd = GetCurrentDir()
objs = []
list = os.listdir(cwd)if GetDepend('RT_STEMWIN'):for d in list:path = os.path.join(cwd, d)if os.path.isfile(os.path.join(path, 'SConscript')):objs = objs + SConscript(os.path.join(d, 'SConscript'))Return('objs')
(2)\packages\EMWIN\Config
from building import *cwd = GetCurrentDir()# add the general drivers.
src = Split("""
""")src += ['GUIConf.c']
src += ['LCDConf_Lin_Template.c']
CPPPATH = [cwd]group = DefineGroup('STemWin', src, depend = [''], CPPPATH = CPPPATH)Return('group')
(3)\packages\EMWIN\Lib
from building import *cwd = GetCurrentDir()# add the general drivers.
src = Split("""
""")CPPPATH = []LIBPATH = [cwd]
LIBS = []
if GetDepend(['ARCH_ARM_CORTEX_M4']):LIBS += ['STemWin540_CM4_OS_IAR_ot_ARGB.a']CPPPATH += [cwd + '/../inc']group = DefineGroup('STemWin', src, depend = [''], CPPPATH = CPPPATH, LIBS = LIBS, LIBPATH=LIBPATH)Return('group')
(4)\packages\EMWIN\OS
from building import *cwd = GetCurrentDir()# add the general drivers.
src = Split("""
""")src += ['GUI_X_rtthread.c']
CPPPATH = [cwd]group = DefineGroup('STemWin', src, depend = [''])Return('group')
(5)\packages\EMWIN\examples
from building import *cwd = GetCurrentDir()
src = Glob('*.c')
CPPPATH = [cwd]if GetDepend(['ARCH_ARM_CORTEX_M4']):src += Glob(cwd + '/5.44/*.c')CPPPATH += [cwd + '/5.44']if GetDepend(['ARCH_ARM_CORTEX_M3']):src += Glob(cwd+ '/5.32/*.c')CPPPATH += [cwd + '/5.32']group = DefineGroup('STemWin_DEMO', src, depend = ['RT_STEMWIN_DEMO'], CPPPATH = CPPPATH)Return('group')
四、移植注意事项
1、使用STM32CubeMX配置时LTDC的的所有GPIO引脚需要配置成高速

2、系统时钟 PLLM 一般设置为25,这样进入PLLSAI的时钟就为1MHZ

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
