stm32f4開發(fā)板驅(qū)動(dòng)LCD液晶屏的個(gè)人總結(jié)
研究了幾天的F4的FSMC方式驅(qū)動(dòng)觸摸屏,得到一些認(rèn)識(shí),現(xiàn)在列舉如下,流水帳般沒有組織的記錄僅供自己以后參考
使用的是一款叫微雪電子的F407的開發(fā)板,但是他們的客服卻不太愿解答用戶提出的問題。
觸摸屏是以前購(gòu)買火牛的時(shí)候帶的一塊LCD屏,屏上有HY32D字樣,里面含有控制電路,相關(guān)硬件是SSD1289和ADS7843,SSD1289控制LCD,ADS7843通過(guò)SPI控制觸摸屏。
配合開發(fā)板附帶的測(cè)試代碼,總是不明白FSMC的工作原理,因?yàn)闆]有看到如何選擇哪個(gè)塊,哪個(gè)區(qū),而且硬件電路也沒看很懂。
總結(jié)如下
1、NEx是四個(gè)塊的第一塊的4個(gè)區(qū)(每個(gè)64M)的選擇信號(hào),比如你選擇FSMC_Bank1_NORSRAM4,即NE4,你要做的就是把NE4的GPIO腳設(shè)置成復(fù)用,其他就不用管了,因?yàn)檫@個(gè)NE4會(huì)自動(dòng)控制,不需要人為控制它的高低,比如在讀寫數(shù)據(jù)的時(shí)候它自動(dòng)會(huì)低,所以硬件上可以將這個(gè)腳跟LCD的片選CS接一起。
2、相關(guān)的還有RD、WR腳也不需要自己控制,復(fù)用完就可以了
3、還有文檔里有HADDR[27:26]這個(gè)量,搞了半天,原來(lái)這貨是內(nèi)部的,你是看不到,控制不了的,它的意思是說(shuō)第一塊的四個(gè)區(qū)的選擇可以表現(xiàn)到這2bit上,就是說(shuō),你選了NE4,HADDR[27:26]的值就是11;選了NE1,HADDR[27:26]的值就是00。
4、看下面的圖,這個(gè)LCD的CS由三個(gè)腳控制,看了下這個(gè)74LVC139,發(fā)現(xiàn)它的規(guī)律有一項(xiàng)是1腳為低且2、3腳為高,7腳才為低。所以我一直沒搞明白的兩句代碼
#define LCD_REG (*((volatile unsigned short *) 0x6F000000)) /* RS = 0 */
#define LCD_RAM (*((volatile unsigned short *) 0x6F010000)) /* RS = 1 */
就可以解釋了。因?yàn)檫@個(gè)地址如果按手冊(cè)上講應(yīng)該是可以寫成0x6cxxxxxx的,為什么寫成0x6F呢,就是為了把A23和A24一直拉高,所以在讀寫數(shù)據(jù)的時(shí)候NE4又會(huì)自動(dòng)變低,這個(gè)時(shí)候的LCD_CS 就低了,此時(shí)數(shù)據(jù)讀寫什么的都不成問題了。其實(shí)可以看到這個(gè)地址的高8位--0x6C的后4bit是1100,其中11按照地址總線算應(yīng)該是第27、26位,因?yàn)槭?6位寬度的,所以地址都右移了一位,那么A23和24對(duì)應(yīng)的就是1100的00兩位,所以是0x6F了。
5、其中一位RS比較重要,因?yàn)檫@個(gè)腳是讀寫數(shù)據(jù)或者命令的選擇腳,為高寫數(shù)據(jù),為低寫命令,所以地址就變成了0x6F000000和0x6F010000,因?yàn)檫@個(gè)電路把A15接到RS上了