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

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

[复制链接]
zero99 发布时间:2017-6-2 17:33
基于 FMC8080接口 8位 LCD的 STemWin的移植

$ J5 d7 O4 O7 T0 c# A/ I2 C5 X1前言
" _! S/ Q( u/ d4 O. E. a有客户用我们的STM32F429VET6这颗芯片,用FMC接8080的8位的LCD,我们官方提供的例程或者网上的一些资料一般都是16位,客户在移植过程碰到一些问题,本篇主要介绍FMC接8080的8位的LCD的STemWin的移植过程。( }$ b8 T: |: b; g5 x! s1 h( l
% Z1 |& E2 M. u1 d3 L" o( z
2 问题跟进与分析1 i% v/ [) Z$ B! K) b1 q
1)我们先看下8080屏的时序图如下:7 w# ?, J/ H) w5 U
1.jpg $ _  I. a; h  u
2.jpg 2 [. T2 v) b( ?4 P' W4 T
上图中分别是8080屏的读写时序图,所以关注的管脚其实就是读写信号,片选信号,以及数据信号,所以对应到MCU的连接如下图:
" o5 C8 J. i& Y+ E6 N, C
3.jpg
, D: o4 T' K/ Q$ I1 o5 @有上面的基础之后,我们来看下实际的原理图(下面节选一部分跟LCD接口相关的原理图)
9 {; E4 f1 [. k$ M5 t' l
4.png
; o7 c) W% K& M& g5 f& G2 H! {1 j2)打开CubeMx软件,根据图纸需要配置外部时钟和FMC如下图:
$ f6 z8 c4 ~* x
5.jpg 0 I* p5 Z  {( F* ^% X( q3 |
至此在CubeMx上配置8080屏的参数结束,我们可以先生成一个工程,然后将下面几个文件拷贝到工程里面
  A. B* C( m2 @. w( [5 Y0 C
6.png
; f! n$ L3 N! `7 i& l; ^- a1、GUI_X.C -> “STemWinLibrary522\OS”3 ?3 A" H) b" E0 P+ V8 a9 l1 w
2、 GUIConf.c和LCDConf.c->“STemWin\Src”
0 \. _; _4 N, J9 s' d3、 STemWin532_CM4_IAR.a -> “STemWin\Lib”' U" w, x! Q) E+ |
然后将上述文件的路径加到工程中,以上几步完成之后接下来就开始进行部分的程序修改了。6 h4 m+ J4 G( G
      首先我们点开“GUIConf.C”,会在里面看到这样一个宏:
" n1 }: e( T, Z( G  ?5 Q” #define GUI_NUMBYTES 0x200000”
% J$ e9 g1 Y. v. W6 P  p把“0x200000”改为“1024*50”即可(这个宏定义服务于在函数中向系统申请一个静态空间 aMemory ,接着调用 emWin的库函数GUI_ALLOC_AssignMemory 把该空间分配给 emWin。还有“1024*50”并不是定值,我们也可以改成“1024*40”或其它,视情况而定,但一般建议设置成小于“1024*50”)。然后在“GUIConf.C”中就没有需要修改的了。
3 S) [# {1 ^. C" r9 ?3 X  G$ s9 u7 |接着我们修改LCDConf.c中的驱动文件
0 t9 e. c8 ]/ d5 m: ~
7.png
- x$ G2 x/ b, X$ e" c/ U# x+ ]
8.jpg
& b2 w$ }# I3 c  N# \- g5 G我们需要修改如下的宏,可以根据我们的电路图确定如下宏的定义,首先我们是8位,所以对应的寄存器数据应改成8位,由于LCD片选接的是单片机的NE1,所以其基地址是0x60000000,偏移地址由于是接的A18,所以对应的偏移地址0x0003ffff   }" [& S" o0 ~4 k
9.png * r0 u' o! I# j2 K. `$ p+ ^& z; M

0 E; M/ G. q1 ~. P( o4 z       我们需要修改的是GUIDRV_FLEXCOLOR_F66709这个参数。GUIDRV_FLEXCOLOR_F66709 这个参数的修改要根据你的TFT屏所使用的驱动芯片,如我的TFT使用的驱动芯片是“ILI9341”,那么就改成GUIDRV_FLEXCOLOR_F66709如果是其它型号的驱动芯片则需要查询emWin5.32的用户手册然后进行修改。emWin5.32用户手册。& L1 E" A; _- f7 v& B  r7 S/ {
11.jpg + t6 x+ u3 G  \
上面的步骤完成之后我们再往下看会找到这样一个函数int LCD_X_DisplayDriver(unsigned LayerIndex,unsigned Cmd, void * pData)。在这里我们仅需在case LCD_X_INITCONTROLLER: 项中加入我们TFT液晶的初始化函数即可;
$ q+ X% {% G1 `4 P
12.jpg - X& h! J' D8 Z  B+ u* S1 O; o
以上步骤完成之后,emWin在运行过程中有时会调用延时之类的函数,为了实现精确定时,这里我们选用SysTick。也即需要我们在mian()函数中加入 来初始化SysTick定时器,而在“stm32f4xx_it.c”文件中,我们需要进行这样的修改: % k: p7 S+ o1 l3 e8 L* j0 o
13.jpg ) f0 G- d' p1 b; S( y
最后可以添加一个简单的hello world来测试如下:
! _! x' ^: ]0 D
14.jpg
$ c' K2 z9 x. Y7 b& b

& ~# J. Q. @" B" s. y7 [/ f' A, J$ @+ s+ C1 @% \
3结论* `$ V# q. q4 s3 m
移植的过程看似比较简单,但是有些关键点也需要注意,首先看下A18(RS信号)写寄存器是0,写数据是1是否正确,也就是基地址是否配置正确,下一步是注意如何link到STemWin了,也就是添加TFT屏的驱动芯片的driver,最后检查下配置的LCD的色深的配置是565还是666等。

5 K5 ]# n+ j6 T# J9 j) W7 L( T9 b) `& c* \  I: T  |" A

  h; |" z4 Y% ?2 T& ^* M
基于FMC8080接口8位LCD的STemWin的移植.pdf (612.88 KB, 下载次数: 170)
( V: q, l/ t4 v, X* F! j
更多实战经验
赞 收藏 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管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版