
1. 简介 最近搞了一块STM32H743的开发板,自带TFT-1.8寸的液晶屏,一直听说STemWin功能强大,想要体验一把。奈何从未移植过STemWin,下意识的感觉还是有点困难,尤其是在网上找了一番关于STemWin的移植教程之后,发现给小白看的教程实在太少,SPI接口的教程更少。因此将自己移植STemWin的过程分享出来,供大伙参考一下。 2.环境; f% t( J, G8 y% H% w; g9 F 硬件% o' z. K1 A S MCU信息:STM32H743 TFT屏幕信息:TFT-1.8寸液晶屏(分辨率:160xRGBx128;驱动IC:ST7735S;通讯接口:SPI)0 c) w" q% R7 `% r ) u/ k& d4 U. ]( _) ]1 L 软件! { V4 N7 g1 F, a4 J HAL库信息:STM32Cube_FW_H7_V1.6.0(在使用STM32CubeMX生成STM32H7工程时会提示下载,目录在:C:\Users$username$\STM32Cube\Repository\STM32Cube_FW_H7_V1.6.0)8 u0 h0 x, a+ A/ u/ J. B STemWin信息:下载完上述的HAL库之后,STemWin也已经下载OK,具体位置如下:C:\Users$username$\STM32Cube\Repository\STM32Cube_FW_H7_V1.6.0\Middlewares\ST/ Q. W/ q2 b l' N, J 7 X" C! T" x* V1 D$ W ![]() 3.移植 3.1 移植前准备 开发板提供了TFT-1.8寸LCD的SPI驱动Demo,屏幕可以正常使用,我是基于该工程进行的移植。重点关注Demo中的以下几个函数,函数名可能跟我提供的有所出入,具体视自己的LCD驱动代码而定。 LCD_Init(void) --------------------------- SPI驱动代码,以及LCD的初始化" M1 v1 P) x. J' v LCD_WriteCmd(uint8_t cmd)---------LCD写命令 LCD_WriteData(uint8_t data)---------LCD写数据 工程目录中,如果有lcd.c,lcd.h,gui.c,gui.h,请先将文件重命名,并更改工程文件,并保证编译之后运行依然OK。 3.2 开始移植 将整个STemWin目录拷贝到工程目录下:3 ?- n1 p0 J# |2 _/ L" N2 K& Q, Q ![]() ) Q$ X' M2 r; s: I2 p 打开LCD Demo的工程文件,将STemWin下必要的文件添加进工程,具体文件以及路径如下:% ~5 y/ j" R. ^7 \' o0 B 4 \2 R0 A" N$ N STemWin/Config/GUIConf.c3 x- T! |% f+ I$ P+ o2 } STemWin/Config/GUIConf.h STemWin/Config/GUIDRV_Template.c STemWin/Config/LCDConf_FlexColor_Template.c; s5 W) W/ c& q! l STemWin/Lib/STemWin_CM7_wc16_ARGB.a STemWin/OS/GUI_X.c: w9 Y) o3 g$ C' x0 X- @/ g9 U 添加完成之后,工程目录结构中如下: ! L7 F& G6 Y+ p" x ![]() ( J4 c4 _7 Y3 u- ~" j3 [! s 将STemWin_CM7_wc16_ARGB.a设置为库文件,具体配置方法如下: ![]() - Q" y/ x) C6 o6 P( _ e" f 修改工程的头文件包含路径,增加以下几个路径: 0 x" b. [; E3 C9 w% Y" ] ![]() 3.3 修改代码- F0 O, e2 Z' ^$ j* r7 z 3.3.1 修改LCDConf_FlexColor_Template.c 找到XSIZE_PHYS和YSIZE_PHYS,并修改为实际LCD的分辨率 , t, S& l5 |; m& ]2 W$ Q ![]() ' u; ~' `6 \0 s 修改LCD_X_Config(void),具体修改为+ C5 K2 r4 d4 o+ x l ; b) D* K% T6 Z3 f ![]() # `6 g I' L3 {/ X9 u( r( ^/ J 修改LCD_X_DisplayDriver(void),加入我们自己的LCD屏的初始化函数。- V; S1 P( K8 k" m ![]() 修改一下几个函数,该方法根据具体使用的LCD确定,本例程使用的是SPI通讯的LCD屏幕,指令和数据均为 8 bit8 s$ T2 ~: R: _# G LcdWriteReg(U16 Data) —> LcdWriteReg(U8 Data)* s: i8 u. v4 Z: I" Z" q1 O; b' q# L7 C LcdWriteData(U16 Data) —> LcdWriteData(U8 Data)3 l2 x/ [( z. E* U/ h5 _8 w# V( ] LcdWriteDataMultiple(U16 * pData, int NumItems) —> LcdWriteDataMultiple(U8 * pData, int NumItems)8 R+ E6 W' X7 ` ![]() * M; A. l5 w, U5 K& g 3.3.2 修改GUIDRV_Template.c [6 w- }/ P; u) O; k* o: L& l4 o 找到 ,加入LCD的画点函数,该函数由LCD驱动 Demo提供,需要根据自己的LCD驱动代码来进行添加。. u" A! d/ v" h0 @ + [$ t, Q& ?* l ![]() 3.3.3 修改GUConf.c! g/ s0 D0 M; C. q9 j( c$ A 修改GUI使用的SDRam大小 ![]() 3.3.4 新建一个空文件 LCDConf.h" |- Z* V$ L0 z- K ? ' g3 \2 W1 n5 P7 y7 u ![]() 3.3.5 由于采用的是RGB格式的LCD屏,因此需要修改GUI_ConfDefaults.h,否则可能会以BGR的方式显示。 / M. ?7 C, Y: V ![]() 7 }% O1 A: D# U$ b3 P2 g4 k 3.3.6 修改stm32h7xx_it.c中的SysTick_Handler函数,加入一下代码,由于GUI_Delay会使用到OS_TimeMS,因此如果不加该段代码,GUI_Delay将无限延时% _% p! n: \) q 7 z! c9 |- h% _1 {% m ![]() 4 验证# f& ~/ V; D" t; M5 ]5 |; ~0 h1 [& G$ g 在main方法中,包含头文件GUI.h,并加入测试代码 . z/ J+ V, M7 i# [ ![]() & `- u9 q6 K. O0 R/ z' [ 实际显示效果: ![]() " P0 |3 @7 X5 I8 ]( f 5 总结/ V, h$ ?* ]2 h u+ {% w 对于一名没有用过STemWin的小白来说,移植还算顺利,比想象中的要Easy一些,中途参考了各方教程,并结合自己的理解,完成了这一次移植。本次移植采用的是GUIDRV_Template_API的方式,后来也有使用GUIDRV_FLEXCOLOR的方式移植了一下,这个后续有空再补。 0 p. e! O5 |- k6 h v 8 E9 X! ]2 W) W: P |
【H745I GUI】1.GreenHouse 灯光控制
【Wio Lite AI视觉开发套件】+移植TensorFlow Lite
STM32H745I-DISCO脉冲宽度调制(PWM)
STM32H745I-DISCO串口通信,输入输出
拷打cubemx【002】——自定义还需基于芯片的工程
STM32硬件结构学习
STM32中BOOT的作用
STM32H7的TCM,SRAM等五块内存基础知识
STM32H7的TCM,SRAM等五块内存基础知识
简单了解一下STM32H7的BDMA