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构建脚本。最后生成的工程目录如下:

rt-thread驱动篇(05)---STM32F429单片机STemWin移植与使用_第1张图片

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

rt-thread驱动篇(05)---STM32F429单片机STemWin移植与使用_第2张图片 rt-thread驱动篇(05)---STM32F429单片机STemWin移植与使用_第3张图片 

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_LCDRT_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引脚需要配置成高速

rt-thread驱动篇(05)---STM32F429单片机STemWin移植与使用_第4张图片

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

rt-thread驱动篇(05)---STM32F429单片机STemWin移植与使用_第5张图片

你可能感兴趣的:(RT-Thread,单片机,stm32,嵌入式硬件)