提个STM32 Flash编程的诡异问题

[复制链接]
4415|3
 楼主| skyler 发表于 2011-4-2 20:24 | 显示全部楼层 |阅读模式
我写了一个引导程序A放置于Flash最前端 0x08000000,此程序可以擦除32k以后(0x08008000)的Flash并将新程序复制到该位置,然后跳转到32k处执行,包括了完整ISP流程,设置中断向量及堆栈。
产品后,要给A增加功能,于是写了个B程序(位于32k),利用引导程序A将B复制到32k处,然后跳到执行B;


B程序运行后,擦除0x08000000处的A,然后将新的A'写到此地址;

现在遇到问题是,无论如何,B无法将0x08000000处的A擦除。

但是,用jtag在线调试时,可以将A擦除,并成功将A'更新到A处。
 楼主| skyler 发表于 2011-4-2 20:43 | 显示全部楼层
补充一下,

在应用程序B中,对高位的flash擦除和编程是正确的。

A有读保护操作。

B操作flash前有做Unlock操作。
机器猫咪咪 发表于 2011-4-10 17:15 | 显示全部楼层
"用jtag在线调试时,可以将A擦除,并成功将A'更新到A处。"
就是说在线调试时程序运行成功,离线运行时失败?

是否考虑通过串口打印追踪一下问题?
楼主是否可以上传一下代码,我在买的神舟III号STM32开发板上试一试?
mcuisp 发表于 2011-4-11 01:36 | 显示全部楼层
注意读保护RDP使能后,0x08000000处有4KB被写保护。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

57

帖子

1

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