
1. 简介 最近搞了一块STM32H743的开发板,自带TFT-1.8寸的液晶屏,一直听说STemWin功能强大,想要体验一把。奈何从未移植过STemWin,下意识的感觉还是有点困难,尤其是在网上找了一番关于STemWin的移植教程之后,发现给小白看的教程实在太少,SPI接口的教程更少。因此将自己移植STemWin的过程分享出来,供大伙参考一下。0 F5 |( U' e5 H2 F* n0 l# O 9 W6 ], c+ z. N, w; z2 S 2.环境 硬件- w& E$ K6 J B) m4 }& Q MCU信息:STM32H743 TFT屏幕信息:TFT-1.8寸液晶屏(分辨率:160xRGBx128;驱动IC:ST7735S;通讯接口:SPI) 7 R! W! b( T s5 B8 D1 f. f2 N- E 软件* @2 Z: z. w& ^9 d 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\ST ![]() 3.移植8 q* W k5 ]) T6 G" ^. W' l3 _ 3.1 移植前准备 开发板提供了TFT-1.8寸LCD的SPI驱动Demo,屏幕可以正常使用,我是基于该工程进行的移植。重点关注Demo中的以下几个函数,函数名可能跟我提供的有所出入,具体视自己的LCD驱动代码而定。" A2 Y2 m2 \4 V. A! q" H! ~ LCD_Init(void) --------------------------- SPI驱动代码,以及LCD的初始化- A# g& `$ k, F& l3 U. [ LCD_WriteCmd(uint8_t cmd)---------LCD写命令 LCD_WriteData(uint8_t data)---------LCD写数据: X! Q/ ^# s& v \- q! f% u 工程目录中,如果有lcd.c,lcd.h,gui.c,gui.h,请先将文件重命名,并更改工程文件,并保证编译之后运行依然OK。 3.2 开始移植0 c7 e$ ^ m0 q/ k5 b/ n7 v% \ 将整个STemWin目录拷贝到工程目录下:# z% U) q$ ` |9 [, g$ v( s5 i ![]() 打开LCD Demo的工程文件,将STemWin下必要的文件添加进工程,具体文件以及路径如下:2 X2 r9 o1 O$ }5 f; c$ g 5 y @1 u6 [7 q7 m$ J8 H' r STemWin/Config/GUIConf.c% U0 F7 M& F' K1 ]' w$ j STemWin/Config/GUIConf.h* r+ p- O; L8 J# C; H4 M STemWin/Config/GUIDRV_Template.c STemWin/Config/LCDConf_FlexColor_Template.c STemWin/Lib/STemWin_CM7_wc16_ARGB.a STemWin/OS/GUI_X.c 添加完成之后,工程目录结构中如下:/ v" k z x( [0 m" B + g% s7 o* r- c% j: x( ? ![]() * m8 `' o: r$ m8 ]0 U- X! I" H; _/ w 将STemWin_CM7_wc16_ARGB.a设置为库文件,具体配置方法如下:2 t" E8 T$ L K1 Y" w* \& l ![]() 修改工程的头文件包含路径,增加以下几个路径:% ~9 L+ C. }/ D* `1 J7 k2 J ; P) f$ b5 A- w: }3 a& V, Q ![]() 3.3 修改代码6 r' V4 c5 p$ ~4 G+ i I3 w/ N3 `' E 3.3.1 修改LCDConf_FlexColor_Template.c 找到XSIZE_PHYS和YSIZE_PHYS,并修改为实际LCD的分辨率$ U s! q4 K" @/ \ c & {5 R) o: z! M3 a# p ![]() * h9 }: q. c" c# d g" n 修改LCD_X_Config(void),具体修改为 ![]() 7 r: N* I) r; M. _ 修改LCD_X_DisplayDriver(void),加入我们自己的LCD屏的初始化函数。 ![]() 修改一下几个函数,该方法根据具体使用的LCD确定,本例程使用的是SPI通讯的LCD屏幕,指令和数据均为 8 bit LcdWriteReg(U16 Data) —> LcdWriteReg(U8 Data)* c$ O" o6 f7 |8 }9 W( b LcdWriteData(U16 Data) —> LcdWriteData(U8 Data) LcdWriteDataMultiple(U16 * pData, int NumItems) —> LcdWriteDataMultiple(U8 * pData, int NumItems)4 o( {8 W+ \' A # x' w8 e. U' d( s ![]() % ~; \- R @" F& L+ G. y; s- P c3 O 3.3.2 修改GUIDRV_Template.c+ p1 g, I1 P3 I6 Q- D& ^ 找到 ,加入LCD的画点函数,该函数由LCD驱动 Demo提供,需要根据自己的LCD驱动代码来进行添加。* I& n5 K! S F* ?& W" P! T6 j ![]() 3.3.3 修改GUConf.c 修改GUI使用的SDRam大小 ( z9 v' j# w1 x; m& F* M8 ] ![]() 1 {7 T7 e8 M* p. H) N9 [9 X5 A 3.3.4 新建一个空文件 LCDConf.h ![]() ) C# d4 T* W! K 3.3.5 由于采用的是RGB格式的LCD屏,因此需要修改GUI_ConfDefaults.h,否则可能会以BGR的方式显示。 W2 I# Q7 Z1 ~. k! n9 T; { ![]() + N' {+ Y/ K# n. f) A$ [4 u 3.3.6 修改stm32h7xx_it.c中的SysTick_Handler函数,加入一下代码,由于GUI_Delay会使用到OS_TimeMS,因此如果不加该段代码,GUI_Delay将无限延时- g& i7 y8 e! E; r # u# b2 ^2 j; m6 T1 a4 X ![]() : f; j7 V8 s* B 4 验证# k, V; w2 |- \$ P8 N/ x 在main方法中,包含头文件GUI.h,并加入测试代码1 b- Q m! a* Y6 l9 w1 k6 Y ![]() 5 L- d2 H) M2 i, f: ~( q+ E* S 实际显示效果: % v5 y4 @5 T/ b7 E ![]() 5 总结( @. k0 @+ A- A w 对于一名没有用过STemWin的小白来说,移植还算顺利,比想象中的要Easy一些,中途参考了各方教程,并结合自己的理解,完成了这一次移植。本次移植采用的是GUIDRV_Template_API的方式,后来也有使用GUIDRV_FLEXCOLOR的方式移植了一下,这个后续有空再补。5 n3 n6 H5 C; z+ d ; N7 C3 R: S! I" S) }2 g1 N & [1 d! P! d3 E6 G1 a |
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对于硬件信号的优先性判断