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

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

[复制链接]
STMCU小助手 发布时间:2021-12-28 22:00
1. 简介
, e( o9 r0 a7 c" C最近搞了一块STM32H743的开发板,自带TFT-1.8寸的液晶屏,一直听说STemWin功能强大,想要体验一把。奈何从未移植过STemWin,下意识的感觉还是有点困难,尤其是在网上找了一番关于STemWin的移植教程之后,发现给小白看的教程实在太少,SPI接口的教程更少。因此将自己移植STemWin的过程分享出来,供大伙参考一下。
  ~: h# B! ~4 [. o9 w$ f& d  W. f
7 t& W/ H8 H5 m6 R' @, T1 m1 e2.环境
; f% t( J, G8 y% H% w; g9 F
硬件% o' z. K1 A  S
MCU信息:STM32H743
" M9 C3 C: k7 O- T4 `8 STFT屏幕信息:TFT-1.8寸液晶屏(分辨率:160xRGBx128;驱动IC:ST7735S;通讯接口:SPI)0 c) w" q% R7 `% r
) u/ k& d4 U. ]( _) ]1 L
软件! {  V4 N7 g1 F, a4 J
HAL库信息:STM32Cube_FW_H7_V1.6.0(在使用STM32CubeMX生成STM32H7工程时会提示下载,目录在:C:\Users$username$\STM32Cube\Repository\STM32Cube_FW_H7_V1.6.0)8 u0 h0 x, a+ A/ u/ J. B
STemWin信息:下载完上述的HAL库之后,STemWin也已经下载OK,具体位置如下:C:\Users$username$\STM32Cube\Repository\STM32Cube_FW_H7_V1.6.0\Middlewares\ST/ Q. W/ q2 b  l' N, J
7 X" C! T" x* V1 D$ W
20201030102024935.png

8 D; c" ?- w: G9 {3 S
) t) E* j$ o. J  H) g3.移植
2 a. Z: L, Z. P+ V* `# Y3.1 移植前准备
! v8 X  y  q0 U% _4 P开发板提供了TFT-1.8寸LCD的SPI驱动Demo,屏幕可以正常使用,我是基于该工程进行的移植。重点关注Demo中的以下几个函数,函数名可能跟我提供的有所出入,具体视自己的LCD驱动代码而定。
! S9 ^2 Y  p, P7 u' `
' J9 L+ a2 r0 }0 i& ILCD_Init(void) --------------------------- SPI驱动代码,以及LCD的初始化" M1 v1 P) x. J' v
LCD_WriteCmd(uint8_t cmd)---------LCD写命令
5 Z4 g0 `' ^" h6 K- S$ T! H5 aLCD_WriteData(uint8_t data)---------LCD写数据
) X! U7 T$ K7 B! B  A4 ]) j工程目录中,如果有lcd.c,lcd.h,gui.c,gui.h,请先将文件重命名,并更改工程文件,并保证编译之后运行依然OK。
2 X- w6 u& K! S% [3 e- d3.2 开始移植
, V  O' Z6 J- u9 K: W7 v2 M  g将整个STemWin目录拷贝到工程目录下:3 ?- n1 p0 J# |2 _/ L" N2 K& Q, Q

/ F) M" D( Q+ _/ G7 {$ `( e; Y
20201030103730118.png

; }* q7 w# ?* j! M) Q$ X' M2 r; s: I2 p
打开LCD Demo的工程文件,将STemWin下必要的文件添加进工程,具体文件以及路径如下:% ~5 y/ j" R. ^7 \' o0 B
4 \2 R0 A" N$ N
STemWin/Config/GUIConf.c3 x- T! |% f+ I$ P+ o2 }
STemWin/Config/GUIConf.h
) @8 ^  z" y* H/ r5 d2 Y8 A3 A, @' TSTemWin/Config/GUIDRV_Template.c
4 N; w, K- p( O1 b) c' t( b5 ?/ nSTemWin/Config/LCDConf_FlexColor_Template.c; s5 W) W/ c& q! l
STemWin/Lib/STemWin_CM7_wc16_ARGB.a
) V: V% e$ w, ~& r( ~' ESTemWin/OS/GUI_X.c: w9 Y) o3 g$ C' x0 X- @/ g9 U
添加完成之后,工程目录结构中如下:
' D& o1 y0 k# D8 X! L7 F& G6 Y+ p" x
20201030125619112.png

) c9 n0 A& z& F- E. m( J4 c4 _7 Y3 u- ~" j3 [! s
将STemWin_CM7_wc16_ARGB.a设置为库文件,具体配置方法如下:
" |  o* H& [$ n7 J" N, [
# V  w" L+ X3 o5 n) Q7 Y; i
20201030125657442.png
/ n: h3 v7 v) b, e' R7 {
- Q" y/ x) C6 o6 P( _  e" f
修改工程的头文件包含路径,增加以下几个路径:
& Q" l* h+ X6 y- v0 x" b. [; E3 C9 w% Y" ]
20201030123144456.png
4 \7 p$ Z& b( h2 q7 o/ A9 k

! n, U- [* j- _) [8 n1 l( g3.3 修改代码- F0 O, e2 Z' ^$ j* r7 z
3.3.1 修改LCDConf_FlexColor_Template.c
& J" c/ C$ m  d. w/ \找到XSIZE_PHYS和YSIZE_PHYS,并修改为实际LCD的分辨率
+ k' W  A4 O/ ]6 v1 W+ |% x, t, S& l5 |; m& ]2 W$ Q
20201030124826997.png
' u% h( S2 t; t
' u; ~' `6 \0 s
修改LCD_X_Config(void),具体修改为+ C5 K2 r4 d4 o+ x  l
; b) D* K% T6 Z3 f
20201030125311598.png
! h4 C. H# I* E2 `8 v& s- j) J
# `6 g  I' L3 {/ X9 u( r( ^/ J
修改LCD_X_DisplayDriver(void),加入我们自己的LCD屏的初始化函数。- V; S1 P( K8 k" m

8 W9 c9 w. L8 z% @3 L5 W& v
2020103013012870.png

6 D2 G3 r; l" q
3 L& Y$ u2 F/ G) r& c5 ~修改一下几个函数,该方法根据具体使用的LCD确定,本例程使用的是SPI通讯的LCD屏幕,指令和数据均为 8 bit8 s$ T2 ~: R: _# G

" `1 X2 O0 C( u- h4 VLcdWriteReg(U16 Data) —> LcdWriteReg(U8 Data)* s: i8 u. v4 Z: I" Z" q1 O; b' q# L7 C
LcdWriteData(U16 Data) —> LcdWriteData(U8 Data)3 l2 x/ [( z. E* U/ h5 _8 w# V( ]
LcdWriteDataMultiple(U16 * pData, int NumItems) —> LcdWriteDataMultiple(U8 * pData, int NumItems)8 R+ E6 W' X7 `

2 L4 z2 g0 U, Q" v/ D& G2 {
20201030130326151.png

5 v% |7 {  G' h5 J; l/ A* M; A. l5 w, U5 K& g
3.3.2 修改GUIDRV_Template.c  [6 w- }/ P; u) O; k* o: L& l4 o
找到 ,加入LCD的画点函数,该函数由LCD驱动 Demo提供,需要根据自己的LCD驱动代码来进行添加。. u" A! d/ v" h0 @
+ [$ t, Q& ?* l
20201030131338659.png

- p( I# o, q/ a  p- G* z  x/ C
' a+ J. ^7 `8 N* L3.3.3 修改GUConf.c! g/ s0 D0 M; C. q9 j( c$ A
修改GUI使用的SDRam大小
4 |5 R, |1 W! M, x, U& J, h
& U7 f+ I, I3 J% K7 q: Q
20201030132052116.png
0 k) I" N6 h" {- V5 b2 j9 R

3 Q  \: F- }" a5 d3.3.4 新建一个空文件 LCDConf.h" |- Z* V$ L0 z- K  ?
' g3 \2 W1 n5 P7 y7 u
20201030132227734.png

: s8 L1 I. h7 F
! p0 x% }1 ]) \# [3.3.5 由于采用的是RGB格式的LCD屏,因此需要修改GUI_ConfDefaults.h,否则可能会以BGR的方式显示。
( `# A, u6 i% w6 b5 ^/ M. ?7 C, Y: V
2020103013351178.png

) q% G$ `3 b! l) Y7 }% O1 A: D# U$ b3 P2 g4 k
3.3.6 修改stm32h7xx_it.c中的SysTick_Handler函数,加入一下代码,由于GUI_Delay会使用到OS_TimeMS,因此如果不加该段代码,GUI_Delay将无限延时% _% p! n: \) q
7 z! c9 |- h% _1 {% m
20201030133633194.png
  y( `+ G* S  ]8 Q. z  Z

, `! j$ m; V" ?) n( N  ~4 验证# f& ~/ V; D" t; M5 ]5 |; ~0 h1 [& G$ g
在main方法中,包含头文件GUI.h,并加入测试代码
4 P& w0 V/ f; b8 {: [. z/ J+ V, M7 i# [
20201030134315259.png

# q( s/ ]- B$ e2 @& `- u9 q6 K. O0 R/ z' [
实际显示效果:
- [0 M: g7 a( [1 r3 R" B- ?
: l! n! _2 _5 Z  S; |
20201030134823222.png

9 \3 p/ Y; H! t% b5 q% k; W/ \" P0 |3 @7 X5 I8 ]( f
5 总结/ V, h$ ?* ]2 h  u+ {% w
对于一名没有用过STemWin的小白来说,移植还算顺利,比想象中的要Easy一些,中途参考了各方教程,并结合自己的理解,完成了这一次移植。本次移植采用的是GUIDRV_Template_API的方式,后来也有使用GUIDRV_FLEXCOLOR的方式移植了一下,这个后续有空再补。
( k1 W- w5 q1 A6 g8 d1 o( P' ^
% l/ K1 k2 L" E2 h8 l; F0 p. e! O5 |- k6 h  v
8 E9 X! ]2 W) W: P
收藏 评论0 发布时间:2021-12-28 22:00

举报

0个回答

所属标签

相似分享

官网相关资源

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