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率先消失,其他字符接着消失,此时显示屏无内容。则实验成功。
(知识自学习专题,课程资料来源于江协科技)