经验分享 · 2023年4月4日

STM32L4不初始化RTC访问BKP的可能性及方法

在使用HAL库+CubeMX生成的程序中,要实现如下功能:将系统的当前状态实时保存到BKP寄存器,若出现看门狗复位,自动从BKP加载当前状态并恢复。思路和方法都没有什么问题,就是发现每次看门狗重启的时间非常长,经过调试发现HAL_RTC_Init函数占用了太多时间,于是寻找不使用此函数即可访问BKP寄存器的方法。值得注意的是,L4系列的BKP寄存器是32位的,共32个,共可存储4*32=128字节数据。

HAL库中的HAL_RTCEx_BKUPWrite、HAL_RTCEx_BKUPRead两个函数,是通过hrtc指针的对象访问的,如 hrtc->Instance->BKP0R,所以要想不初始化RTC,唯一的办法是不使用库函数,直接访问寄存器,以下是测试通过的方法: