如何在STM32F103上通过Arduino Core增大EEPROM仿真容量?
扩展STM32F103 Arduino核心下的EEPROM仿真容量
完全可以扩展,你的固件仅占用8%闪存,剩余空间足够支持更大的EEPROM仿真容量。STM32F1的EEPROM仿真本质是用闪存扇区模拟,只需调整核心配置即可安全扩容,具体步骤如下:
1. 确认闪存扇区与剩余空间
首先明确你的STM32F103型号闪存参数:
- 中容量型号(如F103C8T6,64KB闪存):前4个扇区各16KB;大容量型号(如F103CB,128KB闪存):前4个扇区16KB,后续扇区64KB。
- 根据编译后显示的固件占用率,计算剩余闪存空间(比如64KB闪存剩余约58KB),确保扩容后的EEPROM总大小不超过剩余空间。
2. 修改Arduino STM32核心的EEPROM配置
找到Arduino安装目录下的STM32核心配置文件,分两种情况:
情况1:配置在variant文件中
进入hardware/STMicroelectronics/stm32/variants/[你的板子型号,如generic_stm32f103c]/variant.h,找到类似如下定义:#define EEPROM_SIZE 2048 // 默认2KB将
2048改为你需要的大小,注意必须是对应闪存扇区大小的整数倍(比如中容量型号设为16384即16KB、32768即32KB等)。情况2:配置在EEPROM核心文件中
若variant.h中无相关定义,进入hardware/STMicroelectronics/stm32/cores/arduino/stm32/EEPROM.h,找到EEPROM_SIZE的定义,修改为目标大小即可。
同时确认EEPROM_START_ADDRESS(部分版本核心会自动计算固件后的起始地址,无需手动修改,若需调整需确保地址不与固件重叠)。
3. 验证扩容有效性
修改后编译固件,编写测试代码验证数据读写:
#include <EEPROM.h> void setup() { Serial.begin(115200); // 批量写入测试数据 for (int i = 0; i < EEPROM_SIZE; i++) { EEPROM.write(i, i % 256); } EEPROM.commit(); // 同步到闪存 Serial.println("写入完成"); // 读取验证 bool verifyPass = true; for (int i = 0; i < EEPROM_SIZE; i++) { if (EEPROM.read(i) != (i % 256)) { verifyPass = false; Serial.print("验证失败,地址:"); Serial.println(i); break; } } Serial.println(verifyPass ? "验证成功" : "验证失败"); } void loop() {}
关键注意事项
- 扩容后原EEPROM数据会丢失,需重新写入。
- 不要将EEPROM设为满容量,预留部分空间给未来固件升级。
- 必须保证
EEPROM_SIZE与闪存扇区大小对齐,否则会导致读写异常。
内容的提问来源于stack exchange,提问作者Nejc Okorn
相关产品推荐
相关产品推荐

