ashwatermelon

ashwatermelon

【学习笔记】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 的功耗,延长设备使用时间。
其配置过程如下:

image

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

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

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

(二)BKP#

image

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

这里是 BKP 的结构:

image

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> 的函数。

image

image

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

image

RTC 结构如下:

image

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

image

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

image

image

那么这些就是 BKP,RTC,PWR 的全部内容,润了润了(越写越懒了,悲)。

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。