【学习笔记】stm32单片机BKP，RTC，PWR

这几天学了 stm32 的 BKP，RTC 和 PWR，单片机学习基本进入尾声了，后面只剩下个看门狗还有个 flash 了。
那么开始今天的学习笔记。

（一）PWR

我们先讲 PWR，因为后面的 BKP 和 RTC 都要开启 PWR 时钟，调用一些 PWR 功能。
什么是 PWR 呢？
PWR 就是电源控制（Power Control），负责管理 STM32 内部的电源供电部分，可以实现可编程电压监测器和低功耗模式的功能，可编程电压监测器（PVD）可以监控 VDD 电源电压，当 VDD 下降到 PVD 阀值以下或上升到 PVD 阀值之上时，PVD 会触发中断，用于执行紧急关闭任务。（PVD 功能还没用过）
低功耗模式包括睡眠模式（Sleep）、停机模式（Stop）和待机模式（Standby），可在系统空闲时，降低 STM32 的功耗，延长设备使用时间。
其配置过程如下：

标准库里的 PWR 函数功能已经相当完整，操作起来简直不要太简单。
只需要先启动 PWR 时钟（睡眠模式甚至不需要启动时钟）：
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);

然后我们调用如下函数进入相应的模式：
睡眠模式：__WFI();
停止模式：PWR_EnterSTOPMode();
待机模式：PWR_EnterSTANDBYMode();

需要注意的是进入低功耗模式后不能直接烧录程序，需要按住复位键再烧录程序并及时松开复位键。

（二）BKP

江科大视频里提到过 TAMPER，但我们写代码的时候没用过，这里不讨论，我们只需要写 BKP 的储存并且掉电不丢失就可以了。

这里是 BKP 的结构：

VBAT 就是备用电源引脚，BKP 的掉电不丢失就是因为这个引脚供电。

代码如下：

RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);

开启时钟

PWR_BackupAccessCmd(ENABLE);

开启备用电源

BKP_WriteBackupRegister();

写入

BKP_ReadBackupRegister();

读出

（三）RTC

使用 RTC 我们需要先理解 Unix 时间戳，还要学一些 <time.h> 的函数。

理解这些之后我们再来看 RTC

RTC 结构如下：

这里注意时钟源，一般选 LSE 外部低速时钟，32.768kHz 的晶振，不过这玩意可能会不起振动（经常可能），我配置的时候用的 LSI，晶振频率 40kHz。
还有，RTC 时钟配置需要注意一下几点：

下面是配置代码，顺便完成了时间戳的转换：

那么这些就是 BKP，RTC，PWR 的全部内容，润了润了（越写越懒了，悲）。