目錄
使用STM32的FSMC模擬8080接口時(shí)序
FSMC簡(jiǎn)介
FSMC NOR/PSRAM中的模式B時(shí)序圖
用FSMC模擬8080時(shí)序
重點(diǎn):HADDR內(nèi)部地址與FSMC地址信號(hào)線的轉(zhuǎn)換(實(shí)現(xiàn)地址對(duì)齊)
使用STM32的FSMC模擬8080接口時(shí)序
????????ILI9341的8080通訊接口時(shí)序可以由STM32使用普通I/O接口進(jìn)行模擬,但這樣效率太低,STM32提供了一種特別的控制方法——使用FSMC接口實(shí)現(xiàn)8080時(shí)序。(如果芯片硬件少于100腳,是無(wú)法使用FSMC來(lái)控制液晶屏,只能使用SPI的方式來(lái)控制)
????????在前面的《FSMC—擴(kuò)展外部SRAM》章節(jié)中了解到STM32的FSMC外設(shè)可以用于控制擴(kuò)展的外部存儲(chǔ)器,而MCU對(duì)液晶屏的操作實(shí)際上就是把顯示數(shù)據(jù)寫(xiě)入到顯存中,與控制存儲(chǔ)器非常類(lèi)似,且8080接口的通訊時(shí)序完全可以使用FSMC外設(shè)產(chǎn)生,因而非常適合使用FSMC控制液晶屏。
FSMC簡(jiǎn)介
????????控制LCD時(shí),適合使用FSMC的NOR\PSRAM模式,它與前面使用FSMC控制SRAM的稍有不同,控制SRAM時(shí)使用的是模式A,而控制LCD時(shí)使用的是與NOR FLASH一樣的模式B,所以我們重點(diǎn)分析框圖中NOR FLASH控制信號(hào)線部分。
????????在控制LCD時(shí),使用的是類(lèi)似異步、地址與數(shù)據(jù)線獨(dú)立的NOR FLASH控制方式,所以實(shí)際上CLK、NWAIT、NADV引腳并沒(méi)有使用到。
????????其中NEx、NOE、NWE都是低電平有效。
????????STM32具有FSMC_NE1/2/3/4號(hào)引腳,不同的引腳對(duì)應(yīng)STM32內(nèi)部不同的地址區(qū)域。 例如,當(dāng)STM32訪問(wèn)0x68000000-0x6BFFFFFF地址空間時(shí),F(xiàn)SMC_NE3引腳會(huì)自動(dòng)設(shè)置為低電平,由于它連接到SRAM的CE#引腳,所以SRAM的片選被使能,而訪問(wèn)0x60000000-0x63FFFFFF地址時(shí),F(xiàn)SMC_NE1會(huì)輸出低電平。當(dāng)使用不同的FSMC_NE引腳連接外部存儲(chǔ)器時(shí),STM32訪問(wèn)外部存儲(chǔ)器的地址不一樣,從而達(dá)到控制多個(gè)外部存儲(chǔ)設(shè)備的目的。
SRAM同樣使用異步通訊,SRAM信號(hào)線的信號(hào)線如下,與控制LCD的引腳線對(duì)照來(lái)看
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-582278.html
這里復(fù)習(xí)一下FSMC的地址映射
????????圖中左側(cè)的是Cortex-M3內(nèi)核的存儲(chǔ)空間分配,右側(cè)是STM32 FSMC外設(shè)的地址映射??梢钥吹紽SMC的NOR/PSRAM/SRAM/NAND FLASH以及PC卡的地址都在External RAM地址空間內(nèi)。
????????正是因?yàn)榇嬖谶@樣的地址映射,使得訪問(wèn)FSMC控制的存儲(chǔ)器時(shí),就跟訪問(wèn)STM32的片上外設(shè)寄存器一樣(片上外設(shè)的地址映射即圖中左側(cè)的“Peripheral”區(qū)域)。
????????FSMC把整個(gè)External RAM存儲(chǔ)區(qū)域分成了4個(gè)Bank區(qū)域,并分配了地址范圍及適用的存儲(chǔ)器類(lèi)型,如NOR及SRAM存儲(chǔ)器只能使用Bank1的地址。
????????在NOR及SRAM區(qū)域,每個(gè)Bank的內(nèi)部又分成了4個(gè)小塊,每個(gè)小塊有相應(yīng)的控制引腳用于連接片選信號(hào),如FSMC_NE[4:1]信號(hào)線可用于選擇BANK1內(nèi)部的4小塊地址區(qū)域,當(dāng)STM32訪問(wèn)0x68000000-0x6BFFFFFF地址空間時(shí),會(huì)訪問(wèn)到Bank1的第3小塊區(qū)域,相應(yīng)的FSMC_NE3信號(hào)線會(huì)輸出控制信號(hào)。
????????因此當(dāng)我們板子上如果SRAM已經(jīng)使用了一個(gè)片選引腳NEx,那么NOR FLASH的片選引腳就不能是同一個(gè),不然會(huì)導(dǎo)致地址沖突。
FSMC NOR/PSRAM中的模式B時(shí)序圖
FSMC NOR/PSRAM中的模式B的寫(xiě)時(shí)序如下圖:
????????根據(jù)STM32對(duì)尋址空間的地址映射,地址0x6000 0000 ~0x9FFF FFFF是映射到外部存儲(chǔ)器的,而其中的0x6000 0000 ~0x6FFF FFFF則是分配給NOR FLASH、PSRAM這類(lèi)可直接尋址的器件。
FSMC NOR/PSRAM中的模式B的讀時(shí)序如下圖:
NADV不需要看,只有地址線和數(shù)據(jù)線復(fù)用的時(shí)候才會(huì)用到,這里我們不用。
????????當(dāng)FSMC外設(shè)被配置成正常工作,并且外部接了NOR FLASH時(shí),若向0x60000000地址寫(xiě)入數(shù)據(jù)如0xABCD,F(xiàn)SMC會(huì)自動(dòng)在各信號(hào)線上產(chǎn)生相應(yīng)的電平信號(hào),寫(xiě)入數(shù)據(jù)。FSMC會(huì)控制片選信號(hào)NE1選擇相應(yīng)的NOR 芯片,然后使用地址線A[25:0]輸出0x60000000,在NWE寫(xiě)使能信號(hào)線上發(fā)出低電平的寫(xiě)使能信號(hào),而要寫(xiě)入的數(shù)據(jù)信號(hào)0xABCD則從數(shù)據(jù)線D[15:0]輸出,然后數(shù)據(jù)就被保存到NOR FLASH中了。
用FSMC模擬8080時(shí)序
由于圖片的問(wèn)題,注意圖中右邊得到紅圈圈起來(lái)的那一半等于左邊的一整幅圖。
????????對(duì)比FSMC NOR/PSRAM中的模式B時(shí)序與ILI9341液晶控制器芯片使用的8080時(shí)序可發(fā)現(xiàn),這兩個(gè)時(shí)序是十分相似的(除了FSMC的地址線A和8080的D/CX線,可以說(shuō)是完全一樣) 。
如何使用FSMC的地址線來(lái)模擬D/CX?
????????D/CX為低電平時(shí)候表示傳輸?shù)氖敲睿唠娖奖硎緜鬏敂?shù)據(jù)。而A[25:0]一共有26根線,我們可以選擇出來(lái)一根線,并且控制這根線讓它在某個(gè)時(shí)刻,我們想發(fā)送命令的時(shí)候就表達(dá)成低電平,當(dāng)我們想發(fā)送數(shù)據(jù)的時(shí)候就控制這根地址線為高電平。
?????????對(duì)于FSMC和8080接口,前四種信號(hào)線都是完全一樣的,僅僅是FSMC的地址信號(hào)線A[25:0]與8080的數(shù)據(jù)/命令選擇線D/CX有區(qū)別。而對(duì)于D/CX線,它為高電平的時(shí)候表示數(shù)值,為低電平的時(shí)候表示命令,如果能使用FSMC的A地址線根據(jù)不同的情況產(chǎn)生對(duì)應(yīng)的電平,那么就完全可以使用FSMC來(lái)產(chǎn)生8080接口需要的時(shí)序了。
????????為了模擬出8080時(shí)序,我們可以把FSMC的A0地址線(也可以使用其它A1/A2等地址線)與ILI9341芯片8080接口的D/CX信號(hào)線連接,那么當(dāng)A0為高電平時(shí)(即D/CX為高電平),數(shù)據(jù)線D[15:0]的信號(hào)會(huì)被ILI9341理解為數(shù)值,若A0為低電平時(shí)(即D/CX為低電平),傳輸?shù)男盘?hào)則會(huì)被理解為命令。
????????由于FSMC會(huì)自動(dòng)產(chǎn)生地址信號(hào),當(dāng)使用FSMC向0x6xxx xxx1、0x6xxx xxx3、0x6xxx xxx5…這些奇數(shù)地址寫(xiě)入數(shù)據(jù)時(shí),地址最低位的值均為1,所以它會(huì)控制地址線A0(D/CX)輸出高電平,那么這時(shí)通過(guò)數(shù)據(jù)線傳輸?shù)男盘?hào)會(huì)被理解為數(shù)值;若向0x6xxx xxx0 、0x6xxx xxx2、0x6xxx xxx4…這些偶數(shù)地址寫(xiě)入數(shù)據(jù)時(shí),地址最低位的值均為0,所以它會(huì)控制地址線A0(D/CX)輸出低電平,因此這時(shí)通過(guò)數(shù)據(jù)線傳輸?shù)男盘?hào)會(huì)被理解為命令,如下表:
????????有了這個(gè)基礎(chǔ),只要配置好FSMC外設(shè),然后在代碼中利用指針變量,向不同的地址單元寫(xiě)入數(shù)據(jù),就能夠由FSMC模擬出的8080接口向ILI9341寫(xiě)入控制命令或GRAM的數(shù)據(jù)了。
????????注意:在實(shí)際控制時(shí),以上地址計(jì)算方式還不完整,還需要注意HADDR內(nèi)部地址與FSMC地址信號(hào)線的轉(zhuǎn)換。
重點(diǎn):HADDR內(nèi)部地址與FSMC地址信號(hào)線的轉(zhuǎn)換(實(shí)現(xiàn)地址對(duì)齊)
????????我們前面控制SRAM的時(shí)候,我們控制某些地址直接訪問(wèn)就可以了,不需要關(guān)心地址轉(zhuǎn)換。這是因?yàn)镾RAM本身具有掩碼(通過(guò)LB和UB來(lái)控制),所以雖然SRAM的數(shù)據(jù)寬度是16bit,但是卻可以以8位的方式訪問(wèn),也可以以16位的方式訪問(wèn)。
????????但是NOR FLASH沒(méi)有SRAM的這種機(jī)制,所以如果NOR FLASH是16bit,那就只能以16bit的方式來(lái)訪問(wèn)。比如我們的液晶屏有16根數(shù)據(jù)線,它就相對(duì)于一個(gè)16位的NOR FLASH,只能使用16位的方式訪問(wèn)。
????????而我們要注意在STM32內(nèi)部實(shí)際上有一個(gè)地址線HADDR是內(nèi)部AHB地址線。HADDR是字節(jié)地址,而液晶屏的NOR FLASH是16位,是兩個(gè)字節(jié)地址。所以訪問(wèn)的時(shí)候會(huì)有地址對(duì)齊的問(wèn)題。
????????比如:對(duì)于HADDR,訪問(wèn)第0個(gè)地址只想訪問(wèn)第0個(gè)字節(jié),訪問(wèn)第一個(gè)地址只想訪問(wèn)第1個(gè)字節(jié);但對(duì)于NOR FLASH,我們?cè)L問(wèn)了一個(gè)地址就同時(shí)訪問(wèn)了兩個(gè)字節(jié),如訪問(wèn)第1個(gè)地址,同時(shí)會(huì)訪問(wèn)第2、3字節(jié)。
????????所以我們需要對(duì)HADDR進(jìn)行移位(由STM32內(nèi)部控制,我們不需要管如何移位),會(huì)將HADDR的第1根地址線和NOR FLASH的第0根地址線連接,這樣就達(dá)到了一個(gè)移位的目的,左移1位。
????????這樣的話,假如HADDR想要訪問(wèn)1(二進(jìn)制)地址,外面就會(huì)產(chǎn)生一個(gè)10(二進(jìn)制)地址,就相對(duì)于訪問(wèn)第2、3字節(jié)了。訪問(wèn)2地址,就會(huì)訪問(wèn)第4、5字節(jié),也就是每個(gè)地址能訪問(wèn)到的字節(jié)數(shù)乘2,這樣就達(dá)到了與NOR FLASH地址對(duì)齊的目的。
詳細(xì)可參考數(shù)據(jù)手冊(cè)下圖
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-582278.html
?
到了這里,關(guān)于LCD—STM32液晶顯示(2.使用FSMC模擬8080時(shí)序)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!