板子上的1M字节(512K储存单元+16位宽,发开指南这么写的)
我的理解是
地址
0000000000000000000 (19个) 对应储存单元0 16位
0000000000000000001 (19个) 对应储存单元1 16位
.
.
.
问题
怎么进行字节控制?
教程的例子(库函数)
void FSMC_SRAM_WriteBuffer(u8* pBuffer,u32 WriteAddr,u32 n)
{
for(;n!=0;n--)
{
*(vu8*)(Bank1_SRAM3_ADDR+WriteAddr)=*pBuffer;
WriteAddr+=2;//这里需要加2,是因为STM32的FSMC地址右移一位对其.加2相当于加1.
pBuffer++;
}
}
假设WriteAddr=0
第一次往0000000000000000000 写一个字节
第二次往0000000000000000001 写一个字节
那岂不是 16位的空间 只放了一个字节??
还有那个UB LB信号线控制高低字节在哪里体现,FSMC怎么知道什么时候UB/LB为0 什么时候为1
谢谢了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
有没大神搞不懂 很明显例程就是往一个地址写一个数据 那么就是16位写一个字节 如果要写2个字节 那么同一地址必须写2次 分别UB LB有效
void FSMC_SRAM_WriteBuffer(u16* pBuffer,u32 WriteAddr,u32 n)
{
for(;n!=0;n--)
{
*(vu16*)(Bank1_SRAM3_ADDR+WriteAddr)=*pBuffer;
WriteAddr+=2;
pBuffer++;
}
}
你这个是对的 FSMC里面有介绍 在外部存储器是16 位的时候 HADDR[0] 是丢的掉的 也就是说STM32在发送这两个地址00000000 00000001 HADDR[25:1]是一样的 这个时候LB UB就会介入操作 推而广之 也就是说只有当2的一次方以上的位数变化 HADDR[25:1]才会变化
存在SRAM的地址才会变化
所以说发送16位的数据 +2是对的
一周热门 更多>