打印
[STM32]

sSTM32 写内部flash导致 程序下次重启无法执行

[复制链接]
1777|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mcbot|  楼主 | 2018-10-21 23:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 mcbot 于 2018-10-22 08:34 编辑

volatile static uint32_t Addr_Reserved = 0X0800E000 ;


__disable_irq ();//关中断
               
FLASH_Unlock(); //解锁写保护
FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
               
FLASHStatus = FLASH_ErasePage(Addr_Reserved );
FLASHStatus = FLASH_ProgramWord( Addr_Reserved , 0x12345678);


FLASH_Lock();//上锁写保护
__enable_irq ();




现象:
1、擦除完 flash,写入新的数据(0X12345678),再读出来都正常,程序也能正常运转。
     当断电以后,重新上电,整个程序都不运行了,没任何反应。

2、如果不擦除, 直接写入,写入正常,程序运转也正常,     重新启动上电也运转正常
     但是不能第二次写入了,因为数据不再是0XFF的原因吧。

问题应该发生在erase的过程当中。但是不知道哪里出错了
这是编译完的大小
Program Size: Code=34370 RO-data=22986 RW-data=4444 ZI-data=2996  

这是map文件的尾部数据,我是操作的尾部没有代码的地方的。在0x0800e000 我定义的是一个const常量,
    0x08009766   0x00000490   Data   RO         1008    .constdata          bmp_icon.o
    0x08009bf6   0x00000200   Data   RO         1072    .constdata          mbcrc.o
    0x08009df6   0x00000028   Data   RO         1365    .constdata          c_w.l(_printf_hex_int.o)
    0x08009e1e   0x00000011   Data   RO         1395    .constdata          c_w.l(__printf_flags_wp.o)
    0x08009e2f   0x00000001   PAD
    0x08009e30   0x00000094   Data   RO         1617    .constdata          c_w.l(bigflt0.o)
    0x08009ec4   0x00000063   Data   RO         1087    .conststring        mbrtu.o
    0x08009f27   0x00000001   PAD
    0x08009f28   0x00000044   Data   RO         1167    .conststring        mbascii.o
    0x08009f6c   0x00000020   Data   RO         1749    Region$$Table       anon$$obj.o
    0x08009f8c   0x0000001c   Data   RO         1645    locale$$data        c_w.l(lc_numeric_c.o)
    0x08009fa8   0x00004058   PAD
    0x0800e000   0x0000000c   Data   RO          639    .ARM.__AT_0x0800E000  Reserved_Data.o


相关帖子

沙发
mcbot|  楼主 | 2018-10-21 23:58 | 只看该作者
麻烦大家帮忙看一下是哪里的问题。

使用特权

评论回复
板凳
airwill| | 2018-10-23 07:35 | 只看该作者
我做 IAP 好象没有遇到这样的问题
对比一下内存内容, 看看是不是 EARSE 得太多了.

使用特权

评论回复
地板
nuaabob| | 2018-10-23 13:07 | 只看该作者
STM32的FLASH,最后一页是不能动的,一动全完蛋,你这个地址是不是最后一页?具体要看你的芯片型号了。

使用特权

评论回复
5
千岁寒| | 2018-10-31 09:57 | 只看该作者
建议擦之前,先读出来,然后和要写入的内容一起写会去!

使用特权

评论回复
6
mcbot|  楼主 | 2018-11-8 20:00 | 只看该作者
千岁寒 发表于 2018-10-31 09:57
建议擦之前,先读出来,然后和要写入的内容一起写会去!

多谢

使用特权

评论回复
7
yhy08090| | 2019-7-11 09:03 | 只看该作者
楼主后来怎么解决此问题的?我也碰到类似的了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

255

帖子

1

粉丝