You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 23:42:43