交互式界面被越來(lái)越多地集成于多種應(yīng)用中,例如醫(yī)療設(shè)備、過(guò)程控制、手機(jī)和其它手持設(shè)備。這些界面主要基于使用彩色TFT-LCD的圖形HMI(人機(jī)界面)。隨著技術(shù)的變革,OLED技術(shù)的顯示方案也得到長(zhǎng)足的發(fā)展與廣泛的應(yīng)用。
OLED技術(shù)與其它技術(shù)相比,具有以下優(yōu)點(diǎn):
(1)功耗低
(2)響應(yīng)速度快
(3)較寬的視角
(4)能實(shí)現(xiàn)高分辨率顯示
(5)寬溫度特性
(6)OLED能夠?qū)崿F(xiàn)軟屏
(7)OLED成品的質(zhì)量比較輕
電子產(chǎn)品領(lǐng)域中,OLED應(yīng)用最為廣泛的就是智能手機(jī),其次是筆記本、顯示屏、電視、平板、數(shù)碼相機(jī)等領(lǐng)域,嵌入式應(yīng)用領(lǐng)域中,OLED有很大一部分用作工業(yè)儀表、GPS手環(huán)、可視電話等小尺寸的顯示屏。
本文介紹了如何使用 MM32F3270的FSMC(靈活的靜態(tài)存儲(chǔ)控制器)來(lái)驅(qū)動(dòng)6800接口的OLED。
1、MM32F3270 FSMC的簡(jiǎn)要介紹
FSMC是Flexible static memory controller(靈活的靜態(tài)存儲(chǔ)控制器)的簡(jiǎn)稱,支持并行接口的SRAM、PSRAM 、NOR FLASH 、TFT-LCD和OLED。
圖1 FSMC的功能框圖
2、FSMC 的功能特性
MM32的FSMC具有以下特性:
1) 可配置的靜態(tài)存儲(chǔ)器接口包括:
a) SRAM
b) PSRAM
c) NOR FLASH
2) 支持 Intel 8080 協(xié)議
3) 支持 Moto 6800 協(xié)議
4) 8位,16位,32位可配置的數(shù)據(jù)總線寬度,支持非復(fù)用與復(fù)用模式
5) BANK1 分為 4 塊子 BANK,每塊 64Mbit 空間
6) 時(shí)序可編程以滿足不同的需求
a) 等待周期可編程
b) 總線恢復(fù)周期可編程
c) 寫,讀控制周期可編程
7) 可將32位的AHB訪問(wèn)請(qǐng)求,轉(zhuǎn)換為對(duì)外接設(shè)備連續(xù)的8位,16位的訪問(wèn)
MM32F3270的FSMC提供了對(duì)多個(gè)并行外設(shè)的控制與連接,具體配置取決于存儲(chǔ)器類型,主要涉及如下寄存器設(shè)置。
(1)SMCTLR 的 sm_data_width[2:0],定義了外部存儲(chǔ)器的數(shù)據(jù)寬度,需根據(jù)實(shí)際數(shù)據(jù)寬度配置為8位,16位,32 位,此時(shí)需要保障實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)囊恢滦浴?/p>
(2)SMCTLR的sm_data_width_set0/1/2 來(lái)設(shè)置存儲(chǔ)器的數(shù)據(jù)寬度,有三種情況:AHB 操作的數(shù)據(jù)寬度與存儲(chǔ)器數(shù)據(jù)寬度相同,無(wú)數(shù)據(jù)傳輸一致性的問(wèn)題;AHB 操作的數(shù)據(jù)寬度大于存儲(chǔ)器的數(shù)據(jù)寬度時(shí),AHB 接口將對(duì) hwdata[15:0],hwdatabit[31:16]進(jìn)行連續(xù)寫操作,以適應(yīng)外部設(shè)備的數(shù)據(jù)寬度,讀操作時(shí),hrdata[31:0]的低 16 位是有效數(shù)據(jù);AHB 操作的數(shù)據(jù)寬度小于存儲(chǔ)器的數(shù)據(jù)寬度時(shí),若存儲(chǔ)設(shè)備沒(méi)有高低字節(jié)片選,不允許進(jìn)行寫操作,若存儲(chǔ)設(shè)備有高低字節(jié)選擇,通過(guò) BL 控制訪問(wèn)對(duì)應(yīng)字節(jié)。可以進(jìn)行讀操作,但有效數(shù)據(jù)需要用戶自己處理。
(3)SYSCFG_CFGR1[30:29]:mode_sel來(lái)配置不同模式,默認(rèn)值為 01
00:兼容 NOR FLASH 接口
01:兼容 8080 協(xié)議接口
10:兼容 6800 協(xié)議接口
(4)SMSKR0[10:8]用來(lái)選擇三組不同的寄存器 register set0/set1/set2,以配置不同的時(shí)序
FMSC支持的外部接口
表1 FSMC控制器外部信號(hào)
3、6800和8080總線的區(qū)別
OLED的可支持串行接口(SPI,I2C)和并行接口(主要又可以分為8080模式和6800模式);8080模式和6800模式都需數(shù)據(jù)總線和地址總線,數(shù)據(jù)位傳輸可支持8位,9位,16位,18位,24位,32位,對(duì)于數(shù)據(jù)的尋址,都是一樣的。8080模式和6800模式的區(qū)別主要是總線的控制方式上。
以SSD1306 的OLED 驅(qū)動(dòng)芯片為例,其接口與MCU連接所需要的信號(hào)線為:
I(intel)8080模式
I8080模式管腳的控制腳有5個(gè)及Data信號(hào):
M(Motorola)6800模式
通過(guò)上面分析,其實(shí)不難發(fā)現(xiàn),它們主要區(qū)別就是:
● 8080通過(guò)“讀使能(RD)”和“寫使能(WR)”進(jìn)行讀寫操作
● 6800通過(guò)“總使能(E)”和“讀寫選擇(W/R)”進(jìn)行讀寫操作
4、FSMC 控制OLED的硬件設(shè)計(jì)
FSMC是如何控制OLED的呢?
OLED控制使用:DC信號(hào)可以使用地址線(如A0~A18中的一根)、數(shù)據(jù)線(如D0~D7)、使能信號(hào)(E)、讀寫信號(hào)(RW)、片選信號(hào)(CS)。OLED通過(guò)DC信號(hào)來(lái)決定傳送的數(shù)據(jù)是數(shù)據(jù)還是命令,本質(zhì)上可以理解為一個(gè)地址信號(hào),比如MB039是把DC接在A18上面,那么當(dāng)FSMC控制器寫地址0的時(shí)候,會(huì)使得A18 變?yōu)?,對(duì)OLED來(lái)說(shuō),就是寫命令。而FSMC寫地址1的時(shí)候,A0 將會(huì)變?yōu)?,對(duì)OLED來(lái)說(shuō),就是寫數(shù)據(jù)。這樣,就把數(shù)據(jù)和命令區(qū)分開(kāi)了,其實(shí)就是對(duì)應(yīng) OLED 操作兩個(gè)地址。當(dāng)然DC也可以接在其他地址線上,MB039是把DC連接在PD13上面的。MM32F3270的FSMC支持8/16/32位數(shù)據(jù)寬度,我們這里用到的OLED是8位寬度的,在設(shè)置的時(shí)候需要選擇8位寬。
FSMC 控制OLED 的Demo應(yīng)用中,使用的開(kāi)發(fā)板為MB-039,它支持外接使用SSD1306為驅(qū)動(dòng)器的128 x 24 點(diǎn)陣OLED。
圖2 OLED模塊實(shí)物圖
下圖是OLED模塊接口原理圖:
圖3 OLED接口原理圖
各個(gè)信號(hào)作用對(duì)應(yīng)如下:
表2 OLED信號(hào)對(duì)應(yīng)的電源、復(fù)位與MCU接口的引腳說(shuō)明
MB039可通過(guò)轉(zhuǎn)接板接到OLED模塊。
5、FSMC 控制OLED的軟件設(shè)計(jì)
FMSC Demo應(yīng)用中,使在庫(kù)函數(shù)樣例工程中使用選用:
MM32F327x_SamplesLibSamplesFSMCFSMC_Ex6800OLED 中的 FSMC_Ex6800OLED.uvprojx
樣例展示如何初始化OLED接口與實(shí)現(xiàn)OLED并行驅(qū)動(dòng)顯示。
軟件分為兩個(gè)部分:
(1)FSMC接口GPIO與FSMC接口參數(shù)初始化
(2)OLED顯示初始化與OLED顯示
FSMC接口GPIO與FSMC接口參數(shù)初始化
void FSMC_Ex6800OLED_Demo(void) { u8 t = 0; u8* p = (u8*)0x60080000; OLED_nRST_Pin_Config(); OLED_GPIO_Init(); FSMC_Init_6800(); OLED_nRST_Setting(); OLED_Init(); //其他用戶代碼 }
① 在OLED_GPIO_Init ()中實(shí)現(xiàn)OLED對(duì)應(yīng)IO初始化
包括OLED對(duì)應(yīng)nRST引腳,背光控制引腳,F(xiàn)SMC相關(guān)的片選,讀寫,E信號(hào),數(shù)據(jù)/命令,數(shù)據(jù)D0~D7引腳的初始化。
② 在FSMC_Init_6800 ()中實(shí)現(xiàn)FSMC功能配置初始化
A. 寫操作周期
B. 單個(gè)bit數(shù)據(jù)寫入保持時(shí)間
C. 寫操作時(shí),地址線的建立時(shí)間
D. 讀操作周期長(zhǎng)度設(shè)置
E. 存儲(chǔ)器數(shù)據(jù)總線位寬
F. 模式選擇:6800模式
G. 外接設(shè)備的內(nèi)存大小
void FSMC_Init_6800(void) { FSMC_InitTypeDef FSMC_InitStructure; FSMC_NORSRAM_Bank_InitTypeDef FSMC_BankInitStructure; FSMC_NORSRAM_BankStructInit( FSMC_BankInitStructure); FSMC_NORSRAMStructInit( FSMC_InitStructure); RCC_AHB3PeriphClockCmd(RCC_AHB3ENR_FSMC, ENABLE); FSMC_BankInitStructure.FSMC_SMReadPipe = 0; FSMC_BankInitStructure.FSMC_ReadyMode = 0; FSMC_BankInitStructure.FSMC_WritePeriod = 7; FSMC_BankInitStructure.FSMC_WriteHoldTime = 0; FSMC_BankInitStructure.FSMC_AddrSetTime = 1; FSMC_BankInitStructure.FSMC_ReadPeriod = 9; FSMC_BankInitStructure.FSMC_DataWidth = FSMC_DataWidth_16bits; FSMC_NORSRAM_Bank_Init( FSMC_BankInitStructure, FSMC_NORSRAM_BANK0); FSMC_InitStructure.FSMC_Mode = FSMC_Mode_6800; FSMC_InitStructure.FSMC_TimingRegSelect = FSMC_TimingRegSelect_0; FSMC_InitStructure.FSMC_MemSize = FSMC_MemSize_64MB; FSMC_InitStructure.FSMC_MemType = FSMC_MemType_NorSRAM; FSMC_InitStructure.FSMC_AddrDataMode = FSMC_AddrDataMUX; FSMC_NORSRAMInit( FSMC_InitStructure); }
OLED顯示初始化
Bank0地址為0x60000000,0x80000=(0x01 << 19)則是地址線A18的偏移量。首先完成寫OLED_WR_REG和OLED_WR_DATA驅(qū)動(dòng):
void OLED_WR_DATA(u16 data) { *(vu16*)0x60000000 = data; } void OLED_WR_REG(u16 regval) { *(vu16*)(0x60000000 | (0x01 << 19)) = regval; } void OLED_WR_Byte(u8 dat, u8 cmd) { if(cmd) { OLED_WR_REG(dat); } else { OLED_WR_DATA(dat); } }
讀DATA和REG是一樣的操作,不同的是從相應(yīng)地址讀取數(shù)據(jù)。
通過(guò)OLED_Refresh_Gram()函數(shù),可以實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)刷新。
void OLED_Refresh_Gram(void) { u8 i, n; for(i = 0; i < 8; i++) { OLED_WR_Byte (0xb0 + i, OLED_CMD); // Set page address (0~7) OLED_WR_Byte (0x00, OLED_CMD); // Set display location - column low address OLED_WR_Byte (0x10, OLED_CMD); // Set display location - column height address for(n = 0; n < 128; n++) { OLED_WR_Byte(OLED_GRAM[n][i], OLED_DATA); } } }
結(jié)合OLED_Fill和OLED_ShowChar函數(shù)可以實(shí)現(xiàn)OLED的顯示填充與字符輸出。
通過(guò)演示,觀察到在OLED上顯示出了MindMotion 的字符與年月日等打印信息。
來(lái)源:靈動(dòng)MM32MCU
審核編輯:湯梓紅
-
控制器
+關(guān)注
關(guān)注
112文章
16416瀏覽量
178751 -
OLED
+關(guān)注
關(guān)注
119文章
6213瀏覽量
224475 -
人機(jī)界面
+關(guān)注
關(guān)注
5文章
529瀏覽量
44173 -
FSMC
+關(guān)注
關(guān)注
0文章
55瀏覽量
38171
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論