搜索
ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU

[STM32 H7] stm32H743读内部flash问题

[复制链接]
199|9
 楼主 | 2020-5-21 15:27 | 显示全部楼层 |阅读模式
本来我写的一对读写flash的函数用的好好的,但是今天下午突然出现读flash的时候程序就会进入HardFault的问题。
我代码十分简单
Annotation 2020-05-21 152342.png
就是我将3个32位的值放在H7的存储区2的第7扇区。一开始是可以用的,但是我让程序自己运行了一个中午,下午来的时候就不用了。
后来我将调试器设置成擦除整个芯片,重新下载一次,又正常了。而且重新选会仅擦除扇区,问题也不会出现了。
我没有什么经验,想询问一下这个问题是什么原因造成的呢?
我在排查问题的时候也查了选项字节,RDP一直是0xAA。不存在读保护的问题。

使用特权

评论回复
 楼主 | 2020-5-21 15:32 | 显示全部楼层
另外请教一下,能不能申请一个固定地址的常量呢?
我了解到STM32将(或许是Keil5的编译行为?)常量放在Flash里,那么我能不能通过修改启动文件或者map文件,申请一个固定地址的常量呢?这样我就不用把希望保存的值放在一个“相对”安全的位置了。

使用特权

评论回复
| 2020-5-22 07:24 | 显示全部楼层
确定仅仅是这块出的问题?

使用特权

评论回复

评论

千樱硕 2020-5-22 09:59 回复TA
我只尝试读了这一块,程序可以正常运行到我读Flash的时候,在读Flash之前,创建RTX线程,开启ADC3之类的一切正常,但是读Flash的时候,汇编运行到一句 LDR r2,[r1,#0x00] 之后就会跳进硬件错误。 
| 2020-5-22 10:10 | 显示全部楼层
仿真调试的时候,因为其它原因进入硬件错误有可能的;
程序烧进去,通过printf或其它方法打印出来看看

使用特权

评论回复

评论

千樱硕 2020-5-23 08:02 回复TA
验证的时候也是有问题的,读取完这些数据,就会通过初始化lcd并显示这些数据。但是lcd不亮,所以程序自己跑的时候也应该是进入了硬件错误。 
| 2020-5-22 10:39 | 显示全部楼层
千樱硕 发表于 2020-5-21 15:32
另外请教一下,能不能申请一个固定地址的常量呢?
我了解到STM32将(或许是Keil5的编译行为?)常量放在Fla ...

可以用关键字__attribute__((at()))把常量放在指定的地址

使用特权

评论回复

评论

千樱硕 2020-5-23 08:03 回复TA
OK,谢谢。 
| 2020-5-22 15:15 | 显示全部楼层
这个必须放一个指定位置?

使用特权

评论回复

评论

千樱硕 2020-5-23 08:05 回复TA
也不是,就是程序每次运行的时候要到固定的地方读取嘛,然后我看H7的手册说,如果读取内部Flash的时候,其他的读取行为都会暂停,但是两个存储区的Flash是不受干扰的。所以为了不会开发后期程序变大还要调整存储位置,就放在了存储2的最后一个扇区。 
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表