高级会员

- 积分
- 550
- 金钱
- 550
- 注册时间
- 2016-7-26
- 在线时间
- 90 小时
|
6金钱
求高手指点一下
新手入门
我用stm32 f2写了一个程序
接收can信号存储,然后写满前擦除下一个扇区,如此循环
为什么debug过程中能顺利实现
正常运行就不行了呢
困扰一个礼拜了。。。
源码如下:
uint8_t data_flash_write(uint8_t *pbuf)
{
uint32_t End_Addr, j;
uint8_t i;
FLASH_Status status = FLASH_COMPLETE;
FLASH_Unlock();
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR|FLASH_FLAG_PGSERR);
/*****************查找空闲地址及扇区*********************/
End_Addr = ADDR_FLASH_END; //末地址
Start_Addr = flash_check(); //查找空闲地址
Start_Sec = GetSector(Start_Addr);
/************开始写入之前判断下一扇区是否为空,不空则擦除**************/
if(Start_Sec == 11)
{
NextSec = SECTOR[5];
NextCount = SECTOR_COUNTER[5];
Checkaddr1 = STMFLASH_ReadHalfWord(NextSec);
while ((Checkaddr1 != 0xFFFF) && ((End_Addr - Start_Addr) < 100)) //在开始地址与末地址不到100字时,擦除1扇区,下一次从1扇区开始写
{
status=FLASH_EraseSector(NextCount,VoltageRange_3);
Checkaddr1 = STMFLASH_ReadHalfWord(NextSec);
if(status != FLASH_COMPLETE)
break; //发生错误了
}
}
else
{
NextSec = SECTOR[(GetSector(Start_Addr)) + 1];
NextCount = SECTOR_COUNTER[(GetSector(Start_Addr)) + 1];
Checkaddr2 = STMFLASH_ReadHalfWord(NextSec);
while(Checkaddr2 != 0xFFFF )
{
status=FLASH_EraseSector(NextCount,VoltageRange_3);
Checkaddr2 = STMFLASH_ReadHalfWord(NextSec);
if(status != FLASH_COMPLETE)
break; //发生错误了
}
}
for(i = 0; i < 12; i++)
{
FLASH_ProgramByte((Start_Addr + i), *(pbuf + i));
}
FLASH_Lock();
return 1;
}
|
|