gd32f103 flash读写
时间: 2023-09-08 19:00:58 浏览: 152
gd32f103芯片是广东核电推出的一款32位微控制器系列产品,其内部集成了具有良好性能的Flash存储器。gd32f103的Flash存储器可以用于程序代码的存储和读取,同时还可以用于数据的存储和读取。
gd32f103的Flash存储器可以通过编程来进行读写操作。在进行Flash读操作时,首先需要设置所需读取的Flash地址和长度,然后通过读取指令执行Flash读操作。读取的数据可以存储到内部寄存器中,或者直接传送到CPU进行进一步处理。
在进行Flash写操作时,首先需要解锁Flash操作以允许写入操作。然后,需要擦除所需写入的Flash页面。擦除完成后,可以将待写入的数据加载到特定的寄存器中,并通过写入指令进行写入操作。在写入操作完成后,可以再次锁定Flash操作,以保护已写入的数据。
gd32f103的Flash读写具有很高的可靠性和稳定性。它支持多种擦除模式和编程模式,可以满足不同应用场景的需求。此外,gd32f103还具有自动错误纠正功能,可以有效地识别和纠正写入过程中可能出现的错误。
总之,gd32f103的Flash读写功能强大,可以实现可靠和高效的数据存储和读取操作,适用于各种嵌入式应用领域。
相关问题
gd32F103 flash读写
对于GD32F103系列的MCU,可以通过以下步骤进行Flash的读写操作:
1. 确定Flash的起始地址和大小,以及要读写的数据。
2. 配置Flash接口和相关时钟。GD32F103的Flash接口包括了Flash控制器(FMC)和存储器接口控制器(FSMC),需要根据具体情况选择合适的接口进行配置。
3. 对Flash进行解锁。通过设置FMC_CTLR的KEY和UNLOCK位进行Flash解锁。
4. 擦除Flash。可以选择擦除整个Flash区域(Bulk Erase)或者指定的Flash页(Page Erase)。擦除操作会将Flash中的数据全部置为1。
5. 编程Flash。将要写入的数据按页(Page)进行编程,可以使用FMC_WDATAx寄存器进行数据写入。
6. 等待Flash编程完成。可以使用FMC_STATR寄存器的BUSY位进行判断,当BUSY位为0时,表示编程完成。
7. 锁定Flash。通过设置FMC_CTLR的LOCK位进行Flash锁定,锁定后无法再进行擦除和编程操作。
需要注意的是,Flash的读写操作涉及到底层硬件的操作,具体的代码实现可能会有所不同,可以参考GD32F10x固件库提供的示例代码来进行操作。同时,为了保证数据的正确性和安全性,建议在操作Flash之前备份原有的数据,避免数据丢失或者损坏。
gd32f103flash读写程序
以下是一个简单的 GD32F103 Flash 读写程序示例。假设你已经熟悉了 GD32F103 的 Flash 相关寄存器和功能,这里不再赘述。
注意:本程序只适用于在 Flash 末尾预留了一定空间的情况下进行 Flash 读写,如果你需要进行其他操作,需要自行修改代码。
```c
#include "gd32f10x.h"
#define FLASH_START_ADDR ((uint32_t)0x08000000) // Flash 起始地址
#define FLASH_END_ADDR ((uint32_t)0x08010000) // Flash 结束地址(预留 64KB 空间)
void flash_erase_page(uint32_t addr);
void flash_write_word(uint32_t addr, uint32_t data);
int main(void)
{
uint32_t i, data, addr;
// 使能 Flash 写入
fmc_unlock();
fmc_ready_wait();
// 擦除 Flash
for (i = FLASH_START_ADDR; i < FLASH_END_ADDR; i += FLASH_PAGE_SIZE) {
flash_erase_page(i);
}
// 写入数据
for (i = FLASH_START_ADDR; i < FLASH_END_ADDR; i += 4) {
data = i - FLASH_START_ADDR;
flash_write_word(i, data);
}
// 读取数据
for (i = FLASH_START_ADDR; i < FLASH_END_ADDR; i += 4) {
addr = i - FLASH_START_ADDR;
data = *(uint32_t *)i;
}
// 禁止 Flash 写入
fmc_lock();
while (1);
}
// 擦除 Flash 页
void flash_erase_page(uint32_t addr)
{
fmc_page_erase(addr);
fmc_ready_wait();
}
// 写入 Flash 单字
void flash_write_word(uint32_t addr, uint32_t data)
{
fmc_word_program(addr, data);
fmc_ready_wait();
}
```
以上是一个简单的 GD32F103 Flash 读写程序示例,可以按照自己的需求进行修改。
阅读全文