1.簡介
?FSMC模塊能夠與同步或異步存儲(chǔ)器和16位PC存儲(chǔ)器卡接口,它的主要作用是:
● 將AHB傳輸信號轉(zhuǎn)換到適當(dāng)?shù)耐獠吭O(shè)備協(xié)議
● 滿足訪問外部設(shè)備的時(shí)序要求
所有的外部存儲(chǔ)器共享控制器輸出的地址、數(shù)據(jù)和控制信號,每個(gè)外部設(shè)備可以通過一個(gè)唯一的片選信號加以區(qū)分。 FSMC在任一時(shí)刻只訪問一個(gè)外部設(shè)備。
FSMC具有下列主要功能:
● 具有靜態(tài)存儲(chǔ)器接口的器件包括:
? ─ 靜態(tài)隨機(jī)存儲(chǔ)器(SRAM)
? ─ 只讀存儲(chǔ)器(ROM)
? ─ NOR閃存
? ─ PSRAM(4個(gè)存儲(chǔ)器塊)
● 兩個(gè)NAND閃存塊,支持硬件ECC并可檢測多達(dá)8K字節(jié)數(shù)據(jù)
● 16位的PC卡兼容設(shè)備
● 支持對同步器件的成組(Burst)訪問模式,如NOR閃存和PSRAM
● 8或16位數(shù)據(jù)總線
FSMC管理1GB空間,擁有4個(gè)Bank連接外部存儲(chǔ)器,每個(gè)Bank有獨(dú)立的片選信號,每個(gè)Bank有獨(dú)立的時(shí)序配置,同步批量傳輸訪問最高頻率可達(dá)60MHz
支持的存儲(chǔ)器類型:
靜態(tài)地址映射存儲(chǔ)器:SRAM、PSRAM、NOR/ONENAND、ROM
LCD接口:支持8080和6800模式
NANDFlash和16位PCCard
2.外掛設(shè)備地址映射


NOR/PSRAM是”static memory map”設(shè)備: 256M字節(jié)的空間需要28根地址線尋址,HADDR表示內(nèi)部AHB地址線;
HADDR[27:26]用來對4個(gè)region尋址;
HADDR[25:0]用來對外部地址FSMC[25:0];
無論8位/16位寬度,F(xiàn)SMC_A[0]始終連接外部設(shè)備地址A[0]
當(dāng)外接設(shè)備16位數(shù)據(jù)寬度:HADDR[25:1]–>FSMC_A[24:0]
當(dāng)外接設(shè)備8位數(shù)據(jù)寬度:HADDR[25:0]–>FSMC_A[25:0]

3.LCD硬件接口

LCD屏
?分辨率:320*480;3.5寸;
?驅(qū)動(dòng)方式:8080并口時(shí)序(Intel公司),16位真彩色(RGB565);
?屏幕驅(qū)動(dòng)IC:NT35310;

4.軟件設(shè)置
?1.芯片選擇

2. 時(shí)鐘配置


3.FSMC配置
?根據(jù)LCD硬件接口可知LCD接在FSMC_Blank1的region4上。


5 代碼生成
?1.FSMC配置代碼

FSMC寄存器配置可參考STM32中文參考手冊第19章靈活靜態(tài)存儲(chǔ)器控制器(FSMC)。


2.LCD顯示圖片和顯示漢字示例
(1) 讀寫數(shù)據(jù)
根據(jù)LCD硬件接口時(shí)序8080,要想實(shí)現(xiàn)對LCD屏數(shù)據(jù)顯示則需要完成LCD寫數(shù)據(jù)和寫寄存器,LCD接在FSMC_Blank1的region4上,通過地址線FSMC_A10作為數(shù)據(jù)命令選擇線,通過FSMC地址映射關(guān)系可知:
讀寫寄存器地址:0x6c000000
讀寫數(shù)據(jù)地址:0x6c000800
寫寄存器和寫數(shù)據(jù)代碼如下:
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int u32;
#define LCD_WR_REG *((volatile u16 *)0x6c000000)
#define LCD_WR_DAT *((volatile u16 *)0x6c000800)
/*LCD寫寄存器*/
static void LcdWriteReg(u16 reg)
{
LCD_WR_REG=reg;
}
/*LCD寫數(shù)據(jù)*/
static void LcdWriteData(u16 dat)
{
LCD_WR_DAT=dat;
}
(2)設(shè)置光標(biāo)指令0X2A 和0X2B
該指令是頁地址設(shè)置指令,在從左到右,從上到下的掃描方式(默認(rèn))下面,該指令用于設(shè)置縱坐標(biāo)( x 坐標(biāo))

在默認(rèn)掃描方式時(shí),該指令用于設(shè)置 x 坐標(biāo),該指令帶有 4 個(gè)參數(shù),實(shí)際上是 2 個(gè)坐標(biāo)值: SC 和 EC,即列地址的起始值和結(jié)束值, SC 必須小于等于 EC,且 0≤SC/EC≤239。一般在設(shè)置 x 坐標(biāo)的時(shí)候,我們只需要帶 2個(gè)參數(shù)即可,也就是設(shè)置 SC 即可,因?yàn)槿绻?EC 沒有變化,我們只需要設(shè)置一次即可,從而提高速度。
0X2B 指令,該指令是頁地址設(shè)置指令,在從左到右,從上到下的掃描方式(默認(rèn))下面,該指令用于設(shè)置縱坐標(biāo)( y 坐標(biāo))。

/*設(shè)置光標(biāo)*/
static void LCD_SetCursor(u16 x,u16 y)
{
LcdWriteReg(0x2A);//設(shè)置x坐標(biāo)
LcdWriteData(x>>8);
LcdWriteData(x&0xff);
LcdWriteReg(0x2B);//設(shè)置y坐標(biāo)
LcdWriteData(y>>8);
LcdWriteData(y&0xff);
}
(3)寫入數(shù)據(jù)到GRAM指令0x2C
??該指令是寫 GRAM 指令,在發(fā)送該指令之后,我們便可以往 LCD 的 GRAM 里面寫入顏色數(shù)據(jù)了,該指令支持連續(xù)寫 (地址自動(dòng)遞增)。

/*清屏函數(shù)*/
void LCD_Clear(u16 c)
{
u32 i=0;
LCD_SetCursor(0,0);//設(shè)置光標(biāo)
LcdWriteReg(0x2c);//開始寫數(shù)據(jù)到GRAM
for(i=0;i<320*480;i++)
{
LcdWriteData(c);
}
}
(4)顯示圖片
??通過圖片取模工具Img2Lcd進(jìn)行圖片取模:

?將生成的圖片數(shù)據(jù)放到工程中:

/*lcd圖片顯示*/
void LCD_DrawBMP(u16 x,u16 y,u16 w,u16 h,const u8 *buff)
{
u16 i,j;
u16 temp;
LcdWriteReg(0x2A);//設(shè)置x坐標(biāo)
//設(shè)置x的起始坐標(biāo)
LcdWriteData(x>>8);
LcdWriteData(x&0xff);
//設(shè)置x的結(jié)束坐標(biāo)
LcdWriteData((x+w)>>8);
LcdWriteData((x+w)&0xff);
LcdWriteReg(0x2B);//設(shè)置y坐標(biāo)
//設(shè)置y的起始坐標(biāo)
LcdWriteData(y>>8);
LcdWriteData(y&0xff);
//設(shè)置y的結(jié)束坐標(biāo)
LcdWriteData((y+h)>>8);
LcdWriteData((y+h)&0xff);
LcdWriteReg(0x2c);//開始寫數(shù)據(jù)到GRAM
for(i=0;i>8);
LcdWriteData(0);
//設(shè)置x的結(jié)束坐標(biāo)
LcdWriteData(320>>8);
LcdWriteData(320&0xff);
LcdWriteReg(0x2B);//設(shè)置y坐標(biāo)
//設(shè)置y的起始坐標(biāo)
LcdWriteData(0>>8);
LcdWriteData(0);
//設(shè)置y的結(jié)束坐標(biāo)
LcdWriteData(480>>8);
LcdWriteData(480&0xff);
}
;i++)>
(5)漢字顯示

??通過PCtoLCD2002進(jìn)行漢字取模,取模方式:高位在前,逐行式。
/*
漢字取模方式:逐列式,高位在前,高度需保證為8個(gè)倍數(shù)
*/
void LCD_Display_Font(u16 x,u16 y,u8 size,u8 *font,u16 c)
{
u16 i,j;
u8 temp;
u16 x0=x;
for(i=0;i*size>
6 示例效果


-
lcd
+關(guān)注
關(guān)注
34文章
4503瀏覽量
170690 -
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7636瀏覽量
166407 -
STM32
+關(guān)注
關(guān)注
2289文章
11012瀏覽量
362367 -
FSMC
+關(guān)注
關(guān)注
0文章
55瀏覽量
38530
發(fā)布評論請先 登錄
淺析STM32 FSMC操作LCD的過程

存儲(chǔ)控制器FSMC與觸摸屏介紹

【技術(shù)精選】嵌入式STM32原創(chuàng)征文活動(dòng)精選文章
STM32F2靈活的靜態(tài)存儲(chǔ)控制器FSMC
STM32FSMC機(jī)制FlaSh存儲(chǔ)器擴(kuò)展

F2產(chǎn)品技術(shù)培訓(xùn)_13.外部靜態(tài)存儲(chǔ)器控制器(FSMC)
STM32系列微控制器新型存儲(chǔ)器擴(kuò)展技術(shù)--FSMC有什么優(yōu)點(diǎn)?

STM32F10xxx FSMC外圍設(shè)備驅(qū)動(dòng)外部存儲(chǔ)器的數(shù)據(jù)和使用手冊免費(fèi)下載

STM32學(xué)習(xí)之STM32cubeMX軟件安裝與使用(附STM32cubeMX5.2.1下載地址)

評論