STM32 擦除flash失败问题

本文探讨了STM32F407VE在使用HAL库及Freertos时遇到的Flash擦除失败问题,包括解决方案如禁用数据缓存、清除标志等,以及避免在擦除Flash时调用看门狗刷新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

硬件平台STM32F407VE,HAL库。标准库不会有此问题

软件跑freertos

问题描述:STM32 擦除flash失败,CPU跳不出串口中断,看门狗重启。

问题一、FlashStatus!=HAL_OK解决办法:

1、flash擦写前禁止flash数据缓存,操作完后恢复

/* Disable data cache */
      __HAL_FLASH_DATA_CACHE_DISABLE();//FLASH操作期间,必须禁止数据缓存

        /* Enable data cache */
    __HAL_FLASH_DATA_CACHE_ENABLE();//开启数据缓存

2、如果上述办法还不行可以在操作flash前增加清标志操作

  /* Clear pending flags (if any) */
  __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP    | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | \
                         FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR);

3、看门狗影响

操作flash期间不要调用HAL_IWDG_Refresh(&hiwdg);

并且看门狗未开启或者屏蔽MX_IWDG_Init();的初始化

软件最好不调用HAL_IWDG_Refresh(&hiwdg);

单次擦除失败(返回非HAL_OK),延时后再次尝试擦除

 

问题二:擦除flash失败,死机问题

我用了串口空闲中断+DMA接收、发送模式

 软件仿真发现很容易在擦flash的时候CPU频繁进入串口中断(其他任务无法进入),最后复位

关键问题是:

HAL_UART_IRQHandler(&huart2);必须在中断里优先执行,放在最前端,不能放在用户程序以后。

如果不用flash擦写,顺序其实关系不大。

可能跟芯片也有关系(之前用F429就没这个问题)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值