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存储器的高地址部分已经被写满了,导致数据无法存储进去。为了解决这个问题,你可以尝试以下几种方法:
- 使用Flash存储器的擦除和编程操作来释放高地址部分的存储空间。
- 将数据存储到bank0中,而不是bank1中。
- 使用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);请注意,这些代码只是示例,实际实现中可能需要根据具体情况进行修改。
解决 无用评论 打赏 举报