STM32系列第15篇--靈活的靜態(tài)存儲(chǔ)控制器FSMC
掃描二維碼
隨時(shí)隨地手機(jī)看文章
FSMC特性
FSMC管理1GB空間,擁有4個(gè)Bank連接外部存儲(chǔ)器
每個(gè)Bank有獨(dú)立的片選信號(hào)
每個(gè)Bank有獨(dú)立的時(shí)序配置
同步批量傳輸訪問(wèn)最高頻率可達(dá)60MHz
fCLK= HCLK /2
靜態(tài)地址映射存儲(chǔ)器支持的存儲(chǔ)器類型
SRAM
PSRAM
NOR/ONENAND
ROM
LCD接口-支持8080和6800模式
NANDFlash和16位PCCard,NAND Flash具有硬件ECC
結(jié)構(gòu)FSMC分為四塊BANK,每塊各占256M字節(jié)空間,每塊分為四個(gè)區(qū),每個(gè)區(qū)占64M。
NOR/PSRAM 256M字節(jié)的空間需要28根地址線尋址
HADDR是內(nèi)部AHB地址總線
HADDR[25:0]來(lái)自外部存儲(chǔ)器地址FSMC[25:0]
HADDR[26:27]對(duì)4個(gè)region分別尋址
無(wú)論外接8位/16位寬度設(shè)備,F(xiàn)SMC_A[0]永遠(yuǎn)連接外部設(shè)備的地址A[0]
外接16位寬度存儲(chǔ)器:HADDR[25:1] →FSMC_A[24:0]
外接8位寬度存儲(chǔ)器:HADDR[25:0] →FSMC_A[25:0]
Bank1的四個(gè)區(qū)的地址范圍:
控制LCD源碼講解:
//LCD地址結(jié)構(gòu)體typedefstruct{vu16LCD_REG;vu16LCD_RAM;}LCD_TypeDef;//使用NOR/SRAM的Bank1.sector4,地址位HADDR[27,26]=11A10作為數(shù)據(jù)命令區(qū)分線//注意設(shè)置時(shí)STM32內(nèi)部會(huì)右移一位對(duì)其!#defineLCD_BASE((u32)(0x6C000000|0x000007FE))#defineLCD((LCD_TypeDef*)LCD_BASE)12345678910
LCD_BASE,須根據(jù)外部電路的連接來(lái)確定,如Bank1.sector4就是從地址0X6C000000開(kāi)始,而0X000007FE,則是A10的偏移量。以A10為例,7FE換成二進(jìn)制為:111 1111 1110,而16位數(shù)據(jù)時(shí),地址右移一位對(duì)齊,對(duì)應(yīng)到地址引腳,就是:A10:A0=011 1111 1111,此時(shí)A10是0,但是如果16位地址再加1(對(duì)應(yīng)到8位地址是加2,即7FE+0X02),那么:A10:A0=100 0000 0000,此時(shí)A10就是1了,即實(shí)現(xiàn)了對(duì)RS的0和1的控制。
我們將這個(gè)地址強(qiáng)制轉(zhuǎn)換為L(zhǎng)CD_TypeDef結(jié)構(gòu)體地址,那么可以得到LCD->LCD_REG的地址就是0X6C00,07FE,對(duì)應(yīng)A10的狀態(tài)為0(即RS=0),而LCD-> LCD_RAM的地址就是0X6C00,0800(結(jié)構(gòu)體地址自增),對(duì)應(yīng)A10的狀態(tài)為1(即RS=1),從而實(shí)現(xiàn)對(duì)RS的控制。
根據(jù)8080時(shí)序和FSMC寫(xiě)寄存器對(duì)比:
//8080時(shí)序?qū)懠拇嫫鱲oidLCD_WR_REG(u16data){LCD_RS_CLR;LCD_CS_CLR;DATAOUT(data);LCD_WR_CLR;LCD_WR_SET;LCD_CS_SET;}//FSMC寫(xiě)寄存器voidLCD_WR_REG(u16regval){LCD->LCD_REG=regval;}//用FSMC程序要簡(jiǎn)便很多,但是在初始化LCD時(shí)需要對(duì)FSMC進(jìn)行初始化