目录
一、前言
二、移植前的准备
1、STemWin的源文件
2、LTDC和LCD驱动
3、修改OS支持文件
三、向工程添加文件
四、移植注意事项
在rt-thread中,有一个STemWin的软件包,但是驱动是MCU屏的,对EMWIN的支持不是很好。要在rt-thread中使用RGB屏需要自己移植驱动,所以我就不使用rt-thread的软件包了,自己手动添加
从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 |
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的情况下也可以用来绘制一些简单的界面
在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_LCD
bool "Enable RGB-LCD"
select BSP_USING_LTDC
select BSP_USING_SDRAM
default n
endmenu
menu "On-chip Peripheral Drivers"
...
config BSP_USING_LTDC
bool
default n
endmenu
menu "Board extended module Drivers"
menuconfig RT_STEMWIN
bool "Enable STemWin"
default n
if RT_STEMWIN
config RT_STEMWIN_DEMO
bool "Enable STemWin Demo"
default n
endif
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