在战舰stm32最新开发例程里面看到的程序 有几个疑问想请教一下原子哥,部分代码如下:
void STMFLASH_Write(u32 WriteAddr,u16 *pBuffer,u16 NumToWrite)
{
u32 secpos; //扇区地址
u16 secoff; //扇区内偏移地址(16位字计算)
u16 secremain; //扇区内剩余地址(16位字计算)
u16 i;
u32 offaddr; //去掉0X08000000后的地址
if(WriteAddr<STM32_FLASH_BASE||(WriteAddr>=(STM32_FLASH_BASE+1024*STM32_FLASH_SIZE)))return;//非法地址
STMFLASH_Unlock(); //解锁
offaddr=WriteAddr-STM32_FLASH_BASE; //实际偏移地址.
secpos=offaddr/STM_SECTOR_SIZE; //扇区地址 0~127 for STM32F103RBT6
secoff=(offaddr%STM_SECTOR_SIZE)/2; //在扇区内的偏移(2个字节为基本单位.)
secremain=STM_SECTOR_SIZE/2-secoff; //扇区剩余空间大小
if(NumToWrite<=secremain)secremain=NumToWrite;//不大于该扇区范围
while(1)
{ .........
}
问题1:我在程序的target里面看到的芯片是 STM32F103ZE,但是在上面secops后面怎么注释是“扇区地址 0~127 for STM32F103RBT6”这个芯片,让我很迷惑?
问题2:STM32F103xC STM32F103xD STM32F103xE这几款芯片的扇区大小都是一样的吗?datasheet上找不到这样的信息,还有扇区里面的存储是按字还是半字存储的,是否都这几款芯片都一样?
问题3: secoff=(offaddr%STM_SECTOR_SIZE)/2; 这里面的STM_SECTOR_SIZE已经定义为2048了,这么这个里面还要再除以2呢?而secpos=offaddr/STM_SECTOR_SIZE; 却没有?
看了好几天了,还是很迷惑啊,希望大侠帮忙解答一下!非常感谢
|