本篇博客重点在于标准库函数的理解与使用,搭建一个框架便于快速开发
目录
BKP简介
BKP(Backup Registers)备份寄存器 ,可用于存储用户应用程序数据。
- 当VDD(2.0~3.6V)电源被切断,BKP仍然由VBAT(1.8~3.6V)维持供电。当系统在待机模式下被唤醒,或系统复位或电源复位时,BKP也不会被复位,所有备份寄存器内容不被清除
- BKP控制寄存器还用来管理侵入检测和RTC校准功能。
- TAMPER引脚产生的侵入事件将所有备份寄存器内容清除
- 在PC13(即RTC)引脚上,(当该引脚不用于侵入检测时)可输出RTC校准时钟,RTC闹钟脉冲或者秒脉冲
BKP代码注解
来自参考手册
系统复位后,对后备寄存器和RTC的访问被禁止,这是为了防止对后备区域(BKP)的意外写操作。执行以下操作将使能对后备寄存器和RTC的访问:
● 设置寄存器RCC_APB1ENR的PWREN和BKPEN位,使能电源和后备接口时钟
● 设置电源控制寄存器PWR_CR的DBP位,使能对后备寄存器和RTC的访问
BKP,PWR,RTC均在APB1总线上
由RCC时钟树,需使能APB1总线上BKP,PWR的时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
//使能电源和后备接口时钟
PWR_BackupAccessCmd(ENABLE);
//设置电源控制寄存器PWR_CR的DBP位,使能对后备寄存器和RTC的访问
读写备份寄存器
用户数据存储容量:20字节(中容量和小容量)/ 84字节(大容量和互联型)
//BKP_DRx: x根据容量选择,x:[1, 42]
//BKP_DR为16位数据类型
BKP_WriteBackupRegister(BKP_DR1, 0xA5A5); //写备份寄存器
BKP_ReadBackupRegister(BKP_DR1);//读备份寄存器
复位备份寄存器
BKP_DRx寄存器不会被系统复位、电源复位、从待机模式唤醒所复位。 它们可以由备份域复位来复位或(如果侵入检测引脚TAMPER功能被开启时)由侵入引脚事件复位
当然也可以通过写所有的备份寄存器为0来复位
BKP_DeInit();//备份域复位,复位BKP寄存器,清除备份寄存器数据
BKP代码
main.c
#include "stm32f10x.h" // Device header
#include "OLED.h"
#include "Key.h"
uint8_t KeyNum;
int main(void)
{
OLED_Init();
Key_Init();
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
PWR_BackupAccessCmd(ENABLE);
while(1)
{
KeyNum = Key_Scan();
if( KeyNum == 1)
{
BKP_WriteBackupRegister(