首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

stm32f4开发板驱动LCD液晶屏的个人总结

stm32f4开发板驱动LCD液晶屏的个人总结

触摸屏是以前购买火牛的时候带的一块LCD屏,屏上有HY32D字样,里面含有控制电路,相关硬件是SSD1289和ADS7843,SSD1289控制LCD,ADS7843通过SPI控制触摸屏。

配合开发板附带的测试代码,总是不明白FSMC的工作原理,因为没有看到如何选择哪个块,哪个区,而且硬件电路也没看很懂。

总结如下
1、NEx是四个块的第一块的4个区(每个64M)的选择信号,比如你选择FSMC_Bank1_NORSRAM4,即NE4,你要做的就是把NE4的GPIO脚设置成复用,其他就不用管了,因为这个NE4会自动控制,不需要人为控制它的高低,比如在读写数据的时候它自动会低,所以硬件上可以将这个脚跟LCD的片选CS接一起。
2、相关的还有RD、WR脚也不需要自己控制,复用完就可以了
3、还有文档里有HADDR[27:26]这个量,搞了半天,原来这货是内部的,你是看不到,控制不了的,它的意思是说第一块的四个区的选择可以表现到这2bit上,就是说,你选了NE4,HADDR[27:26]的值就是11;选了NE1,HADDR[27:26]的值就是00。
4、看下面的图,这个LCD的CS由三个脚控制,看了下这个74LVC139,发现它的规律有一项是1脚为低且2、3脚为高,7脚才为低。所以我一直没搞明白的两句代码
#define LCD_REG       (*((volatile unsigned short *) 0x6F000000)) /* RS = 0 */
#define LCD_RAM       (*((volatile unsigned short *) 0x6F010000)) /* RS = 1 */

就可以解释了。因为这个地址如果按手册上讲应该是可以写成0x6cxxxxxx的,为什么写成0x6F呢,就是为了把A23和A24一直拉高,所以在读写数据的时候NE4又会自动变低,这个时候的LCD_CS 就低了,此时数据读写什么的都不成问题了。其实可以看到这个地址的高8位--0x6C的后4bit是1100,其中11按照地址总线算应该是第27、26位,因为是16位宽度的,所以地址都右移了一位,那么A23和24对应的就是1100的00两位,所以是0x6F了。
返回列表