本帖最后由 Alden 于 2025-3-24 16:04 编辑
#技术资源#
APM32F407的RAM分系统192KB+备份4KB
就研究了下备份SRAM该怎么使用
一、备份SRAM的作用数据保持
备份SRAM由VBAT引脚供电,即使主电源(VDD)断开,只要VBAT(备用电池)存在,数据仍可保留。 - 典型场景:系统掉电、待机模式(Standby Mode)或复位时保存关键数据。
低功耗特性
在低功耗模式下(如Standby模式),备份SRAM可通过VBAT保持数据,同时主SRAM会被断电。 独立访问
备份SRAM与主SRAM分离,不受内核复位或系统复位的影响,数据更安全。
二、应用场景关键数据存储 - 系统配置参数(如校准数据、用户设置)
- 运行日志或错误记录(需掉电不丢失)
- 实时时钟(RTC)相关数据(配合RTC模块使用)
低功耗模式 - 在Standby或Stop模式下保存临时数据,唤醒后快速恢复。
容错系统 - 作为故障恢复时的数据备份,例如看门狗复位后恢复现场。
三、使用方法步骤1:硬件准备- 确保VBAT引脚连接备用电池(如纽扣电池),否则备份SRAM在VDD掉电后会丢失数据。
步骤2:使能备份域访问
PMU_EnableBackupAccess();
步骤3:初始化备份SRAM时钟 RCM_EnableAHB1PeriphClock(RCM_AHB1_PERIPH_BKPSRAM);
步骤4:数据读写在头文件中已经有了备份RAM的地址定义
// 定义备份SRAM基地址(固定为0x40024000)#define BKPSRAM_BASE 0x40024000
// 写入数据
*(__IO uint32_t*)(BKPSRAM_BASE + 0x00) = 0x12345678;
// 读取数据
uint32_t data = *(__IO uint32_t*)(BKPSRAM_BASE + 0x00);
在SDK的RTC_Alarm例程中增加备份RAM的使用进行测试。
uint32_t data ;
int main(void)
{
USART_Config_T usartConfigStruct;
usartConfigStruct.baudRate = 115200;
usartConfigStruct.hardwareFlow = USART_HARDWARE_FLOW_NONE;
usartConfigStruct.mode = USART_MODE_TX;
usartConfigStruct.parity = USART_PARITY_NONE;
usartConfigStruct.stopBits = USART_STOP_BIT_1;
usartConfigStruct.wordLength = USART_WORD_LEN_8B;
APM_COMInit(COM1, &usartConfigStruct);
APM_LEDInit(LED2);
APM_LEDInit(LED3);
APM_LEDOff(LED2);
APM_LEDOff(LED3);
RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_PMU);
/* Allow access to RTC */
PMU_EnableBackupAccess();
RCM_EnableAHB1PeriphClock(RCM_AHB1_PERIPH_BKPSRAM);
/* Enable the LSI OSC */
RCM_EnableLSI();
/* Reset RTC*/
RTC_Reset();
/* Config RTC */
RTC_Init();
/* Config Alarm */
RTC_AlarmsConfig();
*(__IO uint32_t*)(BKPSRAM_BASE + 0x00) = 0x12345678;
printf("Please wait 5 seconds\r\n");
Delay(10000);
/* Alarm Enable */
RTC_EnableAlarmA();
APM_LEDOn(LED2);
/* wait until time out */
while(RTC_ReadStatusFlag(RTC_FLAG_ALRAF)==RESET);
printf("Time out\r\n");
data = *(__IO uint32_t*)(BKPSRAM_BASE + 0x00);
printf("data=%x\r\n",data);
APM_LEDOff(LED2);
while(1)
{
APM_LEDToggle(LED3);
Delay(0x4FFFFF);
}
}
测试结果:
四、注意事项供电要求 - 必须为VBAT提供备用电源,否则备份SRAM无法保持数据。
访问权限 - 每次复位后需重新调用 PMU_EnableBackupAccess();才能修改备份域内容。
内存范围 - STM32F407的备份SRAM大小为4KB,地址范围:0x40024000 ~ 0x40024FFF。
数据校验
五、扩展应用- 与RTC配合:将RTC的闹钟时间、计数器等数据存入备份SRAM。
- 快速启动:在Standby模式下保存上下文,缩短唤醒后的初始化时间。
通过合理利用备份SRAM,可显著提升系统的可靠性和低功耗性能。
|