STM32 掉电保护程序,Flash不能读出问题

hhhh63 2020-06-16 09:17:07
我写了一段STM32断电时保存程序,掉电时把数据保存到Flash中,加电时从Flash中恢复,测试了一个月,没有问题。但是昨天不小心碰了电源线,造成电源不断跳动,再启动程序时,进入HardFault_Handler(void) 循环中,发现是读Flash错误,查看内存是一片问号,估计是电源接触不好反复进入掉电程序把Flash搞乱了。我的问题是:
1、有没有办法先判断Flash内存是否可读?如果不可读就先擦除Flash,再读Flash
2、或者有没有办法从HardFault_Handler(void) 中返回到原来的程序?我试过直接返回又会进去,出不来。
3、或者有没有办法不产生HardFault_Handler(void)中断?
4、或者有没有别的好方法?
谢谢
...全文
574 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hhhh63 2020-06-16
  • 打赏
  • 举报
回复
引用 1 楼 水滴重甲 的回复:
你的HardFault_Handler(void)里面是怎么处理的? 一般来说出现这个中断后,先disable这个中断,然后再次读取flash检查ecc或者crc,如果还是出错,就擦除这片flash,然后再enable 这个中断。

请问“disable这个中断”怎么做?
水滴重甲 2020-06-16
  • 打赏
  • 举报
回复
你的HardFault_Handler(void)里面是怎么处理的? 一般来说出现这个中断后,先disable这个中断,然后再次读取flash检查ecc或者crc,如果还是出错,就擦除这片flash,然后再enable 这个中断。
hhhh63 2020-06-16
  • 打赏
  • 举报
回复
谢谢,用
__disable_fiq();
u8 res = (m_nVer == m_pData->nVer);
__enable_fiq();
解决问题
结贴
水滴重甲 2020-06-16
  • 打赏
  • 举报
回复
你看看是不是有这种类似的函数__disable_irq() 直接不让cpu去响应中断,在中断函数里面除了关闭中断,还应该清掉中断状态位

27,377

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧