你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

内部Flash写2个字节当标志位,用先擦除和解保护吗?

[复制链接]
tryfly 提问时间:2020-4-3 11:50 /
我的程序
  1. void flash_burnflag(void)
  2. {
  3.         uint16_t fromapp_flag = 0x0888;
  4.   uint32_t FROMAPP_ADDRESS = 0x8007FFE;

  5.         HAL_FLASH_Unlock();//解锁Flash
  6.        
  7.         HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, FROMAPP_ADDRESS, fromapp_flag);

  8.         HAL_FLASH_Lock(); //锁住Flash
  9. }
复制代码
1,上面的程序在一个全新工程,只放这个函数,成功,可以用st的下载程序读出指定内存位置为0x0888
2,但是放在我实际程序APP(实际环境是BOOT+APP)中,
实际程序APP里面有串口DMA接收中断,这个程序里除了flash_burnflag这个函数,没有flash相关操作了
函数flash_burnflag不论在初始化位置还是串口接收中断里面执行,都不成功,为0000

请问这是为什么呢?
请问需要处理Write protection和erase吗?

收藏 评论5 发布时间:2020-4-3 11:50

举报

5个回答
yklstudent 回答时间:2020-4-8 08:32:22
高级会员了也有这个疑问?
DavidTan 回答时间:2020-4-8 08:55:52
每次写操作之前都要先擦除
水晶之泪0517 回答时间:2020-4-8 09:21:57
目标地址写之前可以读出来判断一下,如果是全FF就不用擦除,可以直接写

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

网络孤客 回答时间:2020-4-8 10:24:59
擦除原理是所有位上置“1”,
写数据是把为“0”的位清0,不能把flash中为“0”的位值“1”

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

butterflyspring 回答时间:2020-4-10 17:12:00
同意楼上大侠们的观点,补充一点,你的程序有"BOOT+APP",推测用了写保护。所以注意写保护不要覆盖到存贮地址。

评分

参与人数 1蝴蝶豆 +1 收起 理由
STMCU + 1

查看全部评分

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版