1. 程式人生 > >stm32f4開發板驅動LCD液晶屏的個人總結

stm32f4開發板驅動LCD液晶屏的個人總結

研究了幾天的F4的FSMC方式驅動觸控式螢幕,得到一些認識,現在列舉如下,流水帳般沒有組織的記錄僅供自己以後參考

使用的是一款叫微雪電子的F407的開發板,但是他們的客服卻不太願解答使用者提出的問題。

觸控式螢幕是以前購買火牛的時候帶的一塊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了。

5、其中一位RS比較重要,因為這個腳是讀寫資料或者命令的選擇腳,為高寫資料,為低寫命令,所以地址就變成了0x6F000000和0x6F010000,因為這個電路把A15接到RS上了