新手入门
- 积分
- 4
- 金钱
- 4
- 注册时间
- 2020-5-6
- 在线时间
- 2 小时
|
本帖最后由 唯心主义roc 于 2020-5-9 09:46 编辑
更正一下,代码没bug,是我传参不对。
u16 NumToWrite,传入半字数u16,我传的是字节数u8,所以传入时要写为
sizeof(传入数据)/sizeof(u16)

学习Mini板Flash模拟EEPROM实验时,发现代码有bug,会影响存入的数据。
此函数,擦除扇区写入和直接写入两种情况,写入数据的大小一个除2,一个没有。应该都除2
void STMFLASH_Write(u32 WriteAddr,u16 *pBuffer,u16 NumToWrite) if(i<secremain)//需要擦除
{
FLASH_ErasePage(secpos*STM_SECTOR_SIZE+STM32_FLASH_BASE);//擦除这个扇区
for(i=0;i<secremain;i++)//复制
{
STMFLASH_BUF[i+secoff]=pBuffer;
}
STMFLASH_Write_NoCheck(secpos*STM_SECTOR_SIZE+STM32_FLASH_BASE,STMFLASH_BUF,STM_SECTOR_SIZE/2);//写入整个扇区 ,扇区大小/2
}else STMFLASH_Write_NoCheck(WriteAddr,pBuffer,secremain);//写已经擦除了的,直接写入扇区剩余区间. 待写入空间没除2
如图所示,待写入数据为(u8)0x05,(int)0x0000000a。如果不除2,则会多写入1倍的数据。
|
|