stm32 Flash 擦除,一直返回错误,问题排查

在做 328 ESCL 的 lockTimes 和 unlockTimes 存入 内部Flash 的时候,出现了一个bug。就是上电初始化的时候,第一次读取出来的值,checkSum 通不过,恢复出厂设置,第一次写入 Flash 可以成功,但是后续当 lockTimes 和 unlockTimes 变化的时候,再次存入 Flash 一直擦除失败。

一步步跟进调试,发现是 FLASH_ERROR_PG 的错误。

后面上网搜了 “FLASH_ERROR_PG” 这个字符串,搜到这篇文章“解决stm32f103同一个扇区flash只能擦除一次,再次擦除报FLASH_ERROR_PG错误问题_stm32f103的flash只能写1次-优快云博客”,按照文章描述,加上清除标志位,和开关中断,问题解决

### 解决STM32G0系列微控制器Flash擦除失败的方法 对于STM32G0系列微控制器,在执行Flash擦除操作时可能会遇到各种问题。为了有效解决问题,可以采取以下措施: #### 1. 检查电源电压稳定性 确保供电稳定是非常重要的一步。不稳定的电源可能导致Flash擦除过程中断或失败。建议使用高质量稳压器并保持工作电压在规定范围内[^1]。 #### 2. 验证编程环境配置 确认开发工具链设置无误也至关重要。这包括但不限于IDE版本、编译选项以及链接脚本等参数是否匹配目标硬件平台的要求。错误的配置可能引起意想不到的行为,影响到Flash的操作成功率。 #### 3. 使用内置命令验证SPI Flash状态 利用`flash`命令读取SPI Flash原始字节可以帮助诊断潜在的问题。通过对比两个超级块(位于block 0 和 block 1),能够发现是否存在数据损坏或其他异常情况。如果检测到任何可疑之处,则需进一步排查具体原因。 ```c // 示例代码:读取指定地址范围内的SPI Flash内容 HAL_StatusTypeDef ReadSpiFlash(uint8_t* pData, uint32_t ReadAddr, uint32_t Size) { HAL_StatusTypeDef status; // 初始化SPI接口... // 发送读指令序列... // 接收数据至缓冲区pData return status; } ``` #### 4. 尝试低级重置恢复默认出厂设置 当常规方法无法解决问题时,可考虑采用更激进的方式——即对MCU实施一次完整的复位过程来清除所有用户自定义的数据结构和寄存器值。注意此操作会删除整个芯片上的程序存储区域,请谨慎行事。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值