SRAM的一些问题不懂求解答

2019-07-21 02:04发布

板子上的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


谢谢了




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
不找借口
1楼-- · 2019-07-21 19:34
回复【7楼】正点原子:
---------------------------------
有没大神搞不懂 很明显例程就是往一个地址写一个数据  那么就是16位写一个字节      如果要写2个字节 那么同一地址必须写2次 分别UB LB有效
不找借口
2楼-- · 2019-07-21 23:35
 精彩回答 2  元偷偷看……
Fliger
3楼-- · 2019-07-22 05:28
 精彩回答 2  元偷偷看……
Fliger
4楼-- · 2019-07-22 09:42
刚刚又搞懂了  改成这样就可以一次写入一个u16型数据了, 这里面的n代表的是数据个数,即如果只写一个FFFF的话,n=1
void FSMC_SRAM_WriteBuffer(u16* pBuffer,u32 WriteAddr,u32 n)
{
for(;n!=0;n--)  
{     
*(vu16*)(Bank1_SRAM3_ADDR+WriteAddr)=*pBuffer;   
WriteAddr+=2;
pBuffer++;
}   
}
不负好时光
5楼-- · 2019-07-22 15:38
Fliger 发表于 2014-6-26 15:15
刚刚又搞懂了  改成这样就可以一次写入一个u16型数据了, 这里面的n代表的是数据个数,即如 ...

你这个是对的  FSMC里面有介绍 在外部存储器是16 位的时候   HADDR[0]  是丢的掉的  也就是说STM32在发送这两个地址00000000  00000001  HADDR[25:1]是一样的  这个时候LB  UB就会介入操作  推而广之  也就是说只有当2的一次方以上的位数变化   HADDR[25:1]才会变化
存在SRAM的地址才会变化
所以说发送16位的数据  +2是对的  

一周热门 更多>