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

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

[复制链接]
STMCU小助手 发布时间:2021-12-28 22:00
1. 简介
, K8 L. N0 t: F" ?4 s- r3 [4 z4 X最近搞了一块STM32H743的开发板,自带TFT-1.8寸的液晶屏,一直听说STemWin功能强大,想要体验一把。奈何从未移植过STemWin,下意识的感觉还是有点困难,尤其是在网上找了一番关于STemWin的移植教程之后,发现给小白看的教程实在太少,SPI接口的教程更少。因此将自己移植STemWin的过程分享出来,供大伙参考一下。
+ j9 v8 P+ k, Q( e2 x& [5 a- q& {6 j% L6 h1 O2 r  n/ M+ n
2.环境

" n$ u5 D, z& O& |* f硬件
+ Z" B# W! U  k6 N# FMCU信息:STM32H743
8 H* _8 \& o' Q( j6 _5 z' Y0 ETFT屏幕信息:TFT-1.8寸液晶屏(分辨率:160xRGBx128;驱动IC:ST7735S;通讯接口:SPI): o. c5 b3 s; q( C

4 |# f6 U& E3 R; ]3 C% J0 I5 J软件
' r4 o6 j3 o1 M" p1 m, M' zHAL库信息:STM32Cube_FW_H7_V1.6.0(在使用STM32CubeMX生成STM32H7工程时会提示下载,目录在:C:\Users$username$\STM32Cube\Repository\STM32Cube_FW_H7_V1.6.0)5 q8 Y6 F) h$ C8 z. ?9 i
STemWin信息:下载完上述的HAL库之后,STemWin也已经下载OK,具体位置如下:C:\Users$username$\STM32Cube\Repository\STM32Cube_FW_H7_V1.6.0\Middlewares\ST
) f9 D# c% m' h. x0 c- W
/ f; S# ^2 P& O" U7 B+ m7 {/ ?
20201030102024935.png
' k1 ?: q6 c( i9 y9 B4 ^0 B6 y
, U8 \' |. Q" d! N
3.移植
* m& |  G$ p; f# H+ w7 `$ |$ I3.1 移植前准备
! K- K3 K2 f/ M开发板提供了TFT-1.8寸LCD的SPI驱动Demo,屏幕可以正常使用,我是基于该工程进行的移植。重点关注Demo中的以下几个函数,函数名可能跟我提供的有所出入,具体视自己的LCD驱动代码而定。
$ N4 T5 B+ }: E2 o) C( v
2 d$ K* F8 _4 W9 \' J$ QLCD_Init(void) --------------------------- SPI驱动代码,以及LCD的初始化
' M9 g1 q6 f4 {7 q0 qLCD_WriteCmd(uint8_t cmd)---------LCD写命令
& C: T& _( R1 s: u/ J$ T0 r  T, WLCD_WriteData(uint8_t data)---------LCD写数据
9 |) ]* m* k2 @工程目录中,如果有lcd.c,lcd.h,gui.c,gui.h,请先将文件重命名,并更改工程文件,并保证编译之后运行依然OK。
; c- H6 U4 h% F3.2 开始移植1 s$ ]7 ~% w9 |0 x8 @
将整个STemWin目录拷贝到工程目录下:6 \( ?3 L( P+ v, U: ~- ]  T

; P1 ]; o! Y' H8 o/ a% X4 H
20201030103730118.png
) U) y: E* T9 e! P0 I1 ?
4 N- x  T" x$ K  H+ i$ h/ x$ l8 V
打开LCD Demo的工程文件,将STemWin下必要的文件添加进工程,具体文件以及路径如下:1 _4 E) V  Y! r6 y) B5 K
- [& s0 {  |' V+ I4 c
STemWin/Config/GUIConf.c
5 r# L$ J" r8 I% _. i& q+ {STemWin/Config/GUIConf.h" _4 S$ p! E5 o0 q
STemWin/Config/GUIDRV_Template.c& K( L( p( {& `4 _# t& E
STemWin/Config/LCDConf_FlexColor_Template.c8 x. z. E6 X- u
STemWin/Lib/STemWin_CM7_wc16_ARGB.a6 _& h6 C# h( M( ^" M
STemWin/OS/GUI_X.c3 n: x1 y+ N" t8 @6 |* L, y
添加完成之后,工程目录结构中如下:
4 P& X8 R2 C' P; X; `+ W: L3 W  ?* Q8 A6 ]
20201030125619112.png

+ A( |: b( o* B8 x
* s; e; L5 P, P, E" N6 ]; O将STemWin_CM7_wc16_ARGB.a设置为库文件,具体配置方法如下:2 I0 U( x9 ?4 F+ x
# Y3 d: }( B8 U+ K0 R
20201030125657442.png

1 h* L/ `4 x7 L; l8 r- Y2 |5 _4 r& k& C( r# ?2 s
修改工程的头文件包含路径,增加以下几个路径:/ j$ [, s$ B+ J2 t4 U3 r2 ^+ W
+ H  _3 ?* ~( U& b% D7 i0 o
20201030123144456.png

  O: a1 f7 a9 ?" [* D) {; n
/ a! h# C3 \1 x" y' A' C3 q3.3 修改代码$ }. m2 P+ P, z, E/ y. E, G
3.3.1 修改LCDConf_FlexColor_Template.c
' F' a" O  T9 u1 p; ~找到XSIZE_PHYS和YSIZE_PHYS,并修改为实际LCD的分辨率' O  ]6 U% I& ]$ Z
( D, W1 _. H0 u. r9 B9 A
20201030124826997.png
7 E, N# i3 t/ K9 e

2 ~2 [2 X0 E$ a修改LCD_X_Config(void),具体修改为
9 ~- M0 e$ g! M& C: f9 \* D* q
+ c$ l' P6 ]- k# s5 o
20201030125311598.png

6 R' O$ F3 O: H. r+ I( J1 _3 r' p3 y. ^: v2 a5 h
修改LCD_X_DisplayDriver(void),加入我们自己的LCD屏的初始化函数。
8 g3 S0 \9 \: a: W: }+ L; D
8 M- L" c- G6 y
2020103013012870.png

$ _' T. Q/ F' ~7 a% _
! O( ~6 d* e6 t! W0 J' e* R修改一下几个函数,该方法根据具体使用的LCD确定,本例程使用的是SPI通讯的LCD屏幕,指令和数据均为 8 bit+ q) y, V! v/ t7 T( O$ f' x6 k
# n% J1 e( ]! x: f1 t& }
LcdWriteReg(U16 Data) —> LcdWriteReg(U8 Data)5 J8 R4 R% Z$ S# f
LcdWriteData(U16 Data) —> LcdWriteData(U8 Data)& `7 A& {0 l2 d; @4 P0 ]2 @
LcdWriteDataMultiple(U16 * pData, int NumItems) —> LcdWriteDataMultiple(U8 * pData, int NumItems)+ s8 @* }9 W) @% ~4 [5 x

' V8 r+ b$ ]& k3 l% E4 V( _* R! z* K
20201030130326151.png

1 b' R2 B4 b1 [4 Y6 d& C# y
0 j1 M' H. j* B3.3.2 修改GUIDRV_Template.c
6 ^& Z9 L4 M) q2 s: B7 d找到 ,加入LCD的画点函数,该函数由LCD驱动 Demo提供,需要根据自己的LCD驱动代码来进行添加。, i' d  r3 W8 I* x0 W8 I2 ~

; O# T( q1 H2 ^+ Q
20201030131338659.png

2 s/ }/ d- ?0 |1 {4 Y( N) [; ^& p* K
3.3.3 修改GUConf.c4 o5 j- z. H) C% z# R7 H
修改GUI使用的SDRam大小
6 n' Y( M$ A4 Z* c4 R1 H! }# r( }9 T7 Y
20201030132052116.png

( d& M/ _: k' I% Q& ]7 z" m. n. k$ ~' g' h( H
3.3.4 新建一个空文件 LCDConf.h
2 t0 |7 w7 s; ?) G: Z0 E' S+ ~3 O- P% H! \' G* |# q, b
20201030132227734.png

/ O8 G; Y" G* K2 b
! O; E. _5 W/ ~. ~7 b3.3.5 由于采用的是RGB格式的LCD屏,因此需要修改GUI_ConfDefaults.h,否则可能会以BGR的方式显示。
8 e" c. S/ \' O' y
- Y1 n7 R% q* d+ y: _- w6 F' o
2020103013351178.png
+ E# J! K- _% H# z

  L# C, s; _3 X" N" H+ c3.3.6 修改stm32h7xx_it.c中的SysTick_Handler函数,加入一下代码,由于GUI_Delay会使用到OS_TimeMS,因此如果不加该段代码,GUI_Delay将无限延时+ I( K" S, g9 M9 W1 ^' M7 p
/ z1 i# m+ M$ o% S3 @; C; J/ c! ?
20201030133633194.png
- [$ E% V/ }4 U

0 w! ]5 m4 n9 H7 l+ a6 v1 y2 i4 验证
3 [" ^( h) A/ s5 {7 ~在main方法中,包含头文件GUI.h,并加入测试代码
9 Z) N% c3 E% I0 V" I7 z# c; ]* Y5 d
20201030134315259.png
# J/ l* w* [+ I: X/ }5 n

1 Q& Y5 b, ~; l. a: @- C; ?8 o6 n: i实际显示效果:* ]. z: m6 k, ?' y' \4 u: A- f! P

/ q) \: G; s" z4 Y/ e! b
20201030134823222.png

5 q3 W" b5 g8 p
9 i9 O4 k# g, @( P" }6 x1 b5 总结
2 W8 R/ u. m, T" }& n对于一名没有用过STemWin的小白来说,移植还算顺利,比想象中的要Easy一些,中途参考了各方教程,并结合自己的理解,完成了这一次移植。本次移植采用的是GUIDRV_Template_API的方式,后来也有使用GUIDRV_FLEXCOLOR的方式移植了一下,这个后续有空再补。
' Y( ]& o5 G/ m; w. {: J$ V
  _+ e/ x6 g" R; Q6 a
+ _5 e" {+ ]# W- _% Q2 E! K& {
9 l: u% B) Z& b7 O
赞 收藏 评论0 发布时间:2021-12-28 22:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版