关于mcu_Flash的笔记

1.查看单片机的内存映射了解内部flash和Ram的地址内存范围
2.根据地址在相关IDE中设置flash空间
3.查看内存使用情况
查看编译器编译后内存占用情况
在这里插入图片描述
Code为程序代码部分
RO-data 表示 程序定义的常量const temp;
RW-data 表示 已初始化的全局变量
ZI-data 表示 未初始化的全局变量
ROM(Flash) size = Code+RO-data+RW-data; //程序存储器
RAM size = RW-data+ZI-data     //数据存储器
.map中查看内存占用情况
在这里插入图片描述
4.flash存储地址起始地址为占用地址之后
在这里插入图片描述
5.MDK仿真查看指定flash地址空间的方法
输入指定地址 查看地址内容
在这里插入图片描述

参考:
Program Size
STM32 程序所占用空间计算 && FLASH存储的起始地址计算

<think>好的,我现在需要帮助用户查找GD32F30x微控制器的闪存编程教程或代码示例。首先,我得确认GD32F30x属于哪个厂商,应该是GigaDevice。接下来,我应该考虑官方资源,比如官方网站和用户手册。官方通常会提供技术文档、数据手册和应用笔记,这些是查找闪存编程资料的首选。 用户可能已经看过官方资料,但需要具体的代码示例或教程,所以可能需要第三方资源。GitHub、优快云、电子工程论坛(如EEVblog或Stack Overflow)可能有开发者分享的代码。另外,开发板供应商如淘宝或得捷电子可能会有配套的例程。 然后,我需要回忆是否有相关的开源项目或库支持GD32系列。比如,Arduino或PlatformIO是否有GD32的支持,或者是否有类似STM32的HAL库。GD32的库可能结构类似于STM32,用户可以借鉴STM32的代码,但需要注意硬件差异,比如时钟配置或寄存器地址。 另外,检查用户提供的引用内容是否有帮助。引用[1]提到使用GPT-3和Transformers库的代码生成,但可能不直接相关。引用[2]是编程书籍资源,可能没有具体代码。引用[3]关于调试和编译,可能与实际闪存编程关系不大,但提到了gcc工具链,可能涉及编译和烧录步骤。 用户可能需要具体的步骤,比如如何擦除、写入、校验闪存,以及使用哪种烧录工具。可能需要指导他们查找GD32的Flash库函数,例如gd32f30x_fmc.c中的函数,或者使用J-Link、GD-Link工具进行下载。 最后,总结资源获取途径,并提醒注意事项,如电压、时钟配置、写保护等。如果用户需要更具体的代码,可能需要进一步说明使用的开发环境或具体需求。</think>### GD32F30x闪存编程技术资料与代码示例 #### 1. 官方技术资料 GD32F30x系列闪存编程的核心技术文档包括: - **《GD32F30x用户手册》**:包含Flash Memory Controller(FMC)模块的寄存器描述、擦除/编程时序要求,建议重点关注第3章存储器映射和第5章FMC控制器[^2] - **《GD32F30x Firmware Library》**:官方提供的标准外设库,内含`gd32f30x_fmc.c`驱动文件,包含以下关键函数: ```c fmc_unlock(); // 解除闪存写保护 fmc_page_erase(address); // 擦除指定页 fmc_word_program(address, data); // 单字编程 fmc_lock(); // 重新上锁 ``` 提供完整的FMC操作流程示例代码[^1] #### 2. 典型代码实现 以下是基于GD官方库的Flash读写示例: ```c #include "gd32f30x.h" #define FLASH_PAGE_SIZE 0x800 // 2KB页大小 #define TEST_ADDRESS 0x08020000 // 用户闪存区起始地址 void flash_write_test(void) { uint32_t write_data = 0x12345678; /* 1. 解锁FMC */ fmc_unlock(); /* 2. 擦除目标页 */ fmc_flag_clear(FMC_FLAG_END | FMC_FLAG_WPERR | FMC_FLAG_PGERR); fmc_page_erase(TEST_ADDRESS); /* 3. 写入数据 */ fmc_word_program(TEST_ADDRESS, write_data); /* 4. 重新锁定 */ fmc_lock(); } uint32_t flash_read_test(void) { return *(__IO uint32_t*)TEST_ADDRESS; } ``` #### 3. 开发工具链 推荐使用以下工具进行开发调试: - **编程器硬件**:GD-Link、J-Link(需v9以上版本支持) - **IDE配置**: ```makefile # 在Keil工程中需添加: FLASH_LOADER_PATH = $KEIL_PATH/ARM/GD/GD32F30x_2M.FLM # IAR工程需选用GD32F30x.icf链接脚本 ``` - **烧录命令示例**(使用J-Flash工具): ``` jflash -openprjGD32F303. jlink -open GD32F303.hex -auto ``` #### 4. 关键注意事项 1. **电压稳定性**:编程时必须保证VDD≥2.6V,建议开启内部电压调节器(设置FMC_CTL0_REG[5:4]=0b10)[^2] 2. **中断处理**:执行闪存操作期间需禁用全局中断 ```c __disable_irq(); // flash操作代码 __enable_irq(); ``` 3. **数据校验**:建议写入后执行回读校验 ```c if(*(volatile uint32_t*)addr != data) { // 处理校验失败 } ``` #### 5. 进阶参考资料 - [GD32F30x Flash Loader Demo](https://github.com/CommunityGD32Cores/GD32F30xExamples)(GitHub开源项目) - 《GD32 MCU Flash Programming Techniques》应用笔记(官方文档编号AN023) - EEPROM模拟实现方案(使用Flash末页循环写入)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值