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

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

[复制链接]
STMCU小助手 发布时间:2021-12-28 22:00
1. 简介
/ @7 ?! Q% j/ _最近搞了一块STM32H743的开发板,自带TFT-1.8寸的液晶屏,一直听说STemWin功能强大,想要体验一把。奈何从未移植过STemWin,下意识的感觉还是有点困难,尤其是在网上找了一番关于STemWin的移植教程之后,发现给小白看的教程实在太少,SPI接口的教程更少。因此将自己移植STemWin的过程分享出来,供大伙参考一下。0 F5 |( U' e5 H2 F* n0 l# O
9 W6 ], c+ z. N, w; z2 S
2.环境

, q* v- J% E, e1 u6 q硬件- w& E$ K6 J  B) m4 }& Q
MCU信息:STM32H743
1 p2 X) W: d2 a! r2 L1 ZTFT屏幕信息:TFT-1.8寸液晶屏(分辨率:160xRGBx128;驱动IC:ST7735S;通讯接口:SPI)
% s/ ]  I- c# ]4 n; J8 c7 R! W! b( T  s5 B8 D1 f. f2 N- E
软件* @2 Z: z. w& ^9 d
HAL库信息:STM32Cube_FW_H7_V1.6.0(在使用STM32CubeMX生成STM32H7工程时会提示下载,目录在:C:\Users$username$\STM32Cube\Repository\STM32Cube_FW_H7_V1.6.0)
5 V. `' F, Y6 X2 i' B2 w! ^STemWin信息:下载完上述的HAL库之后,STemWin也已经下载OK,具体位置如下:C:\Users$username$\STM32Cube\Repository\STM32Cube_FW_H7_V1.6.0\Middlewares\ST
& f% O$ n8 C1 j+ I/ x
3 c! ~2 f9 ^$ A
20201030102024935.png

9 X8 U' ]5 L2 ^+ B0 r* j* ]/ w
" e. w% ~' |6 @# a3.移植8 q* W  k5 ]) T6 G" ^. W' l3 _
3.1 移植前准备
' D9 f0 E* m5 ~: |+ k! |% g开发板提供了TFT-1.8寸LCD的SPI驱动Demo,屏幕可以正常使用,我是基于该工程进行的移植。重点关注Demo中的以下几个函数,函数名可能跟我提供的有所出入,具体视自己的LCD驱动代码而定。" A2 Y2 m2 \4 V. A! q" H! ~

% L: k% e/ S' h1 GLCD_Init(void) --------------------------- SPI驱动代码,以及LCD的初始化- A# g& `$ k, F& l3 U. [
LCD_WriteCmd(uint8_t cmd)---------LCD写命令
# k! N. z- `  [2 yLCD_WriteData(uint8_t data)---------LCD写数据: X! Q/ ^# s& v  \- q! f% u
工程目录中,如果有lcd.c,lcd.h,gui.c,gui.h,请先将文件重命名,并更改工程文件,并保证编译之后运行依然OK。
- W# @1 |  T$ b( g3.2 开始移植0 c7 e$ ^  m0 q/ k5 b/ n7 v% \
将整个STemWin目录拷贝到工程目录下:# z% U) q$ `  |9 [, g$ v( s5 i

" J# _# S! y0 O* u& B4 ^
20201030103730118.png

. t$ Z( J+ {, o1 D2 }
8 J- J" y3 S) H0 I打开LCD Demo的工程文件,将STemWin下必要的文件添加进工程,具体文件以及路径如下:2 X2 r9 o1 O$ }5 f; c$ g
5 y  @1 u6 [7 q7 m$ J8 H' r
STemWin/Config/GUIConf.c% U0 F7 M& F' K1 ]' w$ j
STemWin/Config/GUIConf.h* r+ p- O; L8 J# C; H4 M
STemWin/Config/GUIDRV_Template.c
) N; c$ Q0 U3 E% Y; G9 J. vSTemWin/Config/LCDConf_FlexColor_Template.c
, l1 V6 V" \) XSTemWin/Lib/STemWin_CM7_wc16_ARGB.a
: V/ C7 @: f0 x; X. V" VSTemWin/OS/GUI_X.c
  e: T% Y$ N' ?! s, a. f添加完成之后,工程目录结构中如下:/ v" k  z  x( [0 m" B
+ g% s7 o* r- c% j: x( ?
20201030125619112.png

5 I1 W# ~7 u+ _3 \: p4 O6 p* m8 `' o: r$ m8 ]0 U- X! I" H; _/ w
将STemWin_CM7_wc16_ARGB.a设置为库文件,具体配置方法如下:2 t" E8 T$ L  K1 Y" w* \& l

6 F2 p# w6 p9 Q3 ^5 g8 s
20201030125657442.png

7 Q- d: |  {# T# Q
- d8 T% C& o. N; i3 ]4 Y修改工程的头文件包含路径,增加以下几个路径:% ~9 L+ C. }/ D* `1 J7 k2 J
; P) f$ b5 A- w: }3 a& V, Q
20201030123144456.png
9 r( b0 b" }" a8 ?

8 h# W: B5 i) ]# T9 N  @9 A3.3 修改代码6 r' V4 c5 p$ ~4 G+ i  I3 w/ N3 `' E
3.3.1 修改LCDConf_FlexColor_Template.c
; Q7 e, N% P* P# n: k0 _  W. M找到XSIZE_PHYS和YSIZE_PHYS,并修改为实际LCD的分辨率$ U  s! q4 K" @/ \  c
& {5 R) o: z! M3 a# p
20201030124826997.png

3 {" `* ?% ?) ]( K. X# W* h9 }: q. c" c# d  g" n
修改LCD_X_Config(void),具体修改为
! ?( F9 L% \( f+ `  Z! i! t
# d& L; D0 U0 T6 _( I
20201030125311598.png

3 M! i( R$ Q- ]1 u& h7 r: N* I) r; M. _
修改LCD_X_DisplayDriver(void),加入我们自己的LCD屏的初始化函数。
( a9 T: s. ]% g" q; u- O
  y! `" h( q) k+ w6 B
2020103013012870.png
8 a3 t5 ?0 Y2 U$ q5 T. \

5 E! T% [$ e3 N! w% a" q! ?4 z修改一下几个函数,该方法根据具体使用的LCD确定,本例程使用的是SPI通讯的LCD屏幕,指令和数据均为 8 bit
" Y5 T1 [6 l* X
1 s" O6 L' i0 ^; tLcdWriteReg(U16 Data) —> LcdWriteReg(U8 Data)* c$ O" o6 f7 |8 }9 W( b
LcdWriteData(U16 Data) —> LcdWriteData(U8 Data)
! i. w" @% F/ k9 i1 B) P, @LcdWriteDataMultiple(U16 * pData, int NumItems) —> LcdWriteDataMultiple(U8 * pData, int NumItems)4 o( {8 W+ \' A
# x' w8 e. U' d( s
20201030130326151.png

4 }2 T, t; @( }' e& l% ~; \- R  @" F& L+ G. y; s- P  c3 O
3.3.2 修改GUIDRV_Template.c+ p1 g, I1 P3 I6 Q- D& ^
找到 ,加入LCD的画点函数,该函数由LCD驱动 Demo提供,需要根据自己的LCD驱动代码来进行添加。* I& n5 K! S  F* ?& W" P! T6 j

5 p6 ]9 s: u, T* l) o% x
20201030131338659.png
/ }3 \* C; |% @" M4 o

6 I5 d7 z! t! \3 B6 t3.3.3 修改GUConf.c
7 g. O! {6 w9 k% Q修改GUI使用的SDRam大小
, D! U4 i: \" o( z9 v' j# w1 x; m& F* M8 ]
20201030132052116.png
. E$ y, a1 ~. _) @# z; h
1 {7 T7 e8 M* p. H) N9 [9 X5 A
3.3.4 新建一个空文件 LCDConf.h
5 |! S1 w/ B5 e, {+ y" \
6 e6 Z4 V  I' B6 k7 v/ b
20201030132227734.png
2 k0 j0 u- G6 C; m; D5 C+ b" w
) C# d4 T* W! K
3.3.5 由于采用的是RGB格式的LCD屏,因此需要修改GUI_ConfDefaults.h,否则可能会以BGR的方式显示。
0 Q& }1 R& [& o3 B$ w6 g0 M4 U  W2 I# Q7 Z1 ~. k! n9 T; {
2020103013351178.png

; P5 L  H8 Y8 v! N  B! e+ N' {+ Y/ K# n. f) A$ [4 u
3.3.6 修改stm32h7xx_it.c中的SysTick_Handler函数,加入一下代码,由于GUI_Delay会使用到OS_TimeMS,因此如果不加该段代码,GUI_Delay将无限延时- g& i7 y8 e! E; r
# u# b2 ^2 j; m6 T1 a4 X
20201030133633194.png
" k1 r* n+ r7 I7 @, t- _9 m& ?! A
: f; j7 V8 s* B
4 验证# k, V; w2 |- \$ P8 N/ x
在main方法中,包含头文件GUI.h,并加入测试代码1 b- Q  m! a* Y6 l9 w1 k6 Y

* i4 p% n* Y* A5 Q
20201030134315259.png

* p7 ~+ z( E1 `0 u  ~" X5 L- d2 H) M2 i, f: ~( q+ E* S
实际显示效果:
6 o  w1 [7 n0 x+ m' {% v5 y4 @5 T/ b7 E
20201030134823222.png

0 W" w5 E. W* _2 a* e& a
" t" B0 H" J% e$ o- y5 Q' \9 D6 z4 i5 总结( @. k0 @+ A- A  w
对于一名没有用过STemWin的小白来说,移植还算顺利,比想象中的要Easy一些,中途参考了各方教程,并结合自己的理解,完成了这一次移植。本次移植采用的是GUIDRV_Template_API的方式,后来也有使用GUIDRV_FLEXCOLOR的方式移植了一下,这个后续有空再补。5 n3 n6 H5 C; z+ d
; N7 C3 R: S! I" S) }2 g1 N
& [1 d! P! d3 E6 G1 a

: Y  a# t& I: A
收藏 评论0 发布时间:2021-12-28 22:00

举报

0个回答

所属标签

相似分享

官网相关资源

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