一、备份SRAM地址域
地址映射:0x38800000 - 0x38800FFF
二、使用初始化
使用备份SRAM前,需要最如下初始化:
#if (0U != BACKUP_SRAM_PWRER_BAT_ENABLE)
/* 备份RAM 电源使能 */
HAL_PWR_EnableBkUpReg();
#else
/* 备份RAM 电源使能 */
HAL_PWR_DisableBkUpReg();
#endif
/* 使能备份RAM 时钟 */
__HAL_RCC_BKPRAM_CLK_ENABLE();
/* 使能对备份RAM的访问权限 */
HAL_PWR_EnableBkUpAccess();
关于宏 BACKUP_SRAM_PWRER_BAT_ENABLE 含义:在Vbat有接入的前提,使能 :VDD 失电后,备份 RAM 能够保存掉电前的数据; 未使能 : 备份 RAM 无法保存掉电前的数据
手册中相关寄存器描述:
PWR 控制寄存器 1 (PWR_CR1)
位 8 DBP:禁止备份域写保护 (Disable backup domain write protection)
在复位状态下,RCC_BDCR 寄存器、RTC 寄存器(包括备份寄存器)以及 PWR_CR2 寄
存器的 BREN 和 MOEN 位均受到写访问保护。必须将此位置 1 才能使能对这些寄存器的写
访问。
0:禁止对 RTC、RTC 备份寄存器和备份 SRAM 的访问
1:使能对 RTC、RTC 备份寄存器和备份 SRAM 的访问
RCC AHB4 时钟寄存器 (RCC_AHB4ENR)
位 28 BKPRAMEN:备份 RAM 时钟使能 (Backup RAM Clock Enable)
由软件置 1 和复位。
0:禁止备份 RAM 时钟(复位后的默认值)
1:使能备份 RAM 时钟。
三、读、写备份SRAM
void bsp_backup_sram_write(uint32_t addr, uint32_t data)
{
/* 检查备份RAM地址是否合法 */
if ((addr >= BACKUP_SRAM_BASE_ADDRESS) && (addr <= BACKUP_SRAM_END_ADDRESS))
{
*(__IO uint32_t *)addr = data;
}
}
uint32_t bsp_backup_sram_read(uint32_t addr)
{
uint32_t data = 0;
/* 检查备份RAM地址是否合法 */
if ((addr >= BACKUP_SRAM_BASE_ADDRESS) && (addr <= BACKUP_SRAM_END_ADDRESS))
{
data = *(__IO uint32_t *)addr;
}
return data;
}
我这边是4字节读写,根据手册描述,最小支持单字节读写。
四、其他
关于备份SRAM,手册中还有<读保护>、<侵入事件>等等描述,后续整理输出。