STMCU小助手
发布时间:2021-12-28 22:00
|
1. 简介 最近搞了一块STM32H743的开发板,自带TFT-1.8寸的液晶屏,一直听说STemWin功能强大,想要体验一把。奈何从未移植过STemWin,下意识的感觉还是有点困难,尤其是在网上找了一番关于STemWin的移植教程之后,发现给小白看的教程实在太少,SPI接口的教程更少。因此将自己移植STemWin的过程分享出来,供大伙参考一下。 & [5 a- q& {6 j% L6 h1 O2 r n/ M+ n 2.环境 硬件 MCU信息:STM32H743 TFT屏幕信息:TFT-1.8寸液晶屏(分辨率:160xRGBx128;驱动IC:ST7735S;通讯接口:SPI): o. c5 b3 s; q( C 软件 HAL库信息:STM32Cube_FW_H7_V1.6.0(在使用STM32CubeMX生成STM32H7工程时会提示下载,目录在:C:\Users$username$\STM32Cube\Repository\STM32Cube_FW_H7_V1.6.0)5 q8 Y6 F) h$ C8 z. ?9 i STemWin信息:下载完上述的HAL库之后,STemWin也已经下载OK,具体位置如下:C:\Users$username$\STM32Cube\Repository\STM32Cube_FW_H7_V1.6.0\Middlewares\ST
, U8 \' |. Q" d! N 3.移植 3.1 移植前准备 开发板提供了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 开始移植1 s$ ]7 ~% w9 |0 x8 @ 将整个STemWin目录拷贝到工程目录下:6 \( ?3 L( P+ v, U: ~- ] T
4 N- x T" x$ K H+ i$ h/ x$ l8 V 打开LCD Demo的工程文件,将STemWin下必要的文件添加进工程,具体文件以及路径如下:1 _4 E) V Y! r6 y) B5 K - [& s0 { |' V+ I4 c STemWin/Config/GUIConf.c STemWin/Config/GUIConf.h" _4 S$ p! E5 o0 q STemWin/Config/GUIDRV_Template.c& K( L( p( {& `4 _# t& E STemWin/Config/LCDConf_FlexColor_Template.c8 x. z. E6 X- u STemWin/Lib/STemWin_CM7_wc16_ARGB.a6 _& h6 C# h( M( ^" M STemWin/OS/GUI_X.c3 n: x1 y+ N" t8 @6 |* L, y 添加完成之后,工程目录结构中如下: ; `+ W: L3 W ?* Q8 A6 ]
将STemWin_CM7_wc16_ARGB.a设置为库文件,具体配置方法如下:2 I0 U( x9 ?4 F+ x # Y3 d: }( B8 U+ K0 R
- Y2 |5 _4 r& k& C( r# ?2 s 修改工程的头文件包含路径,增加以下几个路径:/ j$ [, s$ B+ J2 t4 U3 r2 ^+ W + H _3 ?* ~( U& b% D7 i0 o
3.3 修改代码$ }. m2 P+ P, z, E/ y. E, G 3.3.1 修改LCDConf_FlexColor_Template.c 找到XSIZE_PHYS和YSIZE_PHYS,并修改为实际LCD的分辨率' O ]6 U% I& ]$ Z ( D, W1 _. H0 u. r9 B9 A
修改LCD_X_Config(void),具体修改为
' p3 y. ^: v2 a5 h 修改LCD_X_DisplayDriver(void),加入我们自己的LCD屏的初始化函数。
修改一下几个函数,该方法根据具体使用的LCD确定,本例程使用的是SPI通讯的LCD屏幕,指令和数据均为 8 bit+ q) y, V! v/ t7 T( O$ f' x6 k # n% J1 e( ]! x: f1 t& } LcdWriteReg(U16 Data) —> LcdWriteReg(U8 Data)5 J8 R4 R% Z$ S# f LcdWriteData(U16 Data) —> LcdWriteData(U8 Data)& `7 A& {0 l2 d; @4 P0 ]2 @ LcdWriteDataMultiple(U16 * pData, int NumItems) —> LcdWriteDataMultiple(U8 * pData, int NumItems)+ s8 @* }9 W) @% ~4 [5 x
3.3.2 修改GUIDRV_Template.c 找到 ,加入LCD的画点函数,该函数由LCD驱动 Demo提供,需要根据自己的LCD驱动代码来进行添加。, i' d r3 W8 I* x0 W8 I2 ~
1 {4 Y( N) [; ^& p* K 3.3.3 修改GUConf.c4 o5 j- z. H) C% z# R7 H 修改GUI使用的SDRam大小 1 H! }# r( }9 T7 Y
. k$ ~' g' h( H 3.3.4 新建一个空文件 LCDConf.h ' S+ ~3 O- P% H! \' G* |# q, b
3.3.5 由于采用的是RGB格式的LCD屏,因此需要修改GUI_ConfDefaults.h,否则可能会以BGR的方式显示。
3.3.6 修改stm32h7xx_it.c中的SysTick_Handler函数,加入一下代码,由于GUI_Delay会使用到OS_TimeMS,因此如果不加该段代码,GUI_Delay将无限延时+ I( K" S, g9 M9 W1 ^' M7 p / z1 i# m+ M$ o% S3 @; C; J/ c! ?
4 验证 在main方法中,包含头文件GUI.h,并加入测试代码 0 V" I7 z# c; ]* Y5 d
实际显示效果:* ]. z: m6 k, ?' y' \4 u: A- f! P
5 总结 对于一名没有用过STemWin的小白来说,移植还算顺利,比想象中的要Easy一些,中途参考了各方教程,并结合自己的理解,完成了这一次移植。本次移植采用的是GUIDRV_Template_API的方式,后来也有使用GUIDRV_FLEXCOLOR的方式移植了一下,这个后续有空再补。 |
【 逢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实现温度、湿度、气压数据读取
微信公众号
手机版