回复【33楼】Tardis:
---------------------------------
很简单,就是A0就是0,你得把0这个数左移一位当作FSMC地址,所以也就0了,A1是1,左移一位就是2,减去1作为地址,二进制是1,也就是0x00000001.
A10二进制是10000000000,也就是0x400,减去1,也就是01111111111,也就是0x3FF,然后STM32是右移一位操作的,所以写程序的时候,你得把地址预先左移一位,0x3FF左移以为也就是二进制011111111110,也就是0x7FE,同理A16就是1FFFE了
对于这个我有一个疑问。既然STM32是右移一位操作的,那么0111,1111,1110=7FE和0111,1111,1111=7FF这两个数,右移之后的结果都是011,1111,1111.那么A10的偏移地址为什么是7FE而不是7FF呢。
0X7FE=0111,1111,1110右移一位之后 是011,1111,1111
0X7FF=0111,1111,1111右移一位之后也是011,1111,1111.
对应到引脚上都是FSMC_A[24:0]=011,1111,1111.此时A10=RS=0
然后如果地址加2
0X7FE+2=1000,0000,0000右移一位之后是100,0000,0000
0X7FF+2=1000,0000,0001右移一位之后是100,0000,0000
对应到引脚上都是FSMC_A[24:0]=100,0000,0000此时A10=RS=1
这么分析的话,两个都是满足要求的,但是,问了原子个之后,他说最低位不能给1,给1会出错误,具体因为什么,他也不知道。 |