你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32H7+ST7735+STEMWIN移植过程分享

[复制链接]
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 e# q0 l4 y* j9 |. c; L$ |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

, I8 s+ o' J9 ~1 G9 ]8 _# m2 d) S( }软件
+ l# Y4 i# ^9 UHAL库信息: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
4 r" R% [5 a- p; }5 s; n* L& x' j( R( x) E
20201030102024935.png
  Z5 Y% r7 i" {' _! S' p
+ C3 ]7 L3 Q; v/ k3 @
3.移植9 E: ~: x' M! @- @3 q6 `/ q' K
3.1 移植前准备
  Q7 y, D6 F( l, a3 Y( B3 n开发板提供了TFT-1.8寸LCD的SPI驱动Demo,屏幕可以正常使用,我是基于该工程进行的移植。重点关注Demo中的以下几个函数,函数名可能跟我提供的有所出入,具体视自己的LCD驱动代码而定。
6 h! l$ K2 F6 @$ L% U- I2 Z6 V" 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。
" t; o3 a5 [& o; P3.2 开始移植
; |$ g/ i5 ?# i8 ~; v* r将整个STemWin目录拷贝到工程目录下:
- z1 {6 N6 S& W# x
' f% L" V. T' v8 T" `
20201030103730118.png

0 [1 W- x4 ]( u- S. f# ^# e  `9 w# l4 K
打开LCD Demo的工程文件,将STemWin下必要的文件添加进工程,具体文件以及路径如下:
3 T2 h% c8 X6 y$ v' [4 d0 [/ H& W# ^, 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
: i% N/ v2 i  gSTemWin/Config/GUIDRV_Template.c
' z' d; p" a* G$ Y2 l+ q+ y4 ~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
$ ~& _% V8 k3 r3 L9 B1 R3 B添加完成之后,工程目录结构中如下:
" C/ M2 Y' v3 i3 u. x+ R0 P
- @* v0 d8 ]# ?
20201030125619112.png

! ~; q+ K3 X+ [, z8 G* \/ |
. E" i1 d3 o) P6 L, K& `. [7 W( ]! P将STemWin_CM7_wc16_ARGB.a设置为库文件,具体配置方法如下:/ i7 r4 O+ n# U; d* j3 c0 A

; X( h9 s3 C! C$ p: H1 Y
20201030125657442.png

3 Y+ f! a% p: k6 P" u8 D# L1 ~5 \% u. R2 R
修改工程的头文件包含路径,增加以下几个路径:
9 `$ p3 C1 r' D* q, m0 B
3 `- F3 P, X9 a/ x
20201030123144456.png
- |" m7 Z  }% m+ q
4 f; m7 `6 u! A9 c
3.3 修改代码& t0 I* C: |$ T+ p) g% u
3.3.1 修改LCDConf_FlexColor_Template.c
3 e5 a' h' p- i8 D7 U, g/ S- F1 @找到XSIZE_PHYS和YSIZE_PHYS,并修改为实际LCD的分辨率
. E! q( `; E  X6 [! j
/ t  o1 ]& y8 [; q+ N/ e
20201030124826997.png
1 u" L' d5 V9 y
4 i+ r) x& ~% {; S/ p# W8 j
修改LCD_X_Config(void),具体修改为
" k; U% q1 g( A4 x* w8 l6 W6 y8 B, s2 n' X) u  J' p
20201030125311598.png
3 h9 ?! r" a! _* \3 f3 [

1 g! t; r" ?) t: s修改LCD_X_DisplayDriver(void),加入我们自己的LCD屏的初始化函数。
6 [2 @: J) s7 k% ~' B
8 H1 T0 W9 w' w' \) |. M
2020103013012870.png
; C0 e9 N8 M+ c" y6 t
; R3 Z: b/ F+ d1 Z2 ]& B
修改一下几个函数,该方法根据具体使用的LCD确定,本例程使用的是SPI通讯的LCD屏幕,指令和数据均为 8 bit
/ }' F0 P5 a  p* |9 `. S% m: _+ r) w; i  c4 X
LcdWriteReg(U16 Data) —> LcdWriteReg(U8 Data)+ k# ]' |, ^: i* F
LcdWriteData(U16 Data) —> LcdWriteData(U8 Data)
' {+ _! w- P) J/ DLcdWriteDataMultiple(U16 * pData, int NumItems) —> LcdWriteDataMultiple(U8 * pData, int NumItems)
+ t# @- P! f9 p# J: ]1 G9 V, F# y% m% l" y
20201030130326151.png

( h; D: W* P+ z( \2 X9 ^5 ]7 C6 V9 T5 j
3.3.2 修改GUIDRV_Template.c
4 R9 q+ @- |' T* w8 d0 ~9 I7 M# h找到 ,加入LCD的画点函数,该函数由LCD驱动 Demo提供,需要根据自己的LCD驱动代码来进行添加。
" S1 j& ~1 v$ e' l& Q# d# z, E7 R$ y1 S" V3 [1 H$ c# f
20201030131338659.png
6 \4 e3 p+ _) d# C# w" {

0 a$ L* ]& R* \+ W3.3.3 修改GUConf.c
: }, r# @- w0 p+ W" V0 t修改GUI使用的SDRam大小
, b1 ?! F9 d% H7 z! l: O. x
4 F  q$ {+ E, x( T& H
20201030132052116.png
# y" s2 [+ o2 h" J7 S! c3 u9 o; I
1 E# t1 L3 j. A" B
3.3.4 新建一个空文件 LCDConf.h# e0 o, q4 n- Q+ f4 z

# s8 k, t+ d0 Z9 U# l5 `+ p
20201030132227734.png
* s6 L0 S; E- h! G

, }+ S5 v/ n# N3 h& S( \% g5 X3.3.5 由于采用的是RGB格式的LCD屏,因此需要修改GUI_ConfDefaults.h,否则可能会以BGR的方式显示。
! F: m! k  _; |+ ]- H7 Y/ Y" o( l1 q& q
; V$ [7 {; x( v
2020103013351178.png

- R; P5 |7 s4 m, \& O
' ]3 i% E" m3 ~+ A6 m& k4 r3.3.6 修改stm32h7xx_it.c中的SysTick_Handler函数,加入一下代码,由于GUI_Delay会使用到OS_TimeMS,因此如果不加该段代码,GUI_Delay将无限延时9 ?+ C! ?' H6 s) ]$ V5 D! y- S: t

4 l" x1 }6 w9 s
20201030133633194.png

' v; M) _% ~% q: k& T7 I' ?: }; b8 n- b3 f  i4 W* b3 W
4 验证
+ v& C# I* ^5 V# S! O. W在main方法中,包含头文件GUI.h,并加入测试代码: A0 {/ A8 e  O6 e2 i
5 C6 s1 x2 O* U( \9 ]- p5 c& p, {" d
20201030134315259.png
+ [4 a# A3 s: Q! M+ i- m

8 Z" K5 O/ U5 Z" C" r实际显示效果:6 Y2 ?9 O2 K( S. }3 I1 |& O( o
4 D. `* B7 u* Y% W, D0 \
20201030134823222.png
$ W7 S: n; L* h4 N1 |& L
2 V; e' ^  d/ M0 m& u2 a" a
5 总结
2 e5 z  [, B1 O' j5 T) [- l# F对于一名没有用过STemWin的小白来说,移植还算顺利,比想象中的要Easy一些,中途参考了各方教程,并结合自己的理解,完成了这一次移植。本次移植采用的是GUIDRV_Template_API的方式,后来也有使用GUIDRV_FLEXCOLOR的方式移植了一下,这个后续有空再补。  f3 Y4 p/ Y* p& B0 l* P
" s: i. N9 D* U% @" J* m8 L

4 t/ D" M6 S  o$ [1 g( ^- M+ \! s. Q" k5 l5 E
赞 收藏 评论0 发布时间:2021-12-28 22:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版