
1. 简介( g4 W' y ]# s 最近搞了一块STM32H743的开发板,自带TFT-1.8寸的液晶屏,一直听说STemWin功能强大,想要体验一把。奈何从未移植过STemWin,下意识的感觉还是有点困难,尤其是在网上找了一番关于STemWin的移植教程之后,发现给小白看的教程实在太少,SPI接口的教程更少。因此将自己移植STemWin的过程分享出来,供大伙参考一下。6 a- L2 ~' I" i" y- `+ W' I0 a . }% A2 m# j: h 2.环境 硬件 MCU信息:STM32H743 TFT屏幕信息:TFT-1.8寸液晶屏(分辨率:160xRGBx128;驱动IC:ST7735S;通讯接口:SPI) P- a' i* }9 M1 n 软件 HAL库信息:STM32Cube_FW_H7_V1.6.0(在使用STM32CubeMX生成STM32H7工程时会提示下载,目录在:C:\Users$username$\STM32Cube\Repository\STM32Cube_FW_H7_V1.6.0) STemWin信息:下载完上述的HAL库之后,STemWin也已经下载OK,具体位置如下:C:\Users$username$\STM32Cube\Repository\STM32Cube_FW_H7_V1.6.0\Middlewares\ST2 b1 ]' J% ?% M. }* u ( ~! I8 \7 b+ l: }- T; G3 N ![]() 3.移植 3.1 移植前准备2 s7 u6 u, A: o0 t 开发板提供了TFT-1.8寸LCD的SPI驱动Demo,屏幕可以正常使用,我是基于该工程进行的移植。重点关注Demo中的以下几个函数,函数名可能跟我提供的有所出入,具体视自己的LCD驱动代码而定。 LCD_Init(void) --------------------------- SPI驱动代码,以及LCD的初始化 LCD_WriteCmd(uint8_t cmd)---------LCD写命令 LCD_WriteData(uint8_t data)---------LCD写数据 工程目录中,如果有lcd.c,lcd.h,gui.c,gui.h,请先将文件重命名,并更改工程文件,并保证编译之后运行依然OK。 3.2 开始移植 将整个STemWin目录拷贝到工程目录下:: w8 ^4 T+ t, v2 w ![]() 打开LCD Demo的工程文件,将STemWin下必要的文件添加进工程,具体文件以及路径如下:5 s* T4 @2 u; R8 q0 n* ? STemWin/Config/GUIConf.c4 G, C$ W6 M/ g5 F! j) [/ A d STemWin/Config/GUIConf.h" I+ w5 D: ?8 u3 G$ H STemWin/Config/GUIDRV_Template.c* i, b* h p' m. y) d STemWin/Config/LCDConf_FlexColor_Template.c3 b( d0 { t! [4 ^. G STemWin/Lib/STemWin_CM7_wc16_ARGB.a( g3 W2 [: @# U) ` STemWin/OS/GUI_X.c 添加完成之后,工程目录结构中如下: ) M6 Z$ |) e. U& u/ s ![]() " ?6 c7 s$ v' ]8 f# |+ n" p 将STemWin_CM7_wc16_ARGB.a设置为库文件,具体配置方法如下: 2 ^+ |& |% C/ J ![]() 8 _8 l, b1 H6 C# N" `7 N 修改工程的头文件包含路径,增加以下几个路径:& u% l0 i! Y) w4 w# d. o3 k, c , o5 k6 Q3 f0 g/ G4 S( \ ![]() " i! a; I& D( l6 V* Q 3.3 修改代码5 H7 y( I6 \5 u) A6 B 3.3.1 修改LCDConf_FlexColor_Template.c 找到XSIZE_PHYS和YSIZE_PHYS,并修改为实际LCD的分辨率 6 c( i, f: M4 D# d9 q ![]() 修改LCD_X_Config(void),具体修改为 ![]() # K% w' X7 h: D5 U: V _$ G 修改LCD_X_DisplayDriver(void),加入我们自己的LCD屏的初始化函数。& j% `/ E4 q; t ![]() 修改一下几个函数,该方法根据具体使用的LCD确定,本例程使用的是SPI通讯的LCD屏幕,指令和数据均为 8 bit LcdWriteReg(U16 Data) —> LcdWriteReg(U8 Data)) \0 D5 v' {) T( u; Y3 k0 ] LcdWriteData(U16 Data) —> LcdWriteData(U8 Data) LcdWriteDataMultiple(U16 * pData, int NumItems) —> LcdWriteDataMultiple(U8 * pData, int NumItems) ![]() ' l( L" r7 W- _* N2 k1 P 3.3.2 修改GUIDRV_Template.c 找到 ,加入LCD的画点函数,该函数由LCD驱动 Demo提供,需要根据自己的LCD驱动代码来进行添加。 ![]() 3.3.3 修改GUConf.c% t* Q( s( b" m- h$ C5 { 修改GUI使用的SDRam大小 7 Y9 ^3 h% q. A2 f ![]() 3.3.4 新建一个空文件 LCDConf.h 6 `+ E4 C. {) r/ z7 k7 u ![]() 3.3.5 由于采用的是RGB格式的LCD屏,因此需要修改GUI_ConfDefaults.h,否则可能会以BGR的方式显示。+ J& o) [. _+ o2 F ![]() ) B! S/ P/ x j 3.3.6 修改stm32h7xx_it.c中的SysTick_Handler函数,加入一下代码,由于GUI_Delay会使用到OS_TimeMS,因此如果不加该段代码,GUI_Delay将无限延时 ![]() ' h* n M; G& G. d; S+ z 4 验证6 a: X% |/ u/ Y3 S9 B 在main方法中,包含头文件GUI.h,并加入测试代码9 `7 D6 @$ o: `( `" U8 ?0 m! p N4 Q( \+ S: w) @+ y% ` ![]() 实际显示效果:; j, h( n% K: t, B9 v7 i5 } ![]() 5 总结 对于一名没有用过STemWin的小白来说,移植还算顺利,比想象中的要Easy一些,中途参考了各方教程,并结合自己的理解,完成了这一次移植。本次移植采用的是GUIDRV_Template_API的方式,后来也有使用GUIDRV_FLEXCOLOR的方式移植了一下,这个后续有空再补。 m, o% _8 E1 W* N2 Z, z# O |
STM32H7的TCM,SRAM等五块内存基础知识
STM32H7的TCM,SRAM等五块内存基础知识
简单了解一下STM32H7的BDMA
有奖预约 | STM32H7R7基于RT-Thread RTOS的智能终端GUI解决方案
【STM32H745I-DISCO】基于TouchGFX的工业控制器界面设计
STM32H745I-DISCO串口打印
【STM32H745I-DISCO】TouchGFX探索——3、触屏滑屏操作与中文显示
TouchGFX软件下载及使用
【STM32H745I-DISCO】TouchGFX探索——2、照葫芦画瓢
STM32H745I-DISCO硬件信号为空,M4、M7对于硬件信号的优先性判断