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

【实战经验】基于FMC8080接口8位LCD的STemWin的移植

[复制链接]
zero99 发布时间:2017-6-2 17:33
基于 FMC8080接口 8位 LCD的 STemWin的移植
5 O1 ?- @6 ?( @4 U1 W
1前言
( b9 }) T. L6 {& b有客户用我们的STM32F429VET6这颗芯片,用FMC接8080的8位的LCD,我们官方提供的例程或者网上的一些资料一般都是16位,客户在移植过程碰到一些问题,本篇主要介绍FMC接8080的8位的LCD的STemWin的移植过程。9 S; B% s; E8 n9 U6 ?5 i

" }; o- k# }0 c. A" [% |" J2 问题跟进与分析
6 @5 F/ k4 E$ W& P% P! o1)我们先看下8080屏的时序图如下:7 v( Z8 x* Y" f: q5 L" @+ c, I
1.jpg 8 y: K* l- x8 h2 T
2.jpg # u9 N. h2 A$ c6 p; @9 H- k
上图中分别是8080屏的读写时序图,所以关注的管脚其实就是读写信号,片选信号,以及数据信号,所以对应到MCU的连接如下图:# F) x0 C1 H# g, T+ ]; e2 x6 N
3.jpg 6 f: L( ~' u' T) l3 @( W* Z7 V
有上面的基础之后,我们来看下实际的原理图(下面节选一部分跟LCD接口相关的原理图); V$ s) e0 k0 ?/ u, p- k" C- v6 z& c
4.png * i# @7 F# \6 ~8 i9 ]! R
2)打开CubeMx软件,根据图纸需要配置外部时钟和FMC如下图:
- ]0 ?7 d/ j6 K0 m% [
5.jpg
$ O, Y* c* n( J, j至此在CubeMx上配置8080屏的参数结束,我们可以先生成一个工程,然后将下面几个文件拷贝到工程里面& @0 |, l  Y# Z( Q% t  H
6.png   m8 u$ K, @4 b0 i) i
1、GUI_X.C -> “STemWinLibrary522\OS”
+ Z' p7 S3 ]) y4 t; s2、 GUIConf.c和LCDConf.c->“STemWin\Src”* N, B0 m8 L2 m, n; j1 M
3、 STemWin532_CM4_IAR.a -> “STemWin\Lib”4 Q* P. `& l, d; p  i9 g! Q
然后将上述文件的路径加到工程中,以上几步完成之后接下来就开始进行部分的程序修改了。( @. F7 q2 ]( u) k+ {6 U
      首先我们点开“GUIConf.C”,会在里面看到这样一个宏:
6 a5 j1 [, {% v9 M+ T4 G” #define GUI_NUMBYTES 0x200000”+ x3 I- r9 P/ c& X
把“0x200000”改为“1024*50”即可(这个宏定义服务于在函数中向系统申请一个静态空间 aMemory ,接着调用 emWin的库函数GUI_ALLOC_AssignMemory 把该空间分配给 emWin。还有“1024*50”并不是定值,我们也可以改成“1024*40”或其它,视情况而定,但一般建议设置成小于“1024*50”)。然后在“GUIConf.C”中就没有需要修改的了。
/ v( Z1 g# `- e6 ?% g4 h% z% e接着我们修改LCDConf.c中的驱动文件& w0 K, x: K) j9 }- h* Q
7.png
- ?4 t1 t8 ?6 ]
8.jpg
# J* F7 `4 {5 z) j/ V7 M  f* s$ r我们需要修改如下的宏,可以根据我们的电路图确定如下宏的定义,首先我们是8位,所以对应的寄存器数据应改成8位,由于LCD片选接的是单片机的NE1,所以其基地址是0x60000000,偏移地址由于是接的A18,所以对应的偏移地址0x0003ffff
! i6 d; r0 ~/ \7 n+ ^
9.png
% G! y  r; W+ H) C1 L& V9 X. [
! u3 X6 L) C! a       我们需要修改的是GUIDRV_FLEXCOLOR_F66709这个参数。GUIDRV_FLEXCOLOR_F66709 这个参数的修改要根据你的TFT屏所使用的驱动芯片,如我的TFT使用的驱动芯片是“ILI9341”,那么就改成GUIDRV_FLEXCOLOR_F66709如果是其它型号的驱动芯片则需要查询emWin5.32的用户手册然后进行修改。emWin5.32用户手册。. i- W8 R0 i- H- |( Z& x
11.jpg
2 e% r4 I  D- G8 Q9 u* x  b  ~3 f上面的步骤完成之后我们再往下看会找到这样一个函数int LCD_X_DisplayDriver(unsigned LayerIndex,unsigned Cmd, void * pData)。在这里我们仅需在case LCD_X_INITCONTROLLER: 项中加入我们TFT液晶的初始化函数即可;
7 x: e5 F% d$ F
12.jpg
8 B% B/ _8 E6 n  E1 \以上步骤完成之后,emWin在运行过程中有时会调用延时之类的函数,为了实现精确定时,这里我们选用SysTick。也即需要我们在mian()函数中加入 来初始化SysTick定时器,而在“stm32f4xx_it.c”文件中,我们需要进行这样的修改: ; x/ f, o. b# A" J, e+ p
13.jpg + w: [# Q% ^) s2 Z# p7 P& p/ A* d
最后可以添加一个简单的hello world来测试如下:" F; r* e+ o4 R1 R8 q: Q# k
14.jpg
, @1 A, ^0 Q- N

) Q, n" \) G/ M* ~% A
3 ~! q( ]- B9 _$ @! \3结论
" _8 N$ A6 k' ~/ I/ Q移植的过程看似比较简单,但是有些关键点也需要注意,首先看下A18(RS信号)写寄存器是0,写数据是1是否正确,也就是基地址是否配置正确,下一步是注意如何link到STemWin了,也就是添加TFT屏的驱动芯片的driver,最后检查下配置的LCD的色深的配置是565还是666等。
8 f/ D% u: e) V

& P  y& d; p( Z1 {

+ o0 X3 {0 w. O5 o# u, |
基于FMC8080接口8位LCD的STemWin的移植.pdf (612.88 KB, 下载次数: 169)

: k9 O& a* f9 y; K3 F8 Q' C更多实战经验
收藏 2 评论5 发布时间:2017-6-2 17:33

举报

5个回答
zhao.zhao 回答时间:2017-6-3 16:18:48
谢谢楼主
epochal 回答时间:2017-6-15 23:08:23
谢谢分享!!!
weigr 回答时间:2017-6-18 14:28:19
昱枫 回答时间:2019-8-15 17:04:40
代码分享下
playrule 回答时间:2019-9-11 16:47:06
我现在正在用gd32f450做ili9806接口,谢谢楼主的分享

所属标签

相似分享

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