STMCU小助手
发布时间:2021-12-28 22:00
|
1. 简介0 J/ e* B; R) N, \, t8 c9 m 最近搞了一块STM32H743的开发板,自带TFT-1.8寸的液晶屏,一直听说STemWin功能强大,想要体验一把。奈何从未移植过STemWin,下意识的感觉还是有点困难,尤其是在网上找了一番关于STemWin的移植教程之后,发现给小白看的教程实在太少,SPI接口的教程更少。因此将自己移植STemWin的过程分享出来,供大伙参考一下。 $ |5 k5 Q; K& z* k( M9 K 2.环境2 z, q' v- L1 N4 F {% V/ V 硬件1 @" b) W) F. w3 G6 S! P: \ MCU信息:STM32H743. i3 Q8 F: B3 S2 s# u) l TFT屏幕信息:TFT-1.8寸液晶屏(分辨率:160xRGBx128;驱动IC:ST7735S;通讯接口:SPI)6 `3 P4 q) R H; f: N) @; m 软件 HAL库信息:STM32Cube_FW_H7_V1.6.0(在使用STM32CubeMX生成STM32H7工程时会提示下载,目录在:C:\Users$username$\STM32Cube\Repository\STM32Cube_FW_H7_V1.6.0)" k6 p, E; v; e$ k0 Y STemWin信息:下载完上述的HAL库之后,STemWin也已经下载OK,具体位置如下:C:\Users$username$\STM32Cube\Repository\STM32Cube_FW_H7_V1.6.0\Middlewares\ST ; n* L& x' j( R( x) E
+ C3 ]7 L3 Q; v/ k3 @ 3.移植9 E: ~: x' M! @- @3 q6 `/ q' K 3.1 移植前准备 开发板提供了TFT-1.8寸LCD的SPI驱动Demo,屏幕可以正常使用,我是基于该工程进行的移植。重点关注Demo中的以下几个函数,函数名可能跟我提供的有所出入,具体视自己的LCD驱动代码而定。 " L9 |% b% J# v LCD_Init(void) --------------------------- SPI驱动代码,以及LCD的初始化3 M( s# R9 L9 d4 f6 t( O) \ LCD_WriteCmd(uint8_t cmd)---------LCD写命令8 L' w+ ?. f0 s1 D5 r% ]; | LCD_WriteData(uint8_t data)---------LCD写数据) \; G# _: m6 z0 h+ X5 Q 工程目录中,如果有lcd.c,lcd.h,gui.c,gui.h,请先将文件重命名,并更改工程文件,并保证编译之后运行依然OK。 3.2 开始移植 将整个STemWin目录拷贝到工程目录下:
# e `9 w# l4 K 打开LCD Demo的工程文件,将STemWin下必要的文件添加进工程,具体文件以及路径如下: , n l" V; M" B2 k0 m/ K- p9 u# ^0 ` STemWin/Config/GUIConf.c: |& b( P! x3 X: U! A, A! ` STemWin/Config/GUIConf.h STemWin/Config/GUIDRV_Template.c STemWin/Config/LCDConf_FlexColor_Template.c& l, B; U( ]7 X. Y: o0 l% V STemWin/Lib/STemWin_CM7_wc16_ARGB.a: h1 _# _8 {/ `9 V STemWin/OS/GUI_X.c 添加完成之后,工程目录结构中如下:
将STemWin_CM7_wc16_ARGB.a设置为库文件,具体配置方法如下:/ i7 r4 O+ n# U; d* j3 c0 A
# L1 ~5 \% u. R2 R 修改工程的头文件包含路径,增加以下几个路径:
4 f; m7 `6 u! A9 c 3.3 修改代码& t0 I* C: |$ T+ p) g% u 3.3.1 修改LCDConf_FlexColor_Template.c 找到XSIZE_PHYS和YSIZE_PHYS,并修改为实际LCD的分辨率
4 i+ r) x& ~% {; S/ p# W8 j 修改LCD_X_Config(void),具体修改为 6 W6 y8 B, s2 n' X) u J' p
修改LCD_X_DisplayDriver(void),加入我们自己的LCD屏的初始化函数。
; R3 Z: b/ F+ d1 Z2 ]& B 修改一下几个函数,该方法根据具体使用的LCD确定,本例程使用的是SPI通讯的LCD屏幕,指令和数据均为 8 bit : _+ r) w; i c4 X LcdWriteReg(U16 Data) —> LcdWriteReg(U8 Data)+ k# ]' |, ^: i* F LcdWriteData(U16 Data) —> LcdWriteData(U8 Data) LcdWriteDataMultiple(U16 * pData, int NumItems) —> LcdWriteDataMultiple(U8 * pData, int NumItems) 9 V, F# y% m% l" y
( \2 X9 ^5 ]7 C6 V9 T5 j 3.3.2 修改GUIDRV_Template.c 找到 ,加入LCD的画点函数,该函数由LCD驱动 Demo提供,需要根据自己的LCD驱动代码来进行添加。 # d# z, E7 R$ y1 S" V3 [1 H$ c# f
3.3.3 修改GUConf.c 修改GUI使用的SDRam大小
1 E# t1 L3 j. A" B 3.3.4 新建一个空文件 LCDConf.h# e0 o, q4 n- Q+ f4 z
3.3.5 由于采用的是RGB格式的LCD屏,因此需要修改GUI_ConfDefaults.h,否则可能会以BGR的方式显示。
3.3.6 修改stm32h7xx_it.c中的SysTick_Handler函数,加入一下代码,由于GUI_Delay会使用到OS_TimeMS,因此如果不加该段代码,GUI_Delay将无限延时9 ?+ C! ?' H6 s) ]$ V5 D! y- S: t
; b8 n- b3 f i4 W* b3 W 4 验证 在main方法中,包含头文件GUI.h,并加入测试代码: A0 {/ A8 e O6 e2 i 5 C6 s1 x2 O* U( \9 ]- p5 c& p, {" d
实际显示效果:6 Y2 ?9 O2 K( S. }3 I1 |& O( o 4 D. `* B7 u* Y% W, D0 \
2 V; e' ^ d/ M0 m& u2 a" a 5 总结 对于一名没有用过STemWin的小白来说,移植还算顺利,比想象中的要Easy一些,中途参考了各方教程,并结合自己的理解,完成了这一次移植。本次移植采用的是GUIDRV_Template_API的方式,后来也有使用GUIDRV_FLEXCOLOR的方式移植了一下,这个后续有空再补。 f3 Y4 p/ Y* p& B0 l* P " s: i. N9 D* U% @" J* m8 L - M+ \! s. Q" k5 l5 E |
【 逢7发帖赢大礼】1、利用CubeMX生成正点原子H7R7开发板的STM32CubeIDE工程
【STM32H735G-DK测评】ADC3+TIMER1+DMA 采样模拟信号
【STM32H735DK测评】Ethernet+lwip DHCP获取IP地址
STM32H743基于CubeMx5.0配置手册
【STM32H735G-DK测评】lvgl移植
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
【福利三:逢7发帖赢大礼】使用MPU6050模块、img_dsc、img_btn机制实现一些简单有趣的动画效果
【福利三:逢7发帖赢大礼】使用arc弧形拉条控件控制PWM舵机及使用SPI3接口操作NRF24L01模块进行无线通信
【福利三:逢7发帖赢大礼】调试nucleo-WBA65RI工程测试样板的一些心得
【福利三:逢7发帖赢大礼】lv_timer和BME680实现温度、湿度、气压数据读取
微信公众号
手机版