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

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

[复制链接]
STMCU小助手 发布时间:2021-12-28 22:00
1. 简介$ A* m' `0 R3 B6 n( {- y
最近搞了一块STM32H743的开发板,自带TFT-1.8寸的液晶屏,一直听说STemWin功能强大,想要体验一把。奈何从未移植过STemWin,下意识的感觉还是有点困难,尤其是在网上找了一番关于STemWin的移植教程之后,发现给小白看的教程实在太少,SPI接口的教程更少。因此将自己移植STemWin的过程分享出来,供大伙参考一下。
0 g% a& x, l' B
  ~0 @) F  `' L( o7 z2.环境

7 p  ?3 V7 y5 ?硬件
2 O8 _( t  ~9 S/ ]! h6 KMCU信息:STM32H743
; B( P: k; T+ y8 KTFT屏幕信息:TFT-1.8寸液晶屏(分辨率:160xRGBx128;驱动IC:ST7735S;通讯接口:SPI)8 H9 G1 Z+ `# l: E) c) K1 O
2 K9 y! @6 e' I0 ?: R1 p; w
软件# f7 \1 t( `! l4 `  ~" J8 Y3 }
HAL库信息:STM32Cube_FW_H7_V1.6.0(在使用STM32CubeMX生成STM32H7工程时会提示下载,目录在:C:\Users$username$\STM32Cube\Repository\STM32Cube_FW_H7_V1.6.0)
0 k$ x) V- _3 o8 L: B% TSTemWin信息:下载完上述的HAL库之后,STemWin也已经下载OK,具体位置如下:C:\Users$username$\STM32Cube\Repository\STM32Cube_FW_H7_V1.6.0\Middlewares\ST) [& J# v1 R* I2 s3 Q& E8 _
/ W( U  @* c  ~9 Y4 u; @9 S
20201030102024935.png
2 y' l; K! H0 y$ Q& F

# i7 p- H4 Y) b0 i( V8 e7 Z0 L3.移植
: |8 ]( B5 h( G( j1 F! y3.1 移植前准备
! N! m2 a0 @" I5 T' S% a开发板提供了TFT-1.8寸LCD的SPI驱动Demo,屏幕可以正常使用,我是基于该工程进行的移植。重点关注Demo中的以下几个函数,函数名可能跟我提供的有所出入,具体视自己的LCD驱动代码而定。
- @: B3 j  o% k6 E7 Q
, c% ?: Q2 S& Z/ Y1 \LCD_Init(void) --------------------------- SPI驱动代码,以及LCD的初始化! e% U( F' g) m3 A& K# E5 s! v
LCD_WriteCmd(uint8_t cmd)---------LCD写命令
  j+ M3 p$ v, b" @/ V& E$ G9 VLCD_WriteData(uint8_t data)---------LCD写数据7 o# a( n* o3 M* _* {
工程目录中,如果有lcd.c,lcd.h,gui.c,gui.h,请先将文件重命名,并更改工程文件,并保证编译之后运行依然OK。
; e) c! P8 e6 G% M. j( c4 S) I3.2 开始移植
8 w7 t: d- ^; z& B4 _/ \将整个STemWin目录拷贝到工程目录下:
) o  A1 W0 \: Q
: A9 V. l; y" b  Q; E& Y# l
20201030103730118.png

1 f1 I9 Y( o5 n' L+ n0 S/ I
, Z* W! G2 v& O* T% r& Y' u打开LCD Demo的工程文件,将STemWin下必要的文件添加进工程,具体文件以及路径如下:4 V& F$ t% l  h8 [* b3 _7 N% m

5 Z5 E- N" E/ MSTemWin/Config/GUIConf.c: o, e! M% N- |! T2 q
STemWin/Config/GUIConf.h
+ h" T* F! @% B( u# @# ]$ gSTemWin/Config/GUIDRV_Template.c6 T) n$ z* z4 `' T' f
STemWin/Config/LCDConf_FlexColor_Template.c
6 d7 l& g% ~+ n, h% M! d& N8 z$ J6 j+ ySTemWin/Lib/STemWin_CM7_wc16_ARGB.a
, I  n/ Q) c: rSTemWin/OS/GUI_X.c0 T/ C& u3 W" x4 m
添加完成之后,工程目录结构中如下:2 m3 p# V- x& ^8 Y/ B3 U1 f
# h' {/ y; Q2 @2 Y
20201030125619112.png
5 \. j! q3 \1 p9 F: Z

# [' W; t, L3 p* d: B  R将STemWin_CM7_wc16_ARGB.a设置为库文件,具体配置方法如下:+ z1 ~7 X% `5 L1 ]- X
+ P. H  |; t; N; q# v5 \. M, }3 @$ \2 w
20201030125657442.png
( e6 ]! X' m) A, x" f
! A% o4 z) I& \- @2 v) C
修改工程的头文件包含路径,增加以下几个路径:: z% Q- r: Y8 t' u
2 I$ E" Y6 X/ H! n1 V
20201030123144456.png
% Q# A4 j" W7 R3 v0 c. b6 g

$ F. ^9 D3 j" M) w4 ]' X3.3 修改代码
! Y, x9 b# v$ `0 K7 q3.3.1 修改LCDConf_FlexColor_Template.c
. r' ], V' @+ r" {- P( z! M; t3 A找到XSIZE_PHYS和YSIZE_PHYS,并修改为实际LCD的分辨率1 |- J& ]8 ?6 L% H
0 W: A) x& R4 m2 o
20201030124826997.png

, [! o8 a7 d: i: E3 ~0 K6 l6 E, @  j" P% X; Y' b7 E7 u$ p
修改LCD_X_Config(void),具体修改为
7 i0 m8 B7 W6 l8 N. j) {
" W( ^7 s7 j( _" g7 b
20201030125311598.png

. L7 B" B" {- f/ o$ O  h4 j% o: S3 X
修改LCD_X_DisplayDriver(void),加入我们自己的LCD屏的初始化函数。6 C' L/ ?: a4 L- I) D6 t
1 o, [7 X) F! d
2020103013012870.png

' ^  ?! n* \3 Z% U4 |
2 ?# y; @( m. Y修改一下几个函数,该方法根据具体使用的LCD确定,本例程使用的是SPI通讯的LCD屏幕,指令和数据均为 8 bit
8 A. b9 F$ W$ h/ ^/ Q( T
& e" y; t: T4 l9 kLcdWriteReg(U16 Data) —> LcdWriteReg(U8 Data)
9 l, M1 t- G. X3 w! dLcdWriteData(U16 Data) —> LcdWriteData(U8 Data), F4 u# R* e1 x/ i/ g4 g0 h
LcdWriteDataMultiple(U16 * pData, int NumItems) —> LcdWriteDataMultiple(U8 * pData, int NumItems)
9 I! D& h7 U' m* H0 T
: ?0 C3 M, `% _9 X
20201030130326151.png
9 o5 e) d* n+ F0 n3 v1 \: u# y8 K

% r' u* k2 F4 `3 W. G5 U3.3.2 修改GUIDRV_Template.c: p( h6 A) r/ t* n/ S
找到 ,加入LCD的画点函数,该函数由LCD驱动 Demo提供,需要根据自己的LCD驱动代码来进行添加。1 `' i, \# t! ~5 ?

& K, a. ]0 W1 n: x4 ]
20201030131338659.png
, T+ f2 u. ^5 A1 Y* T. o2 q% K; E2 S

* ]$ t7 y1 t* P3.3.3 修改GUConf.c* K! S5 F. u% X. O3 A+ M/ ~
修改GUI使用的SDRam大小& f$ e$ l9 A5 D. p5 Y

: K3 m) Z! t. c* e6 C0 F
20201030132052116.png
+ m) `9 i1 S- @+ W$ |
+ h' p4 a3 ^6 m# u* H
3.3.4 新建一个空文件 LCDConf.h7 k5 ~% e3 V( z; y% c
1 q) [4 \7 I4 z; m/ H
20201030132227734.png
, @7 a  a; {/ y

/ X$ |' }! H% W+ Q' }3.3.5 由于采用的是RGB格式的LCD屏,因此需要修改GUI_ConfDefaults.h,否则可能会以BGR的方式显示。
! A4 a& i5 k0 V/ D6 e- ]# b
. I3 d. r; p% {' N& G
2020103013351178.png
% ~) _: m. h5 B& d" G5 ?
8 e% O- j2 Z7 I
3.3.6 修改stm32h7xx_it.c中的SysTick_Handler函数,加入一下代码,由于GUI_Delay会使用到OS_TimeMS,因此如果不加该段代码,GUI_Delay将无限延时
& Q# |# }4 k# m: \) I2 |$ G. F9 @& B, X+ ^- P) F( s8 U; {1 W
20201030133633194.png

3 u+ `( L- I+ A1 J1 C1 P
7 `4 [0 t+ v+ z) ~2 f# I, v- f2 x4 验证2 S% G3 \$ L7 h" }6 I
在main方法中,包含头文件GUI.h,并加入测试代码4 e1 \8 C0 ?6 \$ Z# I; G8 n

( y( Z4 E- |5 O7 g; B# z
20201030134315259.png
" X- v, J5 L' n$ l- d; u
& D7 J& B" `1 `9 c! x' N
实际显示效果:5 ]/ z6 V9 c- T5 e/ ^5 ]
* J$ t) |: D- L: @6 j$ U
20201030134823222.png

' h0 R9 O& }) H- c2 L& U' e6 P6 R, z2 ~% a2 T. G) c# m$ U
5 总结
% c* U; Z, y5 d1 H. D对于一名没有用过STemWin的小白来说,移植还算顺利,比想象中的要Easy一些,中途参考了各方教程,并结合自己的理解,完成了这一次移植。本次移植采用的是GUIDRV_Template_API的方式,后来也有使用GUIDRV_FLEXCOLOR的方式移植了一下,这个后续有空再补。( G8 a1 U5 V* b) s+ m

# i6 v3 k/ _& _" P6 S7 ^# H. w+ H6 Q  }
. \- \9 V; j2 m& g" a
收藏 评论0 发布时间:2021-12-28 22:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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