调用STM32F103VGT6 FLASH闪存擦除指令异常

2019-07-14 13:16发布

这两天,我手上拿到了一颗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存在。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
60user110
1楼-- · 2019-07-14 21:44
 精彩回答 2  元偷偷看……
60user110
2楼-- · 2019-07-15 03:25
顶~~台主求助
TOPCB
3楼-- · 2019-07-15 09:21
楼主,你下载最新的固件库吧。里面描述了大于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)
huazhe
4楼-- · 2019-07-15 12:06
对于STM32F1系列的1MB flash芯片,是分两个bank的。每个BANK最大512KB.

你确认下你的代码,估计你给的是BANK2的地址,操作的却是BANK1的 FLASH寄存器,二者是
不一样的。

标准库函数里用到一个宏STM32F10X_XL来区分不同的函数实现。
60user110
5楼-- · 2019-07-15 13:44
谢谢楼上两位,一语点破,确实我的固件库太老了
60user110
6楼-- · 2019-07-15 15:55
 精彩回答 2  元偷偷看……

一周热门 更多>