STM32 FSMC学习笔记
FSMC 包括4个模块:

(1)AHB接口(包括FSMC配置寄存器)
(2)NOR闪存和PSRAM控制器(驱动LCD的时候LCD就好像一个PSRAM的里面只有2个16位的存储空间,一个是DATA RAM 一个是CMD RAM)
(3)NAND闪存和PC卡控制器
(4)外部设备接口
每个模块通过片选信号控制
--------------------------------------------------------------------------------------------------
硬件电路(这里给出的是非复用连接)

可以这样接
地址线A0 接 RS
NE接 CS
NEW –WR
NOE –RD
FSMC与外设连接好以后,就等于对于使用者屏蔽了对外设备的具体操作,只要对应类型的映射地址空间写入数据,这些数据+地址就会被自动翻译,并写入外围存储设备。
对于写LCD来说,STM官方库里有一些常用写法:
#define LCD_BASE
#define LCD
void LCD_WriteReg(u8 LCD_Reg,u16 LCD_RegValue)
{
}
u16 LCD_ReadReg(u8 LCD_Reg)
{
}
当然也可以自己操作,完全在于自己。
--------------------------------------------------------------------------------------------------
1位宽:
主要是AHB到NOR/PSRAM位宽的,比如如果AHB设为32位,NOR为16位,他会分两次传输

2:设置地址
手册是这样写的:在NOR/PSRAM模式下HADDR[27:26](HADDR are internal AHB address lines that are translated to external memory)用来片选NOR/PSRAM的四个分区。A[25:0]是地址线,因为HADDR是字节地址但是存取其按字编址,所以根据位宽的不同由以下情况。
(1)当存储数据设为8位时,
(2)当存储数据设为16位时,
(存储大小 (64MB / 2) * 16 = 512MB)
注意:在16位外部存储宽度下,FSMC内部会用A[25:1]去生成A[24:0]。不论8位或16位的情况,FSMC_A[0]必需连接外部存储的A[0]。
--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
FSMC的好处就是你一旦设置好之后,WR、RD、DB0-DB15这些控制线和数据线,都是FSMC自动控制的。打个比方,当你在程序中写到:
(volatile unsigned short int*)(0x60000000)=val;
那么FSMC就会自动执行一个写的操作,其对应的主控芯片的WE、RD这些脚,就会呈现出写的时序出来(即WE=0,RD=1),数据val的值也会通过 DB0-15自动呈现出来(即FSMC-D0:FSMC-D15=val)。地址0x60000000会被呈现在数据线上(即A0-A25=0,地址线的对应最麻烦,要根据具体情况来,好好看看FSMC手册)。
(volatile unsigned short int*)(0x60020000)=val;
这个时候,A16在执行其他FSMC的同时会被拉高,因为A0-A18要呈现出地址0x60020000。0x60020000里面的Bit17=1,就会导致A16为1。
评论