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

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

[复制链接]
STMCU小助手 发布时间:2021-12-28 22:00
1. 简介( g4 W' y  ]# s
最近搞了一块STM32H743的开发板,自带TFT-1.8寸的液晶屏,一直听说STemWin功能强大,想要体验一把。奈何从未移植过STemWin,下意识的感觉还是有点困难,尤其是在网上找了一番关于STemWin的移植教程之后,发现给小白看的教程实在太少,SPI接口的教程更少。因此将自己移植STemWin的过程分享出来,供大伙参考一下。6 a- L2 ~' I" i" y- `+ W' I0 a
. }% A2 m# j: h
2.环境

7 w: N( G/ _' H' _$ J硬件
6 K0 E. O+ _7 h  t+ bMCU信息:STM32H743
9 a: h7 ?5 M/ `6 F3 A; GTFT屏幕信息:TFT-1.8寸液晶屏(分辨率:160xRGBx128;驱动IC:ST7735S;通讯接口:SPI)
* l6 T/ Y4 Q: X% \( N, ~  P- a' i* }9 M1 n
软件
4 j% ~' G6 z9 f2 {; uHAL库信息:STM32Cube_FW_H7_V1.6.0(在使用STM32CubeMX生成STM32H7工程时会提示下载,目录在:C:\Users$username$\STM32Cube\Repository\STM32Cube_FW_H7_V1.6.0)
2 b# O  L$ A) W  _8 b  q; CSTemWin信息:下载完上述的HAL库之后,STemWin也已经下载OK,具体位置如下:C:\Users$username$\STM32Cube\Repository\STM32Cube_FW_H7_V1.6.0\Middlewares\ST2 b1 ]' J% ?% M. }* u
( ~! I8 \7 b+ l: }- T; G3 N
20201030102024935.png
6 R# f1 I3 v1 y$ i

+ V3 `7 \5 _9 t2 P3.移植
3 }1 `( h2 v9 g( `, \0 F3.1 移植前准备2 s7 u6 u, A: o0 t
开发板提供了TFT-1.8寸LCD的SPI驱动Demo,屏幕可以正常使用,我是基于该工程进行的移植。重点关注Demo中的以下几个函数,函数名可能跟我提供的有所出入,具体视自己的LCD驱动代码而定。
2 [3 E7 d% F! ~
+ o- L* m- \: x; U8 fLCD_Init(void) --------------------------- SPI驱动代码,以及LCD的初始化
3 T$ [4 p/ J( H3 i5 ZLCD_WriteCmd(uint8_t cmd)---------LCD写命令
* O. Z5 B4 b; h3 o. e/ GLCD_WriteData(uint8_t data)---------LCD写数据
* S- y. D% c$ ]5 r; d工程目录中,如果有lcd.c,lcd.h,gui.c,gui.h,请先将文件重命名,并更改工程文件,并保证编译之后运行依然OK。
+ s& p- X6 N$ G" \/ x& @  h3.2 开始移植
. i, r3 o( G9 p( H; u  F将整个STemWin目录拷贝到工程目录下:: w8 ^4 T+ t, v2 w

: U3 y$ D, \& h7 x
20201030103730118.png
( M6 E3 V( Q* G

! O$ z" t* ~/ q6 f  r9 q: c5 v6 J7 i7 _打开LCD Demo的工程文件,将STemWin下必要的文件添加进工程,具体文件以及路径如下:5 s* T4 @2 u; R8 q0 n* ?

% L8 e2 w- P. M1 mSTemWin/Config/GUIConf.c4 G, C$ W6 M/ g5 F! j) [/ A  d
STemWin/Config/GUIConf.h" I+ w5 D: ?8 u3 G$ H
STemWin/Config/GUIDRV_Template.c* i, b* h  p' m. y) d
STemWin/Config/LCDConf_FlexColor_Template.c3 b( d0 {  t! [4 ^. G
STemWin/Lib/STemWin_CM7_wc16_ARGB.a( g3 W2 [: @# U) `
STemWin/OS/GUI_X.c
& }7 u! j: W6 o8 n  O. `- R6 r添加完成之后,工程目录结构中如下:
/ s8 o. E( A9 c  V: x+ O! B. S* z; c) M6 Z$ |) e. U& u/ s
20201030125619112.png

" }/ f& \2 H7 w# E7 p1 |* y" ?6 c7 s$ v' ]8 f# |+ n" p
将STemWin_CM7_wc16_ARGB.a设置为库文件,具体配置方法如下:
3 m) f. e% ~$ o! E2 ^+ |& |% C/ J
20201030125657442.png
: y5 Y+ `, x5 M: d$ {6 ?+ k( n8 @% |& |: F
8 _8 l, b1 H6 C# N" `7 N
修改工程的头文件包含路径,增加以下几个路径:& u% l0 i! Y) w4 w# d. o3 k, c
, o5 k6 Q3 f0 g/ G4 S( \
20201030123144456.png
) ]& o5 o$ B" S# H5 h4 k: t
" i! a; I& D( l6 V* Q
3.3 修改代码5 H7 y( I6 \5 u) A6 B
3.3.1 修改LCDConf_FlexColor_Template.c
; @; R) z  l" t& K找到XSIZE_PHYS和YSIZE_PHYS,并修改为实际LCD的分辨率
' V. n: ?' X( ^9 j6 c( i, f: M4 D# d9 q
20201030124826997.png
& g# ?6 x0 g9 `0 G. C% F) G

) x! ]0 ~' c) t1 f2 O3 W修改LCD_X_Config(void),具体修改为
6 _- @5 R. o; U2 g5 N0 v
" W/ C: l, u0 o. s8 e# y, y5 P" q4 d
20201030125311598.png
5 N8 x7 ?* `( M3 d
# K% w' X7 h: D5 U: V  _$ G
修改LCD_X_DisplayDriver(void),加入我们自己的LCD屏的初始化函数。& j% `/ E4 q; t

3 ?4 F4 N( B9 ?  ~- }2 Y' ?9 R
2020103013012870.png

6 B7 F) E/ I. T1 j/ y: y
* w# |5 M: ~. U; b' z9 n修改一下几个函数,该方法根据具体使用的LCD确定,本例程使用的是SPI通讯的LCD屏幕,指令和数据均为 8 bit
, s! d9 K- |2 H7 M- Z
. c2 m, r2 F) f8 F3 e- CLcdWriteReg(U16 Data) —> LcdWriteReg(U8 Data)) \0 D5 v' {) T( u; Y3 k0 ]
LcdWriteData(U16 Data) —> LcdWriteData(U8 Data)
% X, R# T* D! v5 a+ L5 jLcdWriteDataMultiple(U16 * pData, int NumItems) —> LcdWriteDataMultiple(U8 * pData, int NumItems)
6 Q# z  d! O' y% }
9 {2 g, j/ v" S5 m
20201030130326151.png

  m( K# h5 \. t/ ~/ H' l( L" r7 W- _* N2 k1 P
3.3.2 修改GUIDRV_Template.c
) C: B: `( J) Y  B% k找到 ,加入LCD的画点函数,该函数由LCD驱动 Demo提供,需要根据自己的LCD驱动代码来进行添加。
# A- d% \; P! Q0 _7 ~( n8 \6 W3 s
7 p1 G& a6 R. F0 x# ]
20201030131338659.png
9 `3 Z9 l; N' D4 H0 U+ f

3 |' p" b- O, N3.3.3 修改GUConf.c% t* Q( s( b" m- h$ C5 {
修改GUI使用的SDRam大小
6 Y- i7 A- d2 E1 I8 V7 e. Z+ P7 Y9 ^3 h% q. A2 f
20201030132052116.png

' P, h1 f& Q0 b, K
6 R1 `- w% }! S5 O7 M3.3.4 新建一个空文件 LCDConf.h
$ \5 u, i: @. `' a6 \3 }: U7 }4 n6 `+ E4 C. {) r/ z7 k7 u
20201030132227734.png
. E* Q3 s1 @1 |, l

3 m+ G. e& E* @1 N3.3.5 由于采用的是RGB格式的LCD屏,因此需要修改GUI_ConfDefaults.h,否则可能会以BGR的方式显示。+ J& o) [. _+ o2 F

8 V9 a% E4 X2 E% U6 n) Z1 j
2020103013351178.png

/ h  j' A. m* s0 [4 m5 G) B! S/ P/ x  j
3.3.6 修改stm32h7xx_it.c中的SysTick_Handler函数,加入一下代码,由于GUI_Delay会使用到OS_TimeMS,因此如果不加该段代码,GUI_Delay将无限延时
' B! l- v# A. U' y
: I; P' u* q- H: v
20201030133633194.png

5 v/ m; O' h+ q$ }# C1 ~  ~' h* n  M; G& G. d; S+ z
4 验证6 a: X% |/ u/ Y3 S9 B
在main方法中,包含头文件GUI.h,并加入测试代码9 `7 D6 @$ o: `( `" U8 ?0 m! p
  N4 Q( \+ S: w) @+ y% `
20201030134315259.png

8 C& Q# T4 i6 g8 a
6 U' ^. ?! ?1 r7 ^5 @实际显示效果:; j, h( n% K: t, B9 v7 i5 }

' ?: s# ?5 ^/ R
20201030134823222.png
3 \2 _# `! X0 @: g4 M

7 X+ K0 Z' P$ E3 l" V- u4 t5 总结
: ?5 u3 E9 h; _6 D& K对于一名没有用过STemWin的小白来说,移植还算顺利,比想象中的要Easy一些,中途参考了各方教程,并结合自己的理解,完成了这一次移植。本次移植采用的是GUIDRV_Template_API的方式,后来也有使用GUIDRV_FLEXCOLOR的方式移植了一下,这个后续有空再补。  m, o% _8 E1 W* N2 Z, z# O

5 K. i2 s( @* f* R5 e7 P
1 G# W9 D; a: \2 W; x8 h# W
0 o5 D# F  M% U' ^7 _- i$ z  S
收藏 评论0 发布时间:2021-12-28 22:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版