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;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
huazhe
1楼-- · 2019-07-14 16:36
 精彩回答 2  元偷偷看……
hkhwdz
2楼-- · 2019-07-14 18:18
60user77 发表于 1970-1-1 08:00

我把串口数据的接收和处理都注释掉了(只留清除中断挂起标志操作),仍然存在这个问题。说明并不是串口数据处理的问题;极有可能是FLASH擦除过程被频繁中断导致的,但为什么会这样,我不清楚。
testd021
3楼-- · 2019-07-14 22:47
你要了解一下擦除FLASH时间哦,他的时间是很长的,所以在擦除和写入数据很容易出问题的,不知道你是接受玩字节写不写入FLASH?
建议你在所有东西都不运行的时候在擦除或者写入,我通常再断电或上点的时候做这些处理,如果在陈序运行过程时先写个buf[]来寄存他,掉电了在储存。
testd021
4楼-- · 2019-07-15 03:43
我记得擦除都是一页一页擦除的,好像都是MS级别的!
脑洞大赛1
5楼-- · 2019-07-15 03:50
我也碰到这个问题,楼主最后解决没
huzp_123
6楼-- · 2019-07-15 07:47
 精彩回答 2  元偷偷看……

一周热门 更多>