STM32F030擦除FLASH时程序跑飞

2019-07-14 14:59发布

请教各位大神:
使用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;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。