在使用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,唯一的办法是不使用库函数,直接访问寄存器,以下是测试通过的方法:
1 2 3 4 5 6 |
//以下代码向BKP0R读取和写入一个32位整数 SET_BIT(RCC->BDCR, RCC_BDCR_RTCEN); //使能RCC SET_BIT(PWR->CR1, PWR_CR1_DBP); //允许访问BKP RTC->BKP0R = 0x12345678; //写 uint32_t iReg = RTC->BKP0R; //读 CLEAR_BIT(PWR->CR1, PWR_CR1_DBP); //禁止访问BKP |