STM32单片机入门学习——第44节: [13-1] PWR电源控制
写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做!
本文写于:2025.04.20
STM32开发板学习——第44节: [13-1] PWR电源控制
- 前言
- 开发板说明
- 引用
- 解答和科普
- 一、PWR电源控制实验
- 二、PWR低功耗模式
- 问题
- 总结
前言
本次笔记是用来记录我的学习过程,同时把我需要的困难和思考记下来,有助于我的学习,同时也作为一种习惯,可以督促我学习,是一个激励自己的过程,让我们开始32单片机的学习之路。
欢迎大家给我提意见,能给我的嵌入式之旅提供方向和路线,现在作为小白,我就先学习32单片机了,就跟着B站上的江协科技开始学习了.
在这里会记录下江协科技32单片机开发板的配套视频教程所作的实验和学习笔记内容,因为我之前有一个开发板,我大概率会用我的板子模仿着来做.让我们一起加油!
另外为了增强我的学习效果:每次笔记把我不知道或者问题在后面提出来,再下一篇开头作为解答!
开发板说明
本人采用的是慧净的开发板,因为这个板子是我N年前就买的板子,索性就拿来用了。另外我也购买了江科大的学习套间。
原理图如下
1、开发板原理图
2、STM32F103C6和51对比
3、STM32F103C6核心板
视频中的都用这个开发板来实现,如果有资源就利用起来。另外也计划实现江协科技的套件。
下图是实物图
引用
【STM32入门教程-2023版 细致讲解 中文字幕】
还参考了下图中的书籍:
STM32库开发实战指南:基于STM32F103(第2版)
数据手册
解答和科普
一、PWR电源控制实验
1、 修改主频,显示SystemCoreClock,然后1S为周期显示;现在降频了,所以为2S;
修改主频,在system_stm32f10x.c这个文件,
2、 睡眠模式+串口接收
配置睡眠模式,查询标志位是无意义的耗电操作,不如睡眠,收到数据后,自动退出睡眠模式,执行一遍任务后,继续睡眠。在空闲时,系统一直在睡眠。
芯片在3种低功耗模式(禁用调试端口)下没法直接再下载程序:第一步按住复位键不放;第二步点下载按钮;第三步及时松开复位键。
只有发送时刻显示Running。
3、 停止模式+红外计次
芯片在3种低功耗模式(禁用调试端口)下没法直接再下载程序:第一步按住复位键不放;第二步点下载按钮;第三步及时松开复位键。
每遮挡一次,计次,显示RUNNIN,没有停止模式可以省电;
4、 待机模式+实时时钟
每隔一段时间,自动唤醒一次,唤醒之后,执行一遍程序任务,随后继续待机。使用RTC和闹钟,配合待机模式的自动唤醒程序。适合,需要每隔一段时间操作一次,空闲时间又需要最大化省电的设备。
二、PWR低功耗模式
在空闲模式时,关闭不必要的硬件,直接把CPU断电,或者关闭时钟,这样程序自然不会运行了,但在低功耗模式下,也需要保留必要的唤醒电路。关闭哪些硬件,保留哪些硬件。以及如何去唤醒。
模拟部分供电,叫作VDDA,中间是数字部分供电,包括两块区域,VDD供电区域和1.8V供电区域,下面是后备供电,叫作VBAT。
VDDA供电区域,主要负责模拟部分的供电,其中包括AD转换器,温度传感器、复位模块,PLL锁相环,这些电路的供电正极是VDDA,负极是VSSA,其中AD转换器,还有两根参考电压的供电脚,在本芯片已经接上电源了。
低电压检测器;可以出检测由谁供电。
当ADD或VDDA电压过低时,内部电路直接产生复位,让STM32复位住,不要乱操作,这个复位和不复位的界限之间,设置了40mv的迟滞电压,大于POR时解除复位,小于下限PDR时复位,设置两个阈值的作用,就是防止电压在某个阈值附近波动时,造成输出也来回抖动,下面的复位信号Reset,是低电平有效的,所以在前面和后面,电压过低时,是复位的,还有滞后时间,阈值是多少。
PVD:可编程电压检测器,首先这个阈值电压是可以使用程序指定,可以自定义调节,调节的范围2.2到2.9,还是能工作,该提醒用户,PVD的中断申请,是通过外部中断实现的,如果要使用PVD,需要配置外部中断,还有RTC的闹钟信号,其实RTC字节有内部中断,为啥还要借道外部中断,因为低功耗模式设计的是:只有外部中断可以唤醒停止模式,还有USB和ETH.
低功耗模式:睡眠、停机、待机,从上到下,关闭的电路越来越多,也就越来越省电,同时也是越来越难唤醒的。
WFI:等待中断,任何外设发生任何中断,芯片会立刻醒过来;
WFE:等待事件,可以是外边中断配置为事件模式,也可以是使能了中断,但是没有配置NVIC,产生事件会立刻唤醒,醒来之后,一般不需要进入中断函数,直接从睡的地方直接运行。
睡眠模式:只把CPU时钟关了,对其他电路没有任何操作;CPU时钟关了,程序就会暂停,不会继续运行了,CPU不运行,芯片功耗就会降低。睡眠模式:相当于大脑打了个盹,身体还在工作。
关闭电路有两种做法:一是关闭时钟,另一个是关闭电源;关闭时钟,所有的运算和涉及时序的操作都会暂停,但是寄存器和存储器保存的数据还可以维持,不会消失;关闭电源,就是电路直接断电,电路的操作和数据都会直接丢失,所以关闭电源比关闭时钟更省电。电压调节器,实际上就是1.8V区域的电源,电压调节器关,代表把1.8V区域断电。
停机模式:首先SLEEODEEP位设置为1,高速CPU,你可以放心地睡,进入深度睡眠模式,另外PDDS这一位,用来区分它是停机模式,还是下面的待机模式,PDDS=0,进入停机模式,PDDS=1,进入待机模式,所以 想进入停机模式,PDDS要事先设置为0,之后LPDS用来设置最后这个电压调节器,是开启还是进入低功耗模式,LPDS=0,电压调节器开启,LPDS=1,电压调节器进入低功耗模式,最后当我们把这些位提前设置好了,最后再调用WFI或者WFE,芯片就可以进入停止模式了。
唤醒调节:苛刻一些:任一外部中断,PVD、RTC、USB唤醒、ETH唤醒这4个借道了外部中断,可以唤醒停止模式。
电路影响:首先关闭所有1.8V区域的时钟,不仅CPU不能运行了,外设也运行不了了,定时器,正在定时的,会暂停,串口收发数据也会暂停,不过因为没有关闭电源,CPU和外设寄存器数据都是维持原状的,高速时钟HIS和HSE也关闭,开启和低功耗都可以维持寄存器和存储器的数据内容,低功耗更省电,同时,在唤醒时要花更多的时间。
待机模式:首先SLEEODEEP位设置为1,高速CPU,你可以放心地睡,进入深度睡眠模式,PDDS=1,进入待机模式,最后再调用WFI或者WFE,芯片就可以进入待机模式了。
唤醒条件:普通外设的中断和外部中断,都无法唤醒待机模式,待机模式只有指导的信号才能唤醒,第一个是WKUP引脚的上升沿,PA0;第二个是RTC闹钟事件;第三个是NRST引脚的外部复位;第四个,IWDG独立看门狗复位。
电路影响:首先关闭所有1.8V区域的时钟,高速时钟HIS和HSE也关闭;电压调节器关闭,意味着1.8V电源关闭。内部存储器和寄存器的数据全部丢失。并不会主动关闭LSI和LSE两个低速时钟(RTC和独立看门狗的运行)。
这两个指令是最终开启低功耗模式的触发条件,配置其他寄存器要在这俩之前。
变成8Mhz主频,第一时间重新启动HSE,配置主频72Mhz;调用SystemInit就行。
问题
总结
本节课主要是了学习了电源低功耗的处理,有睡眠模式、停止模式、待机模式,以及在操作中,唤醒模式变得越来越难,从前面的中断或者事件都能唤醒到外部中断唤醒,最后变成特使设计的唤醒模式引脚。