当前位置:   article > 正文

STM32F103学习笔记(五)BKP备份寄存器(应用篇)

STM32F103学习笔记(五)BKP备份寄存器(应用篇)

目录

1. BKP的应用

2. BKP在系统中的配置

2.1 BKP模块的使能和时钟配置

2.2 备份寄存器的配置

2.3 数据存储和恢复的机制

3. BKP应用实例代码

4. 总结

1. BKP的应用

        在嵌入式系统中,BKP(备份寄存器)是一个重要的功能模块,用于存储关键性的系统数据、状态信息以及实时时钟(RTC)的相关数据。通过BKP模块,我们可以在系统断电或重新启动时保持这些数据的持久性,确保系统在下次启动时能够正确地恢复状态。

注意如果使用的最小系统板的话是没有板载电池的,需要自己接上电池或者VB引脚(最小板已引出)接3.3V供电

如图部分开发版是有电池接口可以接电池的

2. BKP在系统中的配置

2.1 BKP模块的使能和时钟配置

        在开始使用BKP模块之前,需要先使能BKP时钟和模块。这通常涉及到对相应的寄存器进行配置,以确保BKP模块能够正常工作。在STM32F103系列微控制器中,可以通过设置相关的时钟控制寄存器来使能BKP时钟,然后通过设置相应的使能位来使能BKP模块。

2.2 备份寄存器的配置

        BKP模块中的备份寄存器需要根据实际需求进行配置。这包括确定要存储的数据类型、选择备份寄存器的位置、以及设置备份寄存器的初始值等。在配置备份寄存器时,需要考虑数据的重要性、大小和访问频率等因素,以便合理利用有限的备份寄存器资源。

2.3 数据存储和恢复的机制

        在系统设计中,需要明确数据存储和恢复的机制。这涉及到将需要持久保存的数据写入到备份寄存器中的方法,以及在系统重新启动时如何从备份寄存器中读取和恢复数据的方法。在实际应用中,可以采用定时存储、事件触发存储等策略来保证数据的及时更新和完整性。

3. BKP应用实例代码

        首先是BKP的初始化,这里要注意开启PWR的时钟,因为BKP需要外接小电池才能保持备份寄存器的供电,而PWR模块负责监测Vbat的电压        

  1. //备份寄存器初始化
  2. void BKP_Init(void)
  3. {
  4. //备份寄存器通常需要在Vbat电压下工作(Vbat是用于保持备份寄存器内容的电源),而PWR模块负责监测Vbat电压
  5. RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //开启PWR的时钟
  6. RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP, ENABLE); //开启BKP的时钟
  7. PWR_BackupAccessCmd(ENABLE); //用PWR使能备份寄存器
  8. }

        接着就是写数据和读数据了,读写数据使用库函数中提供的BKP_WriteBackupRegister和BKP_ReadBackupRegister函数,注意在stm32f103c8t6中,只有20个字节的后备数据空间,对应10个16位的备份寄存器,因此BKP_DR对应的是BKP_DR1 - BKP_DR10,如果你在c8t6中将数据写入了BKP_DR11,是没有效果的

  1. /*在f103c8t6中,有20个字节的后备数据空间,对应1016位的备份寄存器
  2. BKP_DR对应BKP_DR1 - BKP_DR10
  3. */
  4. uint16_t W_Save_data(uint16_t BKP_DR, uint16_t data)
  5. {
  6. BKP_WriteBackupRegister(BKP_DR, data); //将需要掉电保存的数据写入备份寄存器
  7. if(data == BKP_ReadBackupRegister(BKP_DR)) //读取写入的备份寄存器的数据
  8. {
  9. return 1; //如果正确读取到备份寄存器的数据,返回1
  10. }
  11. else return 0;
  12. }
  13. uint16_t R_Save_data(uint16_t BKP_DR)
  14. {
  15. return BKP_ReadBackupRegister(BKP_DR);
  16. }

接着在主函数中调用初始化函数,通过对备份寄存器的读写操作(代码逻辑自拟哈)即可实现掉电记忆等功能,和普通uint16_t的数组不同的是,BKP备份寄存器掉电和复位是不会清空的 

  1. BKP_Init();
  2. while(W_Save_data(BKP_DR1, data[0]) == RESET); //写入测试数据到备份寄存器
  3. data = R_Save_data(BKP_DR1); //读取备份寄存器的数据

4. 总结

        在BKP篇的博客中,我们探讨了BKP(备份寄存器)模块的原理和应用。首先,我们介绍了BKP模块的基本原理和工作流程,包括其在STM32F103微控制器中的硬件架构和功能特点。在应用实例代码中,我们实现了数据的备份和恢复功能。希望能对项目开发提供参考。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/135744
推荐阅读
相关标签
  

闽ICP备14008679号