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率先消失,其他字符接着消失,此时显示屏无内容。则实验成功。

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

相关推荐
Miuney_MAX16 小时前
【单片机】之HC32F460中断向量选择
单片机·嵌入式硬件
XINVRY-FPGA19 小时前
XC3S1000-4FGG320I Xilinx AMD Spartan-3 SRAM-based FPGA
嵌入式硬件·机器学习·计算机视觉·fpga开发·硬件工程·dsp开发·fpga
猫猫的小茶馆21 小时前
【ARM】ARM的介绍
c语言·开发语言·arm开发·stm32·单片机·嵌入式硬件·物联网
猫猫的小茶馆21 小时前
【PCB工艺】数模电及射频电路基础
驱动开发·stm32·单片机·嵌入式硬件·mcu·物联网·pcb工艺
点灯小铭21 小时前
基于单片机的智能药物盒设计与实现
数据库·单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
梓德原1 天前
【基础】详细分析带隙型稳压电路的工作原理
单片机·嵌入式硬件·物联网
国科安芯1 天前
航天医疗领域AS32S601芯片的性能分析与适配性探讨
大数据·网络·人工智能·单片机·嵌入式硬件·fpga开发·性能优化
小李做物联网1 天前
【物联网毕业设计】60.1基于单片机物联网嵌入式项目程序开发之图像厨房监测系统
stm32·单片机·嵌入式硬件·物联网
贝塔实验室1 天前
新手如何使用Altium Designer创建第一张原理图(三)
arm开发·单片机·嵌入式硬件·fpga开发·射频工程·基带工程·嵌入式实时数据库
@good_good_study1 天前
STM32 ADC多通道采样实验
stm32·单片机·嵌入式硬件