请选择 进入手机版 | 继续访问电脑版

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

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

[复制链接]
STMCU小助手 发布时间:2021-12-28 22:00
1. 简介
( [. t9 Z6 s$ W% |* M* ~最近搞了一块STM32H743的开发板,自带TFT-1.8寸的液晶屏,一直听说STemWin功能强大,想要体验一把。奈何从未移植过STemWin,下意识的感觉还是有点困难,尤其是在网上找了一番关于STemWin的移植教程之后,发现给小白看的教程实在太少,SPI接口的教程更少。因此将自己移植STemWin的过程分享出来,供大伙参考一下。$ ]2 M. r& N& ~4 n

' ]! \  t( H$ \' w% B, @" g2.环境

$ Q& n9 ~5 b6 ~6 \9 r0 X硬件4 c2 N; R) |" ]" f# Z% m
MCU信息:STM32H743
8 i  v3 ^' }# n. T) D( \TFT屏幕信息:TFT-1.8寸液晶屏(分辨率:160xRGBx128;驱动IC:ST7735S;通讯接口:SPI). P: ~0 A! D' N3 Z0 G7 \

- `- D. b+ L+ `; g. E! y软件0 l9 h0 Y4 |6 E# Q2 }6 P
HAL库信息:STM32Cube_FW_H7_V1.6.0(在使用STM32CubeMX生成STM32H7工程时会提示下载,目录在:C:\Users$username$\STM32Cube\Repository\STM32Cube_FW_H7_V1.6.0)
0 k5 G' Q* B  j) n% ZSTemWin信息:下载完上述的HAL库之后,STemWin也已经下载OK,具体位置如下:C:\Users$username$\STM32Cube\Repository\STM32Cube_FW_H7_V1.6.0\Middlewares\ST
( F+ Y% k2 L: A1 W  O4 i! u& X
+ z. s- Y& w1 G* v$ d; g; i
20201030102024935.png
5 z$ Y6 ?7 V, \' n0 I" I( ?
% j# P& {0 P8 d2 N) }" v# A
3.移植
& U- ~5 w$ N2 ?. y3.1 移植前准备
2 L: n6 s$ T* _3 k2 E开发板提供了TFT-1.8寸LCD的SPI驱动Demo,屏幕可以正常使用,我是基于该工程进行的移植。重点关注Demo中的以下几个函数,函数名可能跟我提供的有所出入,具体视自己的LCD驱动代码而定。1 a" V+ b7 `. c8 q1 I
: J5 b! H5 R! d0 z
LCD_Init(void) --------------------------- SPI驱动代码,以及LCD的初始化
# J4 g' ~6 X: S; p4 Q# o/ W% oLCD_WriteCmd(uint8_t cmd)---------LCD写命令
# e0 @: D5 Q* R3 k( {2 FLCD_WriteData(uint8_t data)---------LCD写数据$ G: E7 _% g6 h' `8 E1 s( V2 ?0 B
工程目录中,如果有lcd.c,lcd.h,gui.c,gui.h,请先将文件重命名,并更改工程文件,并保证编译之后运行依然OK。
) w" U. X; \7 Q7 z% c3.2 开始移植$ u& o! z; e! L: }9 I6 o
将整个STemWin目录拷贝到工程目录下:
! D( u, ~* x8 S. b1 g6 G, b2 e3 \/ {8 s: x& s% v( v
20201030103730118.png

# L& X2 |/ R& S" E: p( Y! t3 }5 O# R9 O( |( M+ N
打开LCD Demo的工程文件,将STemWin下必要的文件添加进工程,具体文件以及路径如下:
3 o& T7 i+ n; R- P7 e% o
4 P$ Y% X# |, h% g* rSTemWin/Config/GUIConf.c
' j& W* P8 i# H0 ~STemWin/Config/GUIConf.h
! ~5 }# Y4 r/ X" l/ n0 PSTemWin/Config/GUIDRV_Template.c9 W$ b/ ?5 Z8 l; z. N
STemWin/Config/LCDConf_FlexColor_Template.c( |9 @- C* K) T$ V
STemWin/Lib/STemWin_CM7_wc16_ARGB.a
' f* l1 C1 s$ `8 v" F$ i  q! j1 KSTemWin/OS/GUI_X.c/ O, g* e+ h* y1 ?8 Z" `  s
添加完成之后,工程目录结构中如下:3 n# e% J  a8 j% d) j
' l( g3 M! C! Q: _( e( }
20201030125619112.png
$ R1 {/ F; f2 O/ l

, f( j4 j! `4 U  a  X将STemWin_CM7_wc16_ARGB.a设置为库文件,具体配置方法如下:
; d& Q( h1 u( K7 W2 }" L9 p8 \! o2 m8 D3 n) s
20201030125657442.png
+ L' G) p; P' x7 J' B3 d9 O

$ t$ c* O/ O  `- L5 N) A2 ^+ m修改工程的头文件包含路径,增加以下几个路径:4 B" q# h2 f4 T" b

* _1 i! c9 e/ Z8 @8 V( e) @
20201030123144456.png

  t2 J. J" R  W, w% Q9 U- \* t
7 q- w+ j- |; i( N" B) Q$ U' H4 }+ T3.3 修改代码
3 \  V. ^, _; @+ N3.3.1 修改LCDConf_FlexColor_Template.c) g0 |& m+ |* N# w/ t& E$ R
找到XSIZE_PHYS和YSIZE_PHYS,并修改为实际LCD的分辨率
' i* l2 v3 j9 l+ A9 |2 h# q3 j% D0 F
20201030124826997.png
! ^# W8 U* ~2 N  t, ^
9 M: t& V7 A) [0 I
修改LCD_X_Config(void),具体修改为
% E/ z4 [) q" {6 J6 \, E) Y6 q" }$ w9 p! `" b& z
20201030125311598.png
# k$ g6 w3 `% z: X+ ?4 Q
& J6 L* F2 D0 E: p
修改LCD_X_DisplayDriver(void),加入我们自己的LCD屏的初始化函数。
% t* c, Z3 t3 x! b8 T+ E* a6 A
4 r7 Q" u  J& E; f- w& f
2020103013012870.png
% X/ s% p' B' d2 C4 g. ~+ u

; q; I+ ~2 V1 d% l) p' m! H5 q修改一下几个函数,该方法根据具体使用的LCD确定,本例程使用的是SPI通讯的LCD屏幕,指令和数据均为 8 bit1 Q: d1 M* G6 ^8 {  O
! m  G4 q" r2 C& N; L; A3 l" y( C
LcdWriteReg(U16 Data) —> LcdWriteReg(U8 Data)
  `& m" ?/ q. H8 o# g# hLcdWriteData(U16 Data) —> LcdWriteData(U8 Data)
, l! G1 H, v1 @: T. LLcdWriteDataMultiple(U16 * pData, int NumItems) —> LcdWriteDataMultiple(U8 * pData, int NumItems)' B$ _( M  o, s/ `7 v4 D

( P" w3 a1 M( _$ N. x, B. d
20201030130326151.png

6 f3 C2 C% ?% F: R" o$ z" H4 Y- L+ p& a" v9 \9 l) H: W- ]% C, w
3.3.2 修改GUIDRV_Template.c
/ L3 r. [) D8 j- i. r找到 ,加入LCD的画点函数,该函数由LCD驱动 Demo提供,需要根据自己的LCD驱动代码来进行添加。
' J7 D) k. X# ~6 e- ~" t" s3 \: ^- \6 ?& [3 B6 P
20201030131338659.png
  {+ f# j- ^% R3 z" @' K* {+ g
1 ?  w+ x; L) Y
3.3.3 修改GUConf.c- @; [  m( |0 H
修改GUI使用的SDRam大小. Z2 _% b; s# w3 Q) m9 z# o

$ \0 k& e* O8 o! h
20201030132052116.png
! a4 G# B% u! s
1 d0 z6 V8 d) [6 ?) v1 ?: l, d
3.3.4 新建一个空文件 LCDConf.h5 j( V  f/ ^" J  X. o

" v; x8 z0 g/ C
20201030132227734.png

5 Y. _! c2 i7 q% E$ X# ?) ~; i, A) s6 ~1 w7 f9 m. x- o& u
3.3.5 由于采用的是RGB格式的LCD屏,因此需要修改GUI_ConfDefaults.h,否则可能会以BGR的方式显示。
/ T* H; t2 K- M& K2 T2 ?  Q
4 {  P! B% G6 j; x% N1 G% [4 _
2020103013351178.png
% Z+ F" F& g/ J3 Q5 n  O

! {/ s* p3 ~/ B7 f9 D' @" k! j3.3.6 修改stm32h7xx_it.c中的SysTick_Handler函数,加入一下代码,由于GUI_Delay会使用到OS_TimeMS,因此如果不加该段代码,GUI_Delay将无限延时. w$ I  E. @( K2 [" z! _( Y" ^, [
1 [, j2 U+ M6 G4 i
20201030133633194.png
0 h' X. q# I- ], b

# N! c8 _; S" C6 f4 验证0 B7 f4 ^( l1 m( i7 c
在main方法中,包含头文件GUI.h,并加入测试代码9 L, ~; P, }  }0 L7 `* ~% @

4 X) n. e$ W7 D5 W* r1 Q3 M
20201030134315259.png

6 X! O6 n6 ~% O9 G; n/ |; N7 j( w) i$ o% F7 |8 i
实际显示效果:/ E( e0 U: J9 ]! Z% g; a+ i7 R! k3 ]
7 k1 @( b3 H6 p0 x! \7 _
20201030134823222.png

1 v2 F1 D+ T8 M4 X; Y3 @' x) L2 T4 f: Y7 A* ]" U
5 总结
0 I7 M. I( a3 v. |# j8 e" u对于一名没有用过STemWin的小白来说,移植还算顺利,比想象中的要Easy一些,中途参考了各方教程,并结合自己的理解,完成了这一次移植。本次移植采用的是GUIDRV_Template_API的方式,后来也有使用GUIDRV_FLEXCOLOR的方式移植了一下,这个后续有空再补。9 a8 w3 U7 U% v% ]; q
! @% P  q" [" L( b: J
; g/ O% `6 J& E' s% |3 I

. u: L8 p$ d: _1 `% u* R/ d
收藏 评论0 发布时间:2021-12-28 22:00

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版