完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
这两天,我手上拿到了一颗STM32F103VGT6的芯片,芯片的FLASH容量是1M字节。
在做调用STM32 闪存擦除指令时发现一个问题: 擦到0x808 0000时,会自动跳转到0x800 0000地址,觉得很奇怪。 也看了STM32的FLASH闪存编程手册,没有提到1024K大容量的信息,最多是512K的。 验证代码: void EraseFPoApp(void) { u32 u32PageAdd=0; FLASH_Unlock(); u32PageAdd = 0x8064000; FLASH_ErasePage(u32PageAdd); FLASH_Lock(); } 没问题,可以擦除这页的内容。 但是: void EraseFPoApp(void) { u32 u32PageAdd=0; FLASH_Unlock(); u32PageAdd = 0x8080000; FLASH_ErasePage(u32PageAdd); FLASH_Lock(); } 擦除的确是0x800 0000的内容。不知道为什么。 不知道有没有大神遇到过这类情况。还是本身,STM32就有针对VGT6的这个BUG存在。 |
|
相关推荐
7个回答
|
|
|
|
感觉STM32F103VG有这个漏洞
|
|
|
|
顶~~台主求助
|
|
|
|
楼主,你下载最新的固件库吧。里面描述了大于512K时,如何操作,如下:
STM32F10x_XL devices feature up to 1 Mbyte with dual bank architecture for read-while-write (RWW) capability: - bank1: fixed size of 512 Kbytes (256 pages of 2Kbytes each) - bank2: up to 512 Kbytes (up to 256 pages of 2Kbytes each) |
|
|
|
对于STM32F1系列的1MB flash芯片,是分两个bank的。每个BANK最大512KB.
你确认下你的代码,估计你给的是BANK2的地址,操作的却是BANK1的 FLASH寄存器,二者是 不一样的。 标准库函数里用到一个宏STM32F10X_XL来区分不同的函数实现。 |
|
|
|
谢谢楼上两位,一语点破,确实我的固件库太老了
|
|
|
|
问题已经解决,如上面两位版主说的,我在官网下载最新的Library就可以了。
但是在调试时发现一个奇怪的问题,每次第一次进入擦除指令时,总是不能准确的擦除第一页,直到第二次进入才能擦除。 比如擦除的 起始页地址是0x8005000,但是8005000这页是不能擦除的,后面的页都可以一次擦除。 虽然可以有其他方法避免,但是觉得不应该出现这种现象。很奇怪,怎么会出现这种情况,引用不带XL的 就没有问题。 验证代码: void ErasePageApp(void) { FLASH_Unlock(); u32PageAddree = 0x8005000+ulPa; FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR); FLASH_ErasePage(u32PageAddree); ulPa +=(u32)(2*1024); FLASH_Lock(); } |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1950 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1809 浏览 3 评论
4389 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1960 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2463 浏览 1 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 10:26 , Processed in 0.814966 second(s), Total 86, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号