请教各位大神:
使用
STM32F030C8T6
芯片,在擦除FLASH过程中,如果串口收到较多的数据(60字节左右),程序便会在擦除FLASH过程中跑飞导致看门狗复位。请问这是什么原因?
注:
1. 串口接收程序比较简单,不会有数组越界问题;
2. 擦除FLASH的程序是验证过的,没有问题;
3. 如果串口收到的数据较少,也不会出现这个问题;
4. 在擦除FLASH前关闭总中断或者串口中断,程序依旧会跑飞;但直接关闭串口可以避免程序跑飞;
5. 没有使用操作系统;
6. 擦除FLASH程序如下:
uint8_t Flash_Erase(uint32_t addr, uint32_t size)
{
uint32_t i;
uint32_t num;
uint8_t res;
if(FLASH_START_ADDR > addr || FLASH_END_ADDR <= addr+size)
{
return 0;
}
if(addr % FLASH_PAGE_SIZE != 0)
{
return 0;
}
num = size / FLASH_PAGE_SIZE;
if(0 != size % FLASH_PAGE_SIZE)
{
num++;
}
FLASH_Unlock();
FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR);
for(i=0;i<num;i++)
{
res = FLASH_ErasePage(addr + FLASH_PAGE_SIZE*i);
}
FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR);
FLASH_Lock();
return 1;
}
我把串口数据的接收和处理都注释掉了(只留清除中断挂起标志操作),仍然存在这个问题。说明并不是串口数据处理的问题;极有可能是FLASH擦除过程被频繁中断导致的,但为什么会这样,我不清楚。
一周热门 更多>