STM32模块:022 PWR电源控制

PWR介绍

PWR简介

将system文件中的该部分中对应主频解除注释,即可配置系统主频。当前主频为36MHZ.

处于3种低功耗模式下系统无法烧录程序,可长按复位键时下载。

电源框图

Vref+和Vref-为AD转换器参考供电,引脚少时与ADDA和ASSA连接。

RCC BDCR为RCC的寄存器,即备份域控制寄存器。

低电压检测器可选择后备供电区域的电源来源。

PWR功能

1.可编程电压检测器

1)上电复位和掉电复位&可编程电压检测器介绍

PVD的上下限电压可通过程序设置,2图中的具体数值可参考参考手册5.3.3。

PVD电压比上电掉电复位电压高,当电压从3.3v降低时先达到PVD检测阈值,可通过PVD设置警告,此时电压再降才进入复位电压值。

4种使用外部中断不一定代表其没有自己的中断,仅仅因为外部中断可唤醒停止状态下的设备。PVD可申请中断,其中断通过外部中断实现。而RTC不仅有自己的中断,也可使用外部中断,用于唤醒停止模式设备,RTC闹钟事件可唤醒待机模式。USB和ETH也只能通过WeakUp引脚触发外部中断才能唤醒停止模式。

2.低功耗模式

1)低功耗模式简介

中断唤醒(触发中断并进入中断函数):中断唤醒设备时,本应从进入睡眠的地方开始执行,但此时触发了中断,使用设备第一时间处理中断函数,再从睡眠地方开始执行,直至处理到睡眠函数再次睡眠(待机模式执行完中断从头开始执行)。

事件唤醒(触发中断不进入中断函数,或硬件电路产生事件):触发方法1.将外部中断配置为事件模式 。 方法2.使能中断,配置为中断模式,但不配置NVIC。通过该唤醒事件唤醒设备时,不进入中断函数,从睡的地方部分继续执行,直至下一个睡眠函数(待机模式从头开始执行)。

关闭电路降低功耗的两种方式:1.关闭时钟(图4,5列) 2.关闭电源(图6列),关闭时钟所有运算和设计时序的操作停止,关闭电源不仅关闭时钟同时还会失去寄存器和存储器里的数据,因此关闭电源更省电。

停机模式和待机模式中LSI和LSE并没有停止运行,因此RTC和看门狗可以运行。电压调节器低功耗模式副影响是延长停机模式的唤醒时间。

睡眠和停止模式仅关闭时钟,对VDD中的IO无影响,待机模式下关闭了电源,使得IO外部中断无法唤醒睡眠,同时IO不能维持睡眠前电平,而是变成了高阻态。

2)模式选择

所有配置指令都需在WFI/WFE指令之前。SLEEPONEXIT=1时,若在中断里写WIF/WFE,则系统会执行完中断进入睡眠模式,只要不在中断里设置睡眠模式,则SLEEPONEXIT的2个值功能效果相同。

3)模式特性
(1).睡眠模式
(2).停止模式

停止模式唤醒时,默认HSI为系统时钟,此时要手动重新启动HSE和PLL,配置主频为72MHZ。

(3).待机模式
4)各模式耗电情况

由图可知,若正常运行能维持10小时,停机模式能维持约1w小时,待机模式能维持10w小时。图中也表明备份区域的供应电流极低,不用担心备用电池电量耗尽。

PWR寄存器

PWR函数介绍

System_stm32f10x.c/h文件介绍

**文件作用:**用于配置系统时钟,即配置RCC时钟树,其中i2s的时钟直接来源于sysclk,USB的时钟直接来源于PLL。其中系统默认配置为外部晶振8Mhz,系统主频72Mhz,AHB,APB2为72Mhz,APB1为36Mhz。

文件功能:提供两个外部可调用函数和一个外部可调用的变量。即

SystemInit用于配置时钟树,在系统复位后main函数执行前自动调用,

SystemCoreClock为主频的值。若在初始化后更改主频,则需手动更新SystemCoreClock值。

SystemCoreClockUpdate用于更新SystemCoreClock,SystemCoreClock,只能反映初始化时的主频值,当改变主频值时,SystemCoreClock不会同步更新,需调用SystemCoreClockUpdate函数手动更新。

通过更改宏定义的注释,更改主频。#if为预编译,兼容不同型号设备。 VL为超值系列,只有两种主频配置。若该文件为只读无法更改,可右键文件------>属性,取消勾选只读即可。

SystemInit

第一步开启HSI,第二步恢复各种参数的缺省配置,第三步调用SetSysClock函数,该函数为分配函数,根据不同宏定义选择不同的配置函数。 第四步执行配置函数,如配置72Mhz时的SetSysClockTo72函数,该函数先使能HSE,然后循环等待HSE使能结果,若成功则继续配置HCLK(AHB时钟),PCLK2(APB2时钟),PCLK1(APB1时钟)分频器, 默认为1,1,2,再然后配置锁相环PLL,接着选择锁相环作为系统时钟,最后等待锁相环成为系统时钟。

实验模块

实验一:修改主频

1)接线图
2)代码
3)更改主频
4)实验现象

修改主频后,Running显示时间和消失时间都变为了原来的2倍,即1秒,则实验成功。

实验二:睡眠模式+串口发送和接收

当程序只需发生中断的时候工作(进入中断函数并执行有限次数的主函数和其中的while函数),其他时候不工作时,可考虑使用低功耗模式,否则while会不断循环执行不需要重复执行的任务,造成更多不必要的耗电。

1)接线图
2)代码

注:__WFI对应cpu的睡眠汇编指令

3)实验现象

使用串口助手发送数据时,Running显示,随后消失,则实验成功。睡眠模式进入时引脚电平无变化,所以RxData常亮。

实验三:停止模式+对射式红外传感器计次

EXTI不需要使用也无需开启时钟,因此在关闭所有外设时钟的停止模式下依旧可以被使用。

1)接线图
2)代码

停止模式和待机模式与睡眠模式不同,需要PWR的参与,因此需要开启PWR时钟。

配置各种寄存器和调用指令都在最后一个开启函数中,因此只需调用该函数即可,下图为开启函数的内部结构。

3)实验现象

每次遮挡传感器时闪烁Running,同时计数值+1,则实验成功。

4)恢复时钟

复位时Running闪烁较快,因为此时时钟为72Mhz,遮挡闪烁较慢,因为进入停止模式再退出时默认时钟变为HSI,为8Mhz。在启动函数后增加时钟配置函数即可。

实验四:待机模式+实时时钟

第一步:设置RTC闹钟 第二步:进入待机模式 第三步:使用闹钟信号,唤醒待机模式。

待机模式没有区分WFI和WFE,因为其唤醒方式已经指定为4种确定信号。调用WFI进入待机即可。

使用wakeup引脚无需初始化GPIO和其时钟,因为使能WAKEUP引脚后,其被强置为输入下拉模式。

待机模式由于没有保存寄存器和各参数的值,退出时会从头开始执行,因此无需像停止模式一样重新写入SystemInit函数。并且待机模式的启动函数之后的代码永远无法执行。

寄存器下方可显示其读写特性,如:

只写

读写

由于闹钟函数配置的闹钟寄存器为只写函数,因此无法读取其的值,因此最好定义变量,在写入前先保存其值到变量中。

1)接线图
2)代码
3)实验现象

每过10s闹钟触发或wakeup引脚接入高电平,显示屏显示图中内容,随后Running率先消失,其他字符接着消失,此时显示屏无内容。则实验成功。

(知识自学习专题,课程资料来源于江协科技)

相关推荐
丁满与彭彭4 小时前
嵌入式学习笔记-MCU阶段-DAY01
笔记·单片机·学习
海海不掉头发5 小时前
【计算机组成原理】-CPU章节学习篇—笔记随笔
笔记·单片机·学习·考研·计算机组成原理
趣多多代言人5 小时前
从零开始手写嵌入式实时操作系统
开发语言·arm开发·单片机·嵌入式硬件·面试·职场和发展·嵌入式
h137286978696 小时前
Type-C PD快充协议智能芯片S312L详解
嵌入式硬件
不想学习\??!8 小时前
STM32-外部中断
stm32·单片机·嵌入式硬件
不想学习\??!8 小时前
STM32-定时器
stm32·单片机·嵌入式硬件
LIN-JUN-WEI8 小时前
[ESP32]VSCODE+ESP-IDF环境搭建及blink例程尝试(win10 win11均配置成功)
c语言·开发语言·ide·vscode·单片机·学习·编辑器
LS_learner9 小时前
嵌入式系统中实现串口重定向
嵌入式硬件
景彡先生10 小时前
STM32中SPI协议详解
stm32·单片机·嵌入式硬件