“情”丶天 2025-02-21 09:33 采纳率: 0%
浏览 64

gd32单片机的bank0和bank1

GD32F405rgt6是两个块,bank0为1024kb,bank1为2048kb,每次存储数据到bank1时,数据都会存储不进去,在bank0存储时是没问题的,就是存储到0x08100000会一直出现fmc的状态为FMC_PGSERR和FMC_WPERR两个,导致写不进去。求指点一下

  • 写回答

6条回答 默认 最新

  • 阿里嘎多学长 2025-02-21 09:33
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    GD32单片机的bank0和bank1

    你遇到的问题是,GD32F405rgt6的bank1存储数据时总是存储不进去,而bank0存储时没有问题。

    这是因为GD32F405rgt6的bank1是Flash存储器的高地址部分,而bank0是低地址部分。在Flash存储器中,高地址部分的存储器块是可擦除的,而低地址部分的存储器块是不可擦除的。

    在你存储数据到bank1时,可能是因为Flash存储器的高地址部分已经被写满了,导致数据无法存储进去。为了解决这个问题,你可以尝试以下几种方法:

    1. 使用Flash存储器的擦除和编程操作来释放高地址部分的存储空间。
    2. 将数据存储到bank0中,而不是bank1中。
    3. 使用Flash存储器的分区功能来将数据存储到不同的存储区中。

    代码示例:

    // 使用Flash存储器的擦除和编程操作
    FLASH_EraseSector(FLASH_BANK1, 0);
    FLASH_ProgramWord(FLASH_BANK1, 0x08100000, data);
    
    // 将数据存储到bank0中
    FLASH_ProgramWord(FLASH_BANK0, 0x08100000, data);
    
    // 使用Flash存储器的分区功能
    FLASH_SetPartition(FLASH_BANK1, 0, 0x08100000, 0x081FFFFF);
    FLASH_ProgramWord(FLASH_BANK1, 0x08100000, data);
    

    请注意,这些代码只是示例,实际实现中可能需要根据具体情况进行修改。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月21日