你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
每日签到
STM32团队2
论坛吐槽优化专区
升级测试
内部Flash写2个字节当标志位,用先擦除和解保护吗?
[复制链接]
sos博
提问时间:2020-4-3 11:50 /
问答
是否解决:
我的程序
void flash_burnflag(void)
{
uint16_t fromapp_flag = 0x0888;
uint32_t FROMAPP_ADDRESS = 0x8007FFE;
HAL_FLASH_Unlock();//解锁Flash
HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, FROMAPP_ADDRESS, fromapp_flag);
HAL_FLASH_Lock(); //锁住Flash
}
复制代码
1,上面的程序在一个全新工程,只放这个函数,成功,可以用st的下载程序读出指定内存位置为0x0888
2,但是放在我实际程序APP(实际环境是BOOT+APP)中,
实际程序APP里面有串口DMA接收中断,这个程序里除了
flash_burnflag
这个函数,没有flash相关操作了
,
函数
flash_burnflag不论在初始化位置还是串口接收中断里面执行,都不成功,为0000
请问这是为什么呢?
请问需要处理Write protection和erase吗?
赞
0
收藏
0
评论
5
分享
发布时间:2020-4-3 11:50
举报
请先
登录
后回复
5个回答
yklstudent-1794
回答时间:2020-4-8 08:32:22
a0a.1 32b0c
高级会员了也有这个疑问?
赞
0
评论
回复
支持
反对
tgw860910
回答时间:2020-4-8 08:55:52
a0a.1 32b0c
每次写操作之前都要先擦除
赞
0
评论
回复
支持
反对
水晶之泪0517
回答时间:2020-4-8 09:21:57
a0a.1 32b0c
目标地址写之前可以读出来判断一下,如果是全FF就不用擦除,可以直接写
评分
参与人数
1
蝴蝶豆
+2
收起
理由
STMCU
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
ldptest
回答时间:2020-4-8 10:24:59
a0a.1 32b0c
擦除原理是所有位上置“1”,
写数据是把为“0”的位清0,不能把flash中为“0”的位值“1”
评分
参与人数
1
蝴蝶豆
+3
收起
理由
STMCU
+ 3
查看全部评分
赞
0
评论
回复
支持
反对
butterflyspring
回答时间:2020-4-10 17:12:00
a0a.1 32b0c
同意楼上大侠们的观点,补充一点,你的程序有"BOOT+APP",推测用了写保护。所以注意写保护不要覆盖到存贮地址。
评分
参与人数
1
蝴蝶豆
+1
收起
理由
STMCU
+ 1
查看全部评分
赞
0
评论
回复
支持
反对
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
13245底部标题123相同标题
12底部标题123相同标题
33333底部标题123相同序号
3435底部标题-无链接
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
评分
查看全部评分
写数据是把为“0”的位清0,不能把flash中为“0”的位值“1”
评分
查看全部评分
评分
查看全部评分