
一. 应用背景 当客户遇到存储小量的数据,同时数据写的频率比较低的情况下。从成本角度希望省掉外置 EEPROM,STM32 提供了 Backup SRAM(4K)和 Flash 模拟 EEPROM 两种方案来解决该问题。但是,BackupSRAM 需要提供备用电源,Flash 模拟 EEPROM 又比较浪费空间(存放复杂的结构体数据也不方便)。如果数据擦鞋频率较低(Flash 擦写次数有限),可以考虑直接将数据存放在 Flash 中。本文提供了如何在 IAR6.5 实现该操作。7 v* X: G% E. Y0 u . |! M9 R$ J1 V- m8 Y3 U" }& [4 U 二. IAR 下的实现# ^2 H9 N+ n, J& n 1. icf 文件的配置 在 IAR 的 linker,config file editer 中设置中断向量表位置保持不变 0x0800 0000,代码的存放地址设置为 0x0800 8000 ~ 0x080F FFFF。我们将数据保存在 0x0800 4000 ~ 0x0800 7FFF 中。 ![]() 1 ^5 A2 K/ r0 i \0 A 同时在.icf 文件中做添加脚本:$ n G, H" \7 a y- F6 R, o define symbol __ICFEDIT_region_DATAROM_start__ = 0x0800 4000;" ?1 J1 H- j6 I# t3 w8 i" M define symbol __ICFEDIT_region_DATAROM_end__ = 0x0800 7FFF;& ^- ^1 b+ K8 ^8 W) ^: |. ?! s4 v! ]/ e% w define region DATA_region = mem:[from __ICFEDIT_region_DATAROM_start__ to __ICFEDIT_region_DATAROM_end__];. l( f& l! t$ f8 u7 I place in DATA_region { readonly section .rom_data };) w+ x9 Y5 j; n; }3 m9 j% W 2. 预编译的处理; q; m6 X" Q; A #define DATA_ROM _Pragma("location=\".rom_data\"")3 T6 |# Y; y2 ^5 Y D% K DATA_ROM const uint32_t test_data[] = {32,33,34};; e: {/ y5 a" Q, e DATA_ROM const uint32_t test_data2[] = {33,33,34}; 编译后的.map 文件中 ![]() 4 ~$ R4 g( _: x- g% f! B$ O; F 可以看到 test_data 已经放在了我们希望存储的地址。 用户可以通过调用标准外设库提供的 flash 函数对该数据进行修改。 ) M: W" z4 o* H# T3 p+ ^: D! ^ |
【2025·STM32峰会】GUI解决方案实训分享5-调通板载的NRF24L01 SPI接口并使用模块进行无线通信(发送和接收)
【2025·STM32峰会】GUI解决方案实训分享2-编译运行TouchGFX咖啡机例程(含桌面仿真)
实战经验 | Keil工程使用NEAI库的异常问题
STM32 ISP IQTune:真正零门槛的免费ISP调整软件
【经验分享】STM32 新建基于STM32F40x 固件库的MDK5 工程
意法半导体MCU双供应链策略,打消中国客户后顾之忧
【经验分享】基于STM32使用HAL库实现USB组合设备CDC+MSC
2024意法半导体工业峰会:赋能智能电源和智能工业,构筑可持续未来
ST推出灵活、面向未来的智能电表通信解决方案,助力能源转型
意法半导体 x Qu-Bit Electronix:推动新一轮的数字声音合成革命