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

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

[复制链接]
STMCU小助手 发布时间:2021-12-28 22:00
1. 简介
/ c- h1 i; z% a- o3 g, H最近搞了一块STM32H743的开发板,自带TFT-1.8寸的液晶屏,一直听说STemWin功能强大,想要体验一把。奈何从未移植过STemWin,下意识的感觉还是有点困难,尤其是在网上找了一番关于STemWin的移植教程之后,发现给小白看的教程实在太少,SPI接口的教程更少。因此将自己移植STemWin的过程分享出来,供大伙参考一下。5 s9 g/ b$ G( ^' h

$ E, K; f7 w, K- b8 `: a2.环境

/ n$ w1 d8 Z  ?硬件
- W; Y% y8 [) d( i1 Z9 r* d7 bMCU信息:STM32H743
8 U: F9 t- v$ u5 mTFT屏幕信息:TFT-1.8寸液晶屏(分辨率:160xRGBx128;驱动IC:ST7735S;通讯接口:SPI)
0 n: c; J4 B2 i) m8 ?! V1 w2 Y- ^: k# }9 A) t) ?
软件
2 {7 d" ~, ?, W* h) THAL库信息:STM32Cube_FW_H7_V1.6.0(在使用STM32CubeMX生成STM32H7工程时会提示下载,目录在:C:\Users$username$\STM32Cube\Repository\STM32Cube_FW_H7_V1.6.0)6 L# G, u1 Y& n
STemWin信息:下载完上述的HAL库之后,STemWin也已经下载OK,具体位置如下:C:\Users$username$\STM32Cube\Repository\STM32Cube_FW_H7_V1.6.0\Middlewares\ST
) V& K$ E7 r6 A9 ?# p
2 I' Y2 f, k" s/ ^% w; k
20201030102024935.png

4 R- A& D8 |$ w0 ~( z- B1 p' {+ W0 f2 E% ?, e/ b) B4 C9 H) j
3.移植
$ I5 s) Q5 S& [7 E3.1 移植前准备
* ?5 J, ~- W6 @# H/ {开发板提供了TFT-1.8寸LCD的SPI驱动Demo,屏幕可以正常使用,我是基于该工程进行的移植。重点关注Demo中的以下几个函数,函数名可能跟我提供的有所出入,具体视自己的LCD驱动代码而定。4 W8 ]3 Z9 n6 a% C! i5 A" ^( z/ N" w

  t* |: Y/ ?) n  ]% C7 W' Q! @LCD_Init(void) --------------------------- SPI驱动代码,以及LCD的初始化
; Z* H& s9 {6 ?& r/ Q' [. `LCD_WriteCmd(uint8_t cmd)---------LCD写命令, \/ I" l. N' U1 F3 K, t2 V# a
LCD_WriteData(uint8_t data)---------LCD写数据# A7 g8 x) J" J2 ^
工程目录中,如果有lcd.c,lcd.h,gui.c,gui.h,请先将文件重命名,并更改工程文件,并保证编译之后运行依然OK。, l0 m+ k$ |8 N
3.2 开始移植
( ^* L3 G' }6 S1 Y1 S将整个STemWin目录拷贝到工程目录下:* p* J7 `7 |) Q5 C, S; L

( o% P! }. \1 W/ j0 Z2 a) a1 X
20201030103730118.png

: {' X% [4 R8 |& j" I$ n6 X" s
7 Y( T" S2 H* N- {; M打开LCD Demo的工程文件,将STemWin下必要的文件添加进工程,具体文件以及路径如下:
7 n6 C' F& {% s$ ^7 P; s8 n: E) G
# B$ o6 a2 O# p% n# w* BSTemWin/Config/GUIConf.c
. d4 U7 l6 n: V- P# jSTemWin/Config/GUIConf.h
* ?0 t' C/ E# G/ c- pSTemWin/Config/GUIDRV_Template.c# L# n6 D0 m/ q! F/ ^
STemWin/Config/LCDConf_FlexColor_Template.c
6 M! d- q4 w& ~: y/ I1 c: GSTemWin/Lib/STemWin_CM7_wc16_ARGB.a
$ o' F. q5 y! ?6 z9 C2 N5 x, k  ?, kSTemWin/OS/GUI_X.c( |4 Z, A9 s6 I) k7 L) E
添加完成之后,工程目录结构中如下:
! K' v2 j/ f3 `/ c) |" a* Z- |0 W+ v7 Q+ c
20201030125619112.png

( T5 M5 q6 e* S% \$ ~2 k; P4 m8 o' u) n2 E7 A6 l
将STemWin_CM7_wc16_ARGB.a设置为库文件,具体配置方法如下:$ ?; K  y4 F" c5 W2 Z6 P9 m" ^/ n. I

; M, L" U( T6 Q. `& G% j; o
20201030125657442.png

" A$ W& D, S3 \( @* K
* n$ r1 }: n/ [( k# U修改工程的头文件包含路径,增加以下几个路径:
" T9 {+ n+ |' {: f9 ?. H- _7 P% d% c
20201030123144456.png
5 f; k) c* T# b; _
* v6 Z4 u; D3 m% _- N2 w
3.3 修改代码
& A, z9 l) M' }. H' G( r: l3.3.1 修改LCDConf_FlexColor_Template.c( [) L% C7 P& o) o, w  {( X# o: A
找到XSIZE_PHYS和YSIZE_PHYS,并修改为实际LCD的分辨率
' y0 E/ h1 l2 R  M! u2 e0 c/ S+ ^/ D# j; W2 z2 r# X! V
20201030124826997.png

" `0 Z& B7 D" W5 Z) \6 a
! e$ |3 Q5 j( X; Y, o5 ^修改LCD_X_Config(void),具体修改为
1 f" i) i0 P: b8 s, D
/ A* H/ n& R. z
20201030125311598.png
# S5 Q4 w  b+ Z2 \: t
3 D* ^- D+ L/ X& G
修改LCD_X_DisplayDriver(void),加入我们自己的LCD屏的初始化函数。
# ^; e1 d$ t  E0 q& H$ n% l( H/ X& k+ D! u' k$ u0 X
2020103013012870.png
% {3 W( v# P2 G

% b$ V: ], |/ F: k8 ^& _  m4 \5 G3 ?5 {修改一下几个函数,该方法根据具体使用的LCD确定,本例程使用的是SPI通讯的LCD屏幕,指令和数据均为 8 bit; X2 [9 V: X% V
; }+ A5 v( B: B& I2 a
LcdWriteReg(U16 Data) —> LcdWriteReg(U8 Data)
3 r4 T. L, f) A3 ~' \; I% @LcdWriteData(U16 Data) —> LcdWriteData(U8 Data)
; }! J  ^* y+ [5 S3 r" ~LcdWriteDataMultiple(U16 * pData, int NumItems) —> LcdWriteDataMultiple(U8 * pData, int NumItems): a1 |+ z3 }0 Z4 Z6 ]" [& q

7 y! Q1 t0 ^- D7 s8 S( z  j
20201030130326151.png
$ R1 p3 O1 F3 h/ d& n
9 |+ ?/ W: v" K- ^3 n' \  {8 w: }
3.3.2 修改GUIDRV_Template.c
* B; d2 O, O- ]- m4 _找到 ,加入LCD的画点函数,该函数由LCD驱动 Demo提供,需要根据自己的LCD驱动代码来进行添加。/ J. x: f: S9 q6 f$ ^; R

) n" L- d, G- D' j6 j  N; O
20201030131338659.png

3 M" s+ K7 v- g. P- T* b( @9 ~$ S# b$ G
3.3.3 修改GUConf.c
9 a; D1 i( h1 f1 X! M" a修改GUI使用的SDRam大小3 L& @, d1 A, b5 _( e; E# ?; r

5 p9 L9 R, C: D/ H
20201030132052116.png

6 r& b3 Y- F* h2 G1 K  _! M' {5 \' w3 `* N: ^
3.3.4 新建一个空文件 LCDConf.h) ~' y$ r% U; W1 j

# ]8 x, O5 _+ @
20201030132227734.png

2 O. ~8 j* Y1 ?) Z3 `1 ]- F* r
' m% h( \& s9 O' Z. _4 K; B3.3.5 由于采用的是RGB格式的LCD屏,因此需要修改GUI_ConfDefaults.h,否则可能会以BGR的方式显示。
" e7 r' c7 q1 Y1 o" Y$ A8 |7 N# y" F7 V& q. ~6 V
2020103013351178.png
5 s; S6 @# w4 u2 C$ D% R' u

7 e% R+ n0 e5 u3.3.6 修改stm32h7xx_it.c中的SysTick_Handler函数,加入一下代码,由于GUI_Delay会使用到OS_TimeMS,因此如果不加该段代码,GUI_Delay将无限延时
: `2 G1 s- ]( r# Y& [0 ]; k. B
2 O$ F( h7 i; e5 q( q) ?# w% ^! o
20201030133633194.png

+ l6 G# Y2 [( N4 n6 b8 N) }! R' a
7 Y6 K2 P  a" {+ b2 K+ N4 验证
' Y. ?; }* B  B2 ?/ l在main方法中,包含头文件GUI.h,并加入测试代码
' R! {! G: v7 i0 u  ]: ]! j
7 F9 `# W+ ]% c% {
20201030134315259.png

& d, F6 }6 B4 E" g/ Z2 Q0 x! I# Q7 A& S% g* P' o9 ]" n
实际显示效果:; x7 \% D+ i9 b4 x$ o# [
  E: R2 Q6 s( X7 s/ d1 W
20201030134823222.png

2 r( h' D1 o# b8 r; v& d6 A% H% C  Y7 t# Z# S
5 总结4 Q4 `$ X) @+ O1 K( b* [
对于一名没有用过STemWin的小白来说,移植还算顺利,比想象中的要Easy一些,中途参考了各方教程,并结合自己的理解,完成了这一次移植。本次移植采用的是GUIDRV_Template_API的方式,后来也有使用GUIDRV_FLEXCOLOR的方式移植了一下,这个后续有空再补。: H, V( i% Y- f

+ M6 S2 V( j/ `7 Z- i4 @/ _
( @  P7 m5 d3 p+ B
$ y. D5 C3 `7 X3 X4 {
收藏 评论0 发布时间:2021-12-28 22:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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