这两天用stm32f103vet6的FSMC读写外部扩展RAM,遇见了几个问题,实在不知道该怎么解决,请高手指点指点。我说说我的几个疑问;
1.stm32f103vet6这个芯片是100脚的,FSMC的Bank1区的四个子分区由FSMC_NE[4:1]片选,但是引脚中的片选只有NE1,也就是PD7引脚。那么外部SRAM的片选就只能接PD7了,那么初始化FSMC结构体只能是这样:FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1,不知道说的对不对。
2.外部RAM是IS64LV51216,地址18位,数据16位。因为vet6这块芯片没有低16位地址线,所以低16位地址只能与数据线复用。那么在初始化FSMC结构体的复用模式必须使能,也就是这个ram只能用FSMC的复用模式来读写,因为其他模式无法提供正确的地址信号。那么扩展模式不使能FSMC_ExtendedMode_Disable。因为选了复用模式,就不能用扩展模式(ABCD)了,这些模式有各自独立的时序,不能混着用。不知道说的对不对。
3.我在实验过程中出现了两个现象,不知道什么原因:
(1)比如说我用FSMC在外部ram的某个地址上(假设为0x5a5a)写一个数(0x1110),然后再读取这个地址的数,串口显示出来的低三位总是1,也就是读出来0x1117,不管这个地址是多少,写的数据是多少,最后三位总是高电平,我用万用表测得ram上的地址引脚就是0x5a5a没有错,也就是说硬件连接不可能出错,我也认真检查过确实没错,不知道这是什么原因。(我考虑到了内部和外部地址应该移位,这个没问题)
(2)第二个问题:程序一:如果先在0x5a5a上写一个0x1110,然后读0x5a5a,接着再在0x5a60处写一个0xF0F0,然后再读取0x5a60,两次读出来的数分别是0x1117和0xF0F7,因为低三位总是高电平。程序二:连续写两次,再读两次。先在0x5a5a写一个0x1110,再在0x5a60处写0xF0F0,然后接着读0x5a5a和0x5a60,读出来的数分别是0x5a67和0xF0F7,也就是第一次读出来的数据是第二次写入时的地址,这个现象怎么解释。我觉得应该是时序的问题。
就这么多问题,请大家看看,看我哪里有错。补充一点:外部ram地址用两个74HC574锁存地址,锁存信号为FSMC的NADV信号,上升沿锁存地址。
|