基于FSMC總線的嵌入式系統多顯示終端驅動設計
嵌入式系統均需配備顯示設備以指示程序運行狀態(tài)和輸出控制結果。薄膜晶體管液晶顯示器(TFT-LCD)因為功耗低、輻射小、顏色鮮艷、顯示內容豐富等優(yōu)點而成為嵌入式系統的主流,但是其控制復雜,需要移植廠家提供的底層驅動程序[
為提高數據傳輸速度,降低軟硬件設計難度,并行接口是數碼管、液晶顯示器與微控制器(MCU)連接的首選。但并口需要占用大量I/O口資源,以6位數碼管為例,共有6個位選信號和8個段選信號,TFT-LCD顯示模塊則有6個控制信號和16位數據線。設計系統時,為了編程方便,一般希望位選信號、段選信號、LCD數據線分別占用連續(xù)的16位端口,而這些I/O引腳又離散地分布于芯片的四周,上述技術需求給微控制器引腳資源分配和PCB布線帶來極大的挑戰(zhàn),同時降低了實驗裝置的可靠性,而破解這一難題的方法就是將二者均掛接在FSMC總線上,同時進行信號線復用。
2 FSMC總線
靈活靜態(tài)存儲控制器(Flexible Static Memory Controller, FSMC)能夠連接同步、異步存儲器和16位PC存儲卡,支持SRAM、NAND Flash、NOR Flash和PSRAM等類型存儲器。FSMC連接的所有外部存儲器共享地址、數據和控制信號,但有各自的片選信號,所以FSMC一次只能訪問一個外部器件[
如
圖1 FSMC存儲區(qū)域劃分
Fig.1 Division of FSMC storage area
如
Bank1所選區(qū) | 片選信號 | 地址范圍 | HADDR | |
---|---|---|---|---|
[27:26] | [25:0] | |||
第1區(qū) | FSMC_NE1 | 0X6000 0000-0X63FF FFFF | 00 | FSMC_A[25:0] |
第2區(qū) | FSMC_NE2 | 0X6400 0000-0X67FF FFFF | 01 | |
第3區(qū) | FSMC_NE3 | 0X6800 0000-0X6BFF FFFF | 10 | |
第4區(qū) | FSMC_NE4 | 0X6C00 0000-0X6FFF FFFF | 11 |
在設計或分析系統時需要特別注意HADDR[25:0]的對應關系。
當Bank1連接的是8位寬度存儲器時,總線和外設均采用字節(jié)編址,二者一一對應,即:HADDR[25:0]→FSMC_A[25:0]。
當Bank1連接的是16位寬度存儲器時,總線字節(jié)編址,存儲器雙字節(jié)尋址,此時總線26地址中最低位HADDR[0]用來表示16位數據的高位或低位,高25位HADDR[25:1]對應16位寬的存儲器單元地址,即:HADDR[25:1]→FSMC_A[24:0],相當于總線地址右移了一位[
3 系統硬件設計
作者設計的嵌入式系統實驗裝置結構框圖如
圖2 實驗裝置FSMC連接結構框圖
Fig.2 FSMC connection structure block diagram of experimental device
3.1 FSMC與TFT-LCD連接
在STM32內部,FSMC起到橋梁作用,其一端通過內部高速總線AHB連接到Cortex內核,另一端則是面向擴展存儲器的外部總線,既能夠進行信號類型的轉換,又能夠進行信號寬度和時序的調整,提供多種讀寫模式,使之對內核而言沒有區(qū)別[
圖3 FSMC模式A讀寫時序
Fig.3 Read and write timing of FSMC mode A
TFT-LCD顯示模塊信號線包括:數據線D[15:0],寄存器/存儲器選擇RS,讀使能RD,寫使能WR,片選CS,復位RST。通常使用標準的16位8080并口與微控制器連接,其讀寫時序如
圖4 8080接口讀寫時序
Fig.4 Read and write timing of 8080 interface
對比
3.2 FSMC與數碼管連接
如
上述設計實現了數碼管和TFT-LCD數據線和控制線的時分復用,減少了微控制器GPIO需求,節(jié)約了CPU資源,降低了PCB布線難度,提升了系統可靠性。
4 系統軟件設計
4.1 FSMC初始化
系統底層軟件設計的任務是完成顯示設備的讀寫,因為顯示設備均掛接在FSMC總線上,所以要實現顯示設備數據訪問,首先就需要FSMC初始化。
4.1.1 FSMC讀寫時序
FSMC有多種時序模型用于NOR Flash/PSRAM/SRAM的訪問,對TFT-LCD來說,讀取操作比較慢,寫入操作比較快,使用模式A的讀寫分離時序控制比較方便,可以使讀寫操作均獲得較高性能表現。數碼管控制只涉及寫,且沒有速度要求,任何模式均可以滿足要求,為了和LCD保持一致,也采用模式A進行控制。
訪問NOR Flash/PSRAM/SRAM的模式A的讀取時序如
4.1.2 FSMC初始化
FSMC工作模式靈活多變,控制寄存器眾多,直接操作寄存器很難完成,一般采用基于庫函數的開發(fā)方式,而庫函數又分為標準庫和硬件抽象層(Hardware Abstraction Layer,HAL)庫。借助STM32推出的圖形化配置軟件STM32CubeMX的HAL庫開發(fā),只需要輸入幾個關鍵參數,即可自動完成FSMC接口初始化工作。自動化程度高,是未來嵌入式開發(fā)的技術方向。
(1) 數碼管FSMC初始化設置
在STM32CubeMX軟件中,打開
圖5 數碼管FSMC初始化界面
Fig.5 FSMC initialization interface of digital tube
(2) LCD的FSMC初始化設置
如
圖6 LCD的FSMC初始化界面
Fig.6 FSMC initialization interface of LCD
完成上述配置后,STM32CubeMX會自動將FSMC總線用到的GPIO引腳配置為FSMC復用推挽模式,無須上拉或下拉,并在FSMC初始化程序中完成調用,大大減輕了用戶編程工作量。
4.2 數碼管顯示程序設計
STM32CubeMX完成FSMC初始化后,生成Keil MDK工程,在工程的主函數中會自動調用初始化函數,此時就可以直接訪問數碼管或LCD。6位共陽數碼管采用PNP三極管S8550驅動,所以位選碼是低電平有效,段選碼也是低電平相應筆劃點亮。假設我們需要將DS1、DS3、DS5三個數碼管上面均顯示的數字“1”,則應送出的顯示碼如
名稱 | / | / | DS6 | DS5 | DS4 | DS3 | DS2 | DS1 | dp | g | f | e | d | c | b | a |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
FSMC | D15 | D14 | D13 | D12 | D11 | D10 | D9 | D8 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
數值 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 |
HEX | E | A | F | 9 |
數據管是掛接在FSMC總線的Bank1.Sector3上的,由
4.3 LCD顯示程序設計
相比于數碼管顯示控制,LCD顯示程序則要復雜得多,分為底層驅動、基礎顯示和高層應用3部分?;A顯示程序和高層應用程序一般由顯示屏廠家直接提供,且在移植了底層驅動程序之后,一般無需任何更改,就可直接使用,所以本文重點討論的是基于FSMC的底層驅動程序的實現。
對TFT-LCD寄存器和存儲器一體化控制簡單、便捷的方法是定義一個LCD數據訪問結構體,包含寄存器和存儲器2個16位無符號型成員。并確定該結構體的基地址為0x6C00007E,其中HADDR[27:?26]=11,表明選擇的是Bank1.Sector4,即片選信號FSMC_NE4有效。
結構體第一個成員LCD_REG地址和LCD結構體的基地址相同,即:0x6C00007E,第二個成員LCD_RAM地址為基地址加2,即:0x6C000080。如果只觀察HADDR低8位,即LCD->LCD_REG的HADDR[7:?0]=0111 1110,LCD->LCD_RAM?的?HADDR?[7:?0]?=1000 0000,由于FSMC外接16位存儲器時內外地址對應關系為HADDR[25:1]→FSMC_A[24:0],相當于右移1位。由此可知LCD->LCD_REG的FSMC_A[6:?0]=011 1111,FSMC_A6(RS)=0,讀寫LCD寄存器;LCD->LCD_RAM的FSMC_A[6:?0]=100 0000,FSMC_A6(RS)=1,讀寫LCD存儲器。在FSMC配置過程中選擇不同的地址線連接LCD的RS信號,其基地址的確定亦可舉一反三。
有了上述定義并確定好基地址之后,通過選擇結構體的不同成員,即可實現對不同存儲對象的訪問,編程簡潔、高效、直觀。結合LCD驅動芯片ILI9341[
由于技術發(fā)展歷史原因,一般LCD控制程序是用標準庫編寫的,所以還需將標準庫程序向HAL庫程序移植,一般步驟為:在STM32CubeMX中配置并自動生成FSMC初始化代碼,含LCD和數碼管兩部分;定義LCD結構體、確定基地址,編寫LCD底層驅動程序;將原LCD初始化程序中的FSMC初始化和復用引腳配置代碼刪除,其余部分保留;移植基礎顯示和高層應用代碼,經過上述步驟即可完成LCD顯示代碼移植。
5 系統運行測試
為檢驗電路功能和觀察運行效果,依據系統設計成果,完成樣品生產、組裝和測試工作。
第一步:數碼管顯示測試。編寫數碼管動態(tài)顯示時間程序,在6位數碼管上顯示時、分、秒數值,各占兩位數碼管,且在小時和分鐘的末尾顯示一個小數點。
第二步:LCD顯示測試。在完成顯示程序移植之后,調用顯示函數分別進行字符、字符串、整型、浮點數等文字信息顯示測試;調用圖形處理函數進行畫點、畫線、畫圓、矩形、三角形、指定區(qū)域填充等圖形顯示測試;制作漢字字庫并存于字庫文件當中,調用中文顯示函數進行多種字號漢字顯示測試。
第三步:綜合測試。設計了一個綜合實例,系統主程序是一個電子萬年歷,實時采集現場溫濕度信息,合并實驗裝置設計信息,所有信息均顯示于TFT-LCD顯示屏上,同時將當前時間高亮顯示于數碼管,便于遠距離觀看,測試結果如
圖7 實驗裝置綜合測試圖
Fig.7 Comprehensive test diagram of experimental device
第四步:對比測試。分別使用FSMC總線、GPIO并口、SPI串口連接數碼管和TFT-LCD雙顯示設備,運行測試程序,使用STM32定時器記錄LCD刷整屏時間,測試條件和測試結果如
驅動接口 | TFT-LCD顯示模塊 | 微控制器及主頻 | I/O引腳數 | 刷屏時間/ms |
---|---|---|---|---|
FSMC | 70.82 mm (2.8 in) 240×320 ILI9341 | STM32F407ZGT6 168 MHz | 21 (20+01) | 2.9 |
并口 | 70.82 mm (2.8 in) 240×320 ILI9341 | STM32F407ZGT6 168 MHz | 34 (20+14) | 53.9 |
SPI | 60.96 mm (2.4 in) 240×320 ILI9341 | STM32F103ZET6 72 MHz | 19 (05+14) | 1 497.2 |
測試結果表明,采用FSMC總線同時連接數碼管和TFT-LCD顯示屏各項顯示功能均很好完成,刷新速度快,畫面清晰流暢,系統穩(wěn)定可靠,項目設計達到了預期目標。
6 結論
本文設計了一款嵌入式系統多顯示終端實驗裝置,將數碼顯示器和TFT-LCD均掛接在STM32微控制器的高速FSMC總線上,實現數據信號和控制信號時分復用。LCD的8080控制時序和數碼顯示器地址鎖存信號均由硬件自動產生,FSMC初始化亦可通過STM32CubeMX圖形化配置工具輕松完成,軟件設計工作量顯著減少。相比于微控制器直接并口控制,減少了38.2%的GPIO引腳資源占有率,LCD刷屏速度提高了17.6倍。系統設計方案具有較高的數據訪問性能,降低了軟硬設計難度,提高了系統可靠性。
- 喜報!《中國博物館》入選CSSCI擴展版來源期刊(最新CSSCI南大核心期刊目錄2025-2026版)!新入選!
- 2025年中科院分區(qū)表已公布!Scientific Reports降至三區(qū)
- 2023JCR影響因子正式公布!
- 國內核心期刊分級情況概覽及說明!本篇適用人群:需要發(fā)南核、北核、CSCD、科核、AMI、SCD、RCCSE期刊的學者
- 我用了一個很復雜的圖,幫你們解釋下“23版最新北大核心目錄有效期問題”。
- CSSCI官方早就公布了最新南核目錄,有心的人已經拿到并且投入使用!附南核目錄新增期刊!
- 北大核心期刊目錄換屆,我們應該熟知的10個知識點。
- 注意,最新期刊論文格式標準已發(fā)布,論文寫作規(guī)則發(fā)生重大變化!文字版GB/T 7713.2—2022 學術論文編寫規(guī)則
- 盤點那些評職稱超管用的資源,1,3和5已經“絕種”了
- 職稱話題| 為什么黨校更認可省市級黨報?是否有什么說據?還有哪些機構認可黨報?