STMCU小助手
发布时间:2022-2-21 20:13
|
一. 应用背景 当客户遇到存储小量的数据,同时数据写的频率比较低的情况下。从成本角度希望省掉外置 EEPROM,STM32 提供了 Backup SRAM(4K)和 Flash 模拟 EEPROM 两种方案来解决该问题。但是,BackupSRAM 需要提供备用电源,Flash 模拟 EEPROM 又比较浪费空间(存放复杂的结构体数据也不方便)。如果数据擦鞋频率较低(Flash 擦写次数有限),可以考虑直接将数据存放在 Flash 中。本文提供了如何在 IAR6.5 实现该操作。 x! I& \. F3 F3 `; v2 p 二. IAR 下的实现 1. icf 文件的配置 在 IAR 的 linker,config file editer 中设置中断向量表位置保持不变 0x0800 0000,代码的存放地址设置为 0x0800 8000 ~ 0x080F FFFF。我们将数据保存在 0x0800 4000 ~ 0x0800 7FFF 中。, m+ J0 W0 O) ~& z
; a: ^/ i8 _/ M0 [4 |% D 同时在.icf 文件中做添加脚本:6 X" B, X# b. }* T9 I% y" o define symbol __ICFEDIT_region_DATAROM_start__ = 0x0800 4000;6 {% x9 d* E# f! @! c1 X& i7 H define symbol __ICFEDIT_region_DATAROM_end__ = 0x0800 7FFF;5 r$ B1 v# A9 e; @ define region DATA_region = mem:[from __ICFEDIT_region_DATAROM_start__ to- `6 A9 ?, m! t m7 m Z& T __ICFEDIT_region_DATAROM_end__]; place in DATA_region { readonly section .rom_data }; 6 p# Q. c {# S0 H) f1 F* P 2. 预编译的处理- A. H {9 B0 d# c0 y #define DATA_ROM _Pragma("location=\".rom_data\"")4 E8 Z1 L" U5 D! Q1 v' c DATA_ROM const uint32_t test_data[] = {32,33,34}; DATA_ROM const uint32_t test_data2[] = {33,33,34}; 编译后的.map 文件中
可以看到 test_data 已经放在了我们希望存储的地址。' V; y# T8 w/ b# s' D+ S 用户可以通过调用标准外设库提供的 flash 函数对该数据进行修改。2 p8 C9 s, {% d; t& x |
【经验分享】STM32语音识别的智能蓝牙音箱(源程序+原理图+PCB+设计说明书+PPT)
想找个ST芯片
[GPIO] 使用新型抽象开始C++嵌入式编程,从GPIO开始
技术手册stm32f1xx中的一个小问题
【经验分享】STM32 HAL库移植FreeModbus详细步骤
【逢7发帖赢大礼】STM32开发之IC门禁卡UID读取方法!
实战经验 | Keil工程使用NEAI库的异常问题
经验分享 | FDCAN数据段波特率增加后发送失败的问题分析
STM32几种流行开发环境的优缺点
好用软件推荐-TouchGFX Designer
微信公众号
手机版