完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
产品使用STM32F103VCT6,在使用自己的IAP程序升级固件时,碰到Flash擦除不成功的问题,具体步骤如下:
1、调用库函数的擦除块指令FLASH_ErasePage(),返回了成功 FLASH_COMPLETE; 2、向块中写入数据FLASH_ProgramHalfWord(),返回了失败 FLASH_ERROR_PG, 这个标志的意思是FLash->SR 的PGERR位,表示要写入的位置的值不为0xFFFF。也就是说,上面调用的FLASH_ErasePage()并没有将Flash擦除成功。 3、反复测试一直都没有成功; 4、使用jlink调试,看到Flash中的内容确实还在; 5、怀疑是Flash解锁没有成功,使用jlink查看FLASH->CR 的LOCK位,已经解锁了。系统时钟HSI也正常。 6、并不是所有的产品都出这种问题,偶尔的几块板子会出现这个问题,并且重新下载IAP程序也就没问题了。 不知道各位碰到过这个问题吗?这个是为什么呢? |
|
相关推荐
11个回答
|
|
先解锁 清除标志位 再整页擦除
|
|
|
|
同意楼上的
|
|
|
|
建议解锁后,适当增加延时,并重复检查一下解锁位是否正确。
|
|
|
|
|
|
本帖最后由 wofei1314 于 2017-4-26 10:13 编辑
是否设置Flash延迟... 读写Flash之前,加上这个 FLASH_SetLatency(FLASH_ACR_LATENCY_2);//<=24M,为0,<=48M,为1,<=72M,为2; |
|
|
|
|
|
|
|
请问“清除标志位”指的是什么标志位?
|
|
|
|
先解锁 有个自己写的函数 你可以参考一下
void Writeflash(u32 addr,u16 data) { volatile FLASH_Status FLASHStatus = FLASH_COMPLETE; FLASH_Unlock(); FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR); FLASHStatus = FLASH_ErasePage(addr); if(FLASHStatus == FLASH_COMPLETE) { FLASH_ProgramHalfWord(addr,data); } FLASH_Lock(); } |
|
|
|
十分感谢你的回复,按你的方法测试了,完全没问题,再次感谢! |
|
|
|
|
|
|
|
我一般用HAL库,先找个官方的例程看看,然后复制,粘贴,把核心的代码复制过来,再根据自己的需要小改一下,问题就解决了。效率很高的。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1980 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1836 浏览 3 评论
4416 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1985 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2489 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 21:03 , Processed in 0.775367 second(s), Total 93, Slave 77 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号