首页 > 其他分享 >【STM32】BKP备份寄存器&RTC实时时钟&PWR电源控制

【STM32】BKP备份寄存器&RTC实时时钟&PWR电源控制

时间:2024-11-19 16:19:23浏览次数:3  
标签:PWR RTC void 模式 STM32 BKP 寄存器 时钟

文章目录

BKP备份寄存器

对应 STM32F10xxx参考手册 中的第五章

BKP简介

  • BKP(Backup Registers)备份寄存器

  • BKP处于后备区域,可用于存储用户应用程序数据,当VDD(2.03.6V)电源被切断,他们仍然由VBAT(板子上的纽扣电池,1.83.6V)维持供电,当系统在待机模式下被唤醒,或系统复位或电源复位时,他们也不会被复位

  • TAMPER引脚产生的侵入事件将所有备份寄存器内容清除

    BKP内保存的数据可以被毁灭(如果有人希望恶意得到这些数据的话,令其丢失比保护数据更重要),TAMPER机制就可以实现备份寄存器内容清除,中文译为“侵入检测”,这需要占用一个外部引脚(PC13)

  • 如果不用侵入检测功能,那么这个外部引脚可以用作RTC引脚,用于输出RTC校准时钟、RTC闹钟脉冲或者秒脉冲

  • BKP中用户数据存储容量: 20字节(中容量和小容量)/ 84字节(大容量和互联型)

BKP的基本结构

在这里插入图片描述

BKP库函数

void BKP_DeInit(void);
// //恢复缺省配置手动清空BKP所有的数据寄存器

void BKP_TamperPinLevelConfig(uint16_t BKP_TamperPinLevel);
//配置tamper引脚的有效电平是高电平触发还是低电平触发

void BKP_TamperPinCmd(FunctionalState NewState);
//是否需要开启侵入检测功能

void BKP_ITConfig(FunctionalState NewState);
//是否开启中断

void BKP_RTCOutputConfig(uint16_t BKP_RTCOutputSource);
//时钟输出功能的配置,可以选择在RTC引脚上输出时钟信号,输出RTC校准时钟,RTC闹钟脉冲或者秒脉冲

void BKP_SetRTCCalibrationValue(uint8_t CalibrationValue);
//设置RTC校准值,就是写入RTC校准寄存器

⭐ void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data);
//写备份寄存器,第一个参数指定要写入那个寄存器,第二个参数就是要写入的数据

⭐ uint16_t BKP_ReadBackupRegister(uint16_t BKP_DR);
//读取指定的备用数据寄存器的值,备用寄存器通常用于保存一些需要在设备断电后保持的持久数据(如日期、时间等),这些数据在断电重启后仍然有效

FlagStatus BKP_GetFlagStatus(void);
//检查与备用寄存器相关的标志位状态,通常是一个指示某种事件(如备用寄存器值的变化)的标志
//返回值为 SET(表示标志被设置,可能指示某个事件或条件已经发生)或者 RESET(表示标志未被设置,条件未发生)

void BKP_ClearFlag(void);
//清除备用寄存器相关的标志位。通常在某个事件发生后,用户需要清除标志位,以便下一次事件能够正常检测到

ITStatus BKP_GetITStatus(void);
//获取备用寄存器的中断状态,判断是否有中断事件发生

void BKP_ClearITPendingBit(void);
//清除备用寄存器相关的中断挂起标志。这通常用于处理中断事件,在中断处理完成后清除挂起的标志,防止中断再次触发

RTC实时时钟

RTC简介

  • **RTC (Real Time Clock)**实时时钟
  • RTC是一个独立的定时器,可为系统提供时钟和日历的功能
  • RTC和时钟配置系统处于后备区域,系统复位时数据不清零,VDD(2.03.6V)断电后可借助VBAT(1.83.6V)供电继续走时

RTC框图

在这里插入图片描述

【分析】

  • 32位的可编程计数器,可对应Unix时间戳的秒计数器
  • 20位的可编程预分频器,可适配不同频率的输入时钟
  • 可选择三种RTC时钟源:
    1. HSE时钟除以128(通常为8MHz/128)
    2. LSE振荡器时钟(通常为32.768KHz)
    3. LSI振荡器时钟(40KHz)

RTC基本结构

在这里插入图片描述

RTC操作注意事项

  • 执行以下操作将使能对BKP和RTC的访问:
    • 设置 RCC_APB1ENR 的 PWREN 和 BKPEN,使能 PWR 和 BKP 时钟
    • 设置 PWR_CR 的 DBP,使能对 BKP 和 RTC 的访问
  • 若在读取 RTC 寄存器时,RTC 的 APB1 接口曾经处于禁止状态,则软件首先必须等待 RTC_CRL 寄存器中的 RSF 位(寄存器同步标志)被硬件置 1
  • 必须设置 RTC_CRL 寄存器中的 CNF 位,使 RTC 进入配置模式后,才能写入 RTC_PRL、RTC_CNT、RTC_ALR 寄存器
  • 对 RTC 任何寄存器的写操作,都必须在前一次写操作结束后进行。可以通过查询 RTC_CR 寄存器中的 RTOFF 状态位,判断 RTC 寄存器是否处于更新中。仅当RTOFF状态位是1时,才可以写入RTC寄存器

RTC库函数

void RTC_ITConfig(uint16_t RTC_IT, FunctionalState NewState);
/** 配置 RTC 中断的启用或禁用
	参数说明:
		RTC_IT:指定要配置的 RTC 中断类型
		NewState:指定中断的启用状态,可以是 ENABLE 或 DISABLE
*/

void RTC_EnterConfigMode(void);
/**	进入 RTC 配置模式
	说明:RTC 在进行一些配置更改时,需要进入配置模式。进入配置模式后,RTC 的时钟源、分频器、计数器等参数可以被修改
	注意:进入配置模式时,RTC 会停止计时,因此需要确保在修改配置前不影响正在进行的时间计数
*/

void RTC_ExitConfigMode(void);
//退出 RTC 配置模式

uint32_t  RTC_GetCounter(void);
//获取 RTC 的当前计数器值(即当前的时间戳)

void RTC_SetCounter(uint32_t CounterValue);
//设置 RTC 计数器的值(即设置当前时间戳)

void RTC_SetPrescaler(uint32_t PrescalerValue);
//设置 RTC 的预分频器值

void RTC_SetAlarm(uint32_t AlarmValue);
//设置 RTC 的闹钟值(即触发报警闹钟的时间)

uint32_t  RTC_GetDivider(void);
//获取 RTC 的分频器的当前设置值

void RTC_WaitForLastTask(void);
//等待 RTC 的最后一项任务完成

void RTC_WaitForSynchro(void);
//等待 RTC 时钟同步

FlagStatus RTC_GetFlagStatus(uint16_t RTC_FLAG);
//获取 RTC 的标志状态

void RTC_ClearFlag(uint16_t RTC_FLAG);
//清除 RTC 的指定标志

ITStatus RTC_GetITStatus(uint16_t RTC_IT);
//获取 RTC 中断状态

void RTC_ClearITPendingBit(uint16_t RTC_IT);
//清除 RTC 中断挂起标志

PWR电源控制

PWR简介

  • PWR(Power Control)电源控制
  • PWR负责管理STM32内部的电源供电部分,可以实现可编程电压监测器和低功耗模式的功能
  • 可编程电压监测器(PVD)可以监控VDD电源电压,当VDD下降到PVD阀值以下或上升到PVD阀值之上时,PVD会触发中断,用于执行紧急关闭任务
  • 三种低功耗模式⭐ :睡眠模式(Sleep)、停机模式(Stop)和待机模式(Standby),可在系统空闲时,降低STM32的功耗,延长设备使用时间

STM32内部供电方案

在这里插入图片描述

低功耗模式

在这里插入图片描述

模式选择

执行 WFI(Wait For Interrupt)或者 WFE(Wait For Event)指令后,STM32进入低功耗模式

在这里插入图片描述

  • 睡眠模式

    • 执行完 WFI/WFE 指令后,STM32 进入睡眠模式,程序暂停运行,唤醒后程序从暂停的地方继续运行

    • SLEEPONEXIT 位决定 STM32 执行完 WFI 或 WFE 后,是立刻进入睡眠,还是等 STM32 从最低优先级的中断处理程序中退出时进入睡眠

    • 在睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态

    • WFI指令进入睡眠模式,可被任意一个NVIC响应的中断唤醒

    • WFE指令进入睡眠模式,可被唤醒事件唤醒

  • 停机模式

    • 执行完 WFI/WFE 指令后,STM32 进入停止模式,程序暂停运行,唤醒后程序从暂停的地方继续运行
    • 1.8V 供电区域的所有时钟都被停止,PLL、HSI 和 HSE 被禁止,SRAM 和寄存器内容被保留下来
    • 在停止模式下,所有的 I/O 引脚都保持它们在运行模式时的状态
    • 当一个中断或唤醒事件导致退出停止模式时,HSI 被选为系统时钟
    • 当电压调节器处于低功耗模式下,系统从停止模式退出时,会有一段额外的启动延时
    • WFI 指令进入停止模式,可被任意一个 EXTI 中断唤醒
    • WFE 指令进入停止模式,可被任意一个 EXTI 事件唤醒
  • 待机模式

    • 执行完 WFI/WFE 指令后,STM32 进入待机模式,唤醒后程序从头开始运行
    • 整个1.8V 供电区域被断电,PLL、HSI 和 HSE也被断电,SRAM 和寄存器内容丢失,只有备份的寄存器和待机电路维持供电
    • 在待机模式下,所有的I/O引脚变为高阻态(浮空输入)
    • WKUP 引脚的上升沿、RTC 闹钟事件的上升沿、NRST 引脚上外部复位、IWDG 复位退出待机模式

STM32 专栏文章均参考 《STM32入门教程-2023版 细致讲解 中文字幕》教程视频

标签:PWR,RTC,void,模式,STM32,BKP,寄存器,时钟
From: https://blog.csdn.net/m0_74209563/article/details/143888617

相关文章

  • 使用WebRTC技术搭建小型的视频聊天页面
    目录目录参考资料什么是WebRTC?能做什么?架构图个人理解(类比)核心知识点核心知识点类比ICE框架STUN(协议)NAT(网络地址转换)TURNSDP(会话描述协议)WebRTC的核心API现在开始做饭准备阶段环境准备服务器搭建CoturnTURNserver(开源服务)部署SignalSer......
  • 基于STM32的四轴无人机项目
    无人机1.项目概述1.1简介本项目是基于STM32的微型四轴无人机,控制核心采用STM32F103C8T6,姿态运动传感器选择MPU6050。无人机通过Si24R1(NRF24L01)与控制器进行2.4G无线通信,实现了即时有效地接收控制器指令,通过串级PID进行姿态控制,从而在空间中实现自由移动。1.2功能描述......
  • MFC CChartCtrl 滚轮缩放
    原文来自:MFC그래프라이브러리,ChartCtrl마우스휠기능추가BOOLCChartCtrl::OnMouseWheel(UINTnFlags,shortzDelta,CPointpt){ScreenToClient(&pt);doubleMinVal=0;doubleMaxVal=0;doublerate=0.1;if(m_bZoomEnabled){......
  • STM32微控制器GPIO库函数
    STM32微控制器GPIO库函数目录概述GPIO库函数基础HAL库与标准外设库GPIO库函数分类GPIO数学基础电阻分压公式输入电流计算输出驱动能力功率计算RC时间常数GPIO应用实例LED控制按钮输入与中断串行通信PWM信号生成常见问题与解决方法GPIO引脚无法正确读取输入状......
  • aiortc && WebSocket and django-channels
    aiortchttps://github.com/aiortc/aiortc/tree/mainWebRTCandORTCimplementationforPythonusingasyncioWhatisaiortc?aiortcisalibraryforWebReal-TimeCommunication(WebRTC)andObjectReal-TimeCommunication(ORTC)inPython.Itisbuilton......
  • STM32移植u8g2图形库
    1.从GitHub上下载源代码,https://github.com/olikraus/u8g22.复制csrc文件夹(这是u8g2库在C语言环境下的源文件)到工程文件中,在所有的驱动文件(即u8x8_d_开头的文件)中只保留u8x8_d_ssd1306_128x64_noname.c(这是与以ssd1306为驱动芯片的0.96/1.3寸OLED屏幕进行通讯的实现函数),然后将......
  • STM32F103开发
    本节我们将会对STM32的硬件资源进行介绍,包括如下内容:点亮LED;检测按键按下和松开事件;串口;点亮128*128TFT_LCD液晶屏;一、点亮LED1.1电路原理图LED电路原理图如下图所示:其中:LED1连接到PA8`引脚,低电平点亮;LED2连接到PD2引脚,低电平点亮;1.2GPIO引脚介绍STM32F103RTC......
  • 【课程设计】单片机课程设计之基于STM32的LCD电子钟的设计(LVGL+TFT彩屏)
    零.前置说明 由于本项目使用了LVGL开源框架,建议至少了解一点LVGL,可看前置文章:【LVGL快速入门(一)】LVGL开源框架入门教程之框架移植_lvgl教程-CSDN博客【LVGL快速入门(二)】LVGL开源框架入门教程之框架使用(UI界面设计)_lvgl框架详解-CSDN博客【LVGL速成】LVGL修改标签文......
  • STM32F103简介
    自从大学毕业之后,已经很久没有接触STM32控制器了,最近打算学习一下LVGL,控制芯片计划使用STM32,因此这里我们会简单介绍有关STM32的知识。一、STM32F103RTC6介绍1.1命名规则我从网上买了一块STM32F103RTC6开发板,STM32F103RCT6各个字段的含义:STM32(芯片系列):STM32代表ARMCortex-......
  • STM32F407使用LVGL之字库IC
    LVGL使用字库IC-基于STM32F407在上一篇笔记中,记录了所以用STM32F407移植LVGL。其中提到了中文显示,使用的是字库IC。相比于大多数使用的数组字库方式,使用字库IC编译后占用更小的存储空间,可以解码并显示更多的汉字,能够支持更多的字体大小等。字库IC读取字形数据根据自己所使用......