如题,看原子哥的外部SRAM读写函数有个地方不明白,请教一下各位大神。问题如下:
//在指定地址(WriteAddr+Bank1_SRAM3_ADDR)开始,连续写入n个字节. //pBuffer:字节指针 //WriteAddr:要写入的地址 //n:要写入的字节数 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+Bank1_SRAM3_ADDR))开始,连续读出n个字节. //pBuffer:字节指针 //ReadAddr:要读出的起始地址 //n:要写入的字节数 void FSMC_SRAM_ReadBuffer(u8* pBuffer,u32 ReadAddr,u32 n) { for(;n!=0;n--) { *pBuffer++=*(vu8*)(Bank1_SRAM3_ADDR+ReadAddr); ReadAddr+=2; } } 这里需要注意的是:FSMC当位宽为16位的时候,HADDR右移一位同地址对其,但是ReadAddr我们这里却没有加2,而是加1,是因为我们这里用的数据为宽是8位,通过UB和LB来控制高低字节位,所以地址在这里是可以只加1的。
以上的程序不明白的是, WriteAddr+=2;ReadAddr+=2;为什么要+2,看有的说是+1不是+2,表示+1 +2都不是很明白,请教各位大神了,谢谢。
|