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