stm32f103c8t6学习笔记(学习B站up江科大自化协)-PWR电源控制

PWR简介 

        ·PVD可用在电池供电或安全要求比较高的设备,如果供电电压在逐渐下降,在电压过低的情况下可能会导致内外电路出现不确定的错误。为了避免不必要的错误,可以在电源电压过低的情况下,提前发出警告并关闭较为危险的设备

        ·关闭的硬件越多越省电,不过唤醒就越麻烦

电源框图

        可将STM32内部的供电方案大致分为3部分:

        ·第一部分(最上边的):模拟部分供电,VDDA(VDD Analog)

        这部分电路供电的正极是VDDA,负极是VSSA,其中AD转换器还有两根参考电压的供电叫VREF+和VREF-,在引脚多的型号中会单独引出,在引脚少的设备(如c8t6)内部会接到VDDA和VSSA

        ·第二部分(中间的):数字部分供电,包括VDD供电区(左)和1.8V供电区(右)

        VDD供电区域的电压调节器降压到1.8V之后,提供给后边的1.8V供电区。STM32内部的关键电路基本是以1.8V低压运行的,当这些电路需要与外界交流的时候才会通过IO转换成3.3V。其中使用低压运行的目的是降低功耗,电压越低内部电路运行的功耗就越低

        ·第三部分(最下边的):后备供电VBAT(V Battery)

        RCC_BDCR是RCC寄存器,叫备份域控制寄存器,也是和后备区域有关的寄存器,可由VBAT供电。

        第二三部分中间有一个低电压检测器可以控制VBAT开关,VDD有电的时候由VDD供电,VDD没电时由VBAT供电

上电复位和掉电复位

         ·当VDD或VDDA电压过低时,内部电路直接产生复位,让stm32复位住不会乱操作

        ·在复位和不复位的界限之间设置了一个40mV的迟滞电压,大于上限POR(Power On Reset)时解除复位,小于下限PDR(Power Down Reset)时复位,是一个典型的迟滞比较器。设置两个阈值的作用,是为了防止电压在某个阈值附近波动时造成输出也来回抖动,

        ·复位信号时低电平有效,在前边后边电压过低时是复位的,中间电压正常不复位。

        ·关于POR、PDR和滞后时间可以参考数据手册(如下)

        下降沿PDR掉电复位的阈值下限典型值是1.88V,上升沿上电复位的阈值上限典型值是1.92V,1.92-1.88就是迟滞的阈值40mV。如果忽略迟滞的话,简单点说就是大于1.9上电,低于1.9掉电。

        最后一行是复位持续时间,典型时间是2.5ms 

可编程电压检测器

        ·简称PVD,也是用于检测VDD和VDDA的供电电压,和前边的区别在于PVD的阈值是可以程序指定的,可以自定义调节,根据手册,可选范围是2.2-2.9V左右,PVD上限和下限的迟滞电压是100mV,PVD的电压比上电掉电复位的电压高

        ·PVD触发后芯片还是能正常工作的,只不过是电源电压过低,可以对用户进行提醒。PVD的输出是正逻辑,电压过低时为1,电压正常时为0,这个信号可以去申请中断,在上升沿或下降沿时触发中断,PVD的中断申请是通过外部中断实现的,如果要使用PVD的话需要记得配置外部中断

        ·接到外部中断的还有RTC,RTC自己是由中断的,但是为什么还需要接到外部中断?由于低功耗模式设计的是只有外部中断可以唤醒停止模式,其他设备(USB、ETH等等,将其wakeup信号线接过来)也想唤醒停止模式的话都可以通过借道外部中断实现

低功耗模式

        ·在这个图中,从上到下的模式关闭的电路越来越多,也越来省电,也是越来越难唤醒

        ·关闭电路通常由两个做法,一个是关闭时钟,另一个是关闭电源,

        关闭时钟所有的运算和涉及时序的操作都会暂停,但是寄存器和存储器里保存的数据还可以维持不会丢失

        关闭电源就是电路直接断电,电路的操作和数据都会直接丢失,关闭电源会比关闭时钟更省电。图中电压调节器关就代表1.8V区域断电

睡眠模式:

        ·直接调用WFI或WFE即可进入,这两个是内核的指令,使用可以直接调用库函数,WFI(Wait For Interrupt等待中断),唤醒条件是任意中断,仍和外设发生任何中断时芯片都会立刻醒来,醒来一般第一时间处理中断函数。WFE(Wait For Event等待事件),这个事件可以是外部中断配置为事件模式,也可以是使能了中断但是没有配置NVIC,WFE唤醒醒来之后一般不需要进中断函数,直接从睡的地方继续运行

        ·睡眠模式对只讲CPU时钟关闭,程序不会继续运行,CPU不运行功耗就会降低,睡眠模式对其他电路没有任何操作

停机模式:

        ·进入停机模式,先将SLEEPDEEP位置1,告诉CPU可以方向进入深度睡眠模式,

        PDDS这一位是用于区分是停机模式还是待机模式,PDDS = 0进入停机模式,PDDS = 1进入待机模式。要想进入停机模式要现将PDDS设置为0,

        LPDS用于设置最后的电压调节器是开启还是进入低功耗模式,LPDS = 1电压调节进入低功耗,LPDS = 0电压调节器开启。当把前边提到的位设置好了之后,再调用WFI或WFE芯片就可以进入停止模式了。

        停止模式的唤醒条件较为苛刻,因为在这个模式下芯片睡眠更深,关闭的东西更多。条件是任一外部中断,所有外设的中断都可以,以及前边提到的PVD、RTC闹钟、USB唤醒、ETH唤醒借道了外部中断,这四个信号也同样可以唤醒停止模式。

        停止模式对电路的操作有:关闭所有1.8V区的时钟,不仅CPU不能运行,外设也运行不了,正在定时的定时器会暂停,串口收发数据也会暂停,由于没关闭电源,CPU和外设的寄存器数据都是维持原状的。HSI和HSE的振荡器关闭,CPU和外设时钟都关闭的情况下,这两个高速时钟也没什么作用,所以会关闭。LSI内部低速时钟和LSE外部低速时钟并不会主动关闭,如果开启过这两个时钟可以继续运行。

        电压调节器可以开启或者选择低功耗模式,这个电压调节器是由LPDS位控制的,无论电压调节器是开启还是低功耗,都可以维持1.8V区域寄存器和存储器的数据内容,区别在于低功耗更省电,同时低功耗在唤醒时会花更多的时间,电压调节器开启的话更耗电一些但是唤醒更快

待机模式:

        待机模式和停机模式类似,SLEEPDEEP置1,即将深度睡眠,PDDS置1表示即将进入待机模式,最后调用WFI或WFE就可以进入待机模式了。

        唤醒条件更为严格,普通外设的中断和外部中断都无法唤醒待机模式,只有指定的几个信号可以唤醒:

               ·WKUP引脚的上升沿,在引脚定义表里边可以看到WKUP的引脚位置在PA0

                 ·RTC闹钟事件,RTC闹钟可以唤醒待机模式,应用场景是芯片每隔一段时间工作一次

                ·NRST引脚上的外部复位,意思是按下复位键也可以唤醒

                ·IWDG独立看门狗复位

            待机模式对电路的操作:基本将能关的都关了,1.8V区域的时钟关闭,两个高速时钟关闭,电压调节器关闭,意味着1.8V区域的电源关闭,那么内部的存储器和寄存器数据全部丢失。同停止模式一样,并没有主动关闭LSI和LSE的低速时钟,因为这两个时钟需要维持RTC和独立看门狗的运行,所以不会关闭

功能实现部分:

        ·实现功能前需要注意:如果文件图标带有钥匙标志,说明文件为只读,必须先解除只读才能修改程序

        ·解除只读的方法为:文件夹里找到文件 -->  文件  -->  右键  -->  取消只读  

        ·芯片再三种低功耗的情况下是没办法下载程序的,下载成功后开始执行程序,芯片进入休眠时再次点击下载会报错。解决方法是:按住复位键不放,点击下载按钮并及时松开复位键。在低功耗情况下都需要以这种方式下载

        ·如果不小心禁用了调试端口,也可以按上边这个方法解决

修改主频

        ·修改主频不属于三种低功耗模式,但是是可以降低STM32的功耗的方法之一。

        ·这段代码第一行显示系统主频,第二行以1秒为周期闪烁running,由于正常系统主频是72MHz,但是降频为36MHz之后,运行时间变为原来的二倍

        ·修改主频在system_stm32f10x.c里边的文件里110行的位置配置时钟,将预留好的宏定义解除注释即可

睡眠模式+串口发送+接收

        ·当收到一个字节的时候,中断触发,置标志位。主循环查询到标志位的时候,读取数据并用串口发送出去。收到数据后自动退出睡眠模式,执行一遍任务之后继续睡眠,空闲时芯片持续处于睡眠状态,降低系统功耗

        ·连接好串口后发送数据,发送数据给stm32,stm32成功接受数据并回传,现象和没使用睡眠模式的时候是一样的,区别的细节在于只有发送数据的时候,OLED才会显示一次running,空闲时芯片都在睡眠。

停止模式+对射式红外传感期计次

        ·每遮挡一次,执行一次计次,也显示一次running,没有外部中断信号时,stm32处于休眠模式省点,

待机模式+实时时钟

        ·LSE外部低速时钟,如果没有RTC晶振或RTC晶振不起振,LSI在待机模式下也可以继续工作

        ·在进入待机模式之前,关闭外部链接的各个模块,以最大化省电。每隔10s唤醒一次,唤醒后执行一次任务后继续待机,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/831118.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java发送请求-http+https的

第一步:建议ssl连接对象,信任所有证书 第二步:代码同时支持httphttps 引入源码类 是一个注册器 引入这个类,和它的方法create 注册器,所以对http和https都进行注册,参数为id和item,其中http的…

【C++题解】1039. 求三个数的最大数

问题:1039. 求三个数的最大数 类型:多分支结构 题目描述: 已知有三个不等的数,将其中的最大数找出来。 输入: 输入只有一行,包括3个整数。之间用一个空格分开。 输出: 输出只有一行&#…

uni-app scroll-view隐藏滚动条的小细节 兼容主流浏览器

开端 想写个横向滚动的列表适配浏览器,主要就是隐藏一下滚动条在手机上美观一点。 但是使用uni-app官方文档建议的::-webkit-scrollbar在目标标签时发现没生效。 .scroll-view_H::-webkit-scrollbar{display: none; }解决 F12看了一下,原来编译到浏览…

Day27:阻塞队列、Kafka入门、发送系统通知、显示系统

阻塞队列BlockingQueue BlockingQueue 解决线程通信的问题。阻塞方法:put、take。 生产者消费者模式 生产者:产生数据的线程。消费者:使用数据的线程。 (Thread1生产者,Thread2消费者) 实现类 ArrayBlockingQueueLinkedBlockingQueuePr…

firebase:一款功能强大的Firebase数据库安全漏洞与错误配置检测工具

关于firebase firebase是一款针对Firebase数据库的安全工具,该工具基于Python 3开发,可以帮助广大研究人员针对目标Firebase数据库执行安全漏洞扫描、漏洞测试和错误配置检测等任务。 该工具专为红队研究人员设计,请在获得授权许可后再进行安…

制作一个RISC-V的操作系统十六-系统调用

文章目录 用户态和内核态mstatus设置模式切换核心流程封装代码背景解释代码示例解析解释目的 用户态和内核态 mstatus设置 此时UIE设置为1和MPIE为1,MPP设置为0 代表当前权限允许UIE中断发生,并且在第一个mret后将权限恢复为用户态,同时MIE也…

保存钉钉群直播回放下载:直播回放下载步骤详解

今天,我们就来拨开云雾,揭开保存钉钉群直播回放的神秘面纱。教会你们如何下载钉钉群直播回放 首先用到的工具我全部打包好了,有需要的自己下载一下 钉钉群直播回放工具下载:https://pan.baidu.com/s/1WVMNGoKcTwR_NDpvFP2O2A?p…

ASP.NET Core日志管理(Serilog)

.net 6 web api项目添加日志(Serilog)管理,将日志输出到控制台、文件、数据库 Nuget安装:Serilog.AspNetCore 1、用于日志输出到控制台Serilog.Formatting.Compact 2、用于日志输出到SQLServer数据库Serilog.Sinks.MSSqlServer 3、用于日志输出到文件Serilog.Sinks.RollingF…

pycharm中文件误删或者误操作,怎么恢复

恢复pycharm中文件误删或者误操作 恢复方法:1.xxxx.py文件误删2.xxxx.py文件内操作 在日常学习或练手时总会有一些迷之操作,一些文件被误删或者一些文件越改越糟,想要恢复操作之前的文件。 恢复方法: 1.选则误删文件的上级目录&…

mysql 数据转excel文件

mysql 数据转excel文件 缘由 为售后拉取数据,用navicat太墨迹了,用python写一个main方法跑一下; 1.抽取共同方法,封装成传入mysql,直接下载成excel; 2.写入所有sql语句,传入参数; 代…

Unity ParticleSystem 入门

概述 在项目的制作过程成,一定少不了粒子系统的使用吧,如果你想在项目粒子效果,那这部分的内容一定不要错过喔!我添加了理解和注释更好理解一点! 这次的内容比较多,右侧有目录,可以帮助快速导…

渗透之sql盲注

sql盲注:sql盲注意思是我们并不能在web页面中看到具体的信息,我们只能通过输入的语句的真假来判断。从而拿到我们想要的信息。 我们通常使用ascii值来进行盲注。 目录 手动注入: 脚本注入: 使用sqlmap工具注入: 手…

【面试经典 150 | 分治】排序链表

文章目录 写在前面Tag题目来源解题思路方法一:链表转数组方法二:自顶向下归并排序方法三:自底向上的归并排序 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内…

利用STM32实现语音识别功能

引言 随着物联网和智能设备的普及,语音识别技术正逐渐成为用户交互的主流方式之一。 STM32微控制器具备处理高效率语音识别算法的能力,使其成为实现低成本、低功耗语音交互系统的理想选择。 本教程将介绍如何在STM32平台上开发和部署一个基础的语音识…

Java进阶-Java Stream API详解与使用

本文全面介绍了 Java Stream API 的概念、功能以及如何在 Java 中有效地使用它进行集合和数据流的处理。通过详细解释和示例,文章展示了 Java Stream API 在简化代码、提高效率以及支持函数式编程方面的优势。文中还比较了 Java Stream API 与其他集合处理库的异同&…

【记录】Springboot项目集成docker实现一键部署

公司管理平台完成后,为了方便其他不懂开发的同事部署和测试,集成docker进行一键部署,也为后面自动化部署做准备。本文做个简单记录。 1、安装docker yum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/cont…

Ubuntu GUI使用Root用户登录指南

Ubuntu GUI使用Root用户登录指南 一、前言 默认情况下,Ubuntu 禁用了 root 账户,我们必须使用 sudo 命令来执行任何需要 root 权限的任务,比如像这样删除一个系统配置文件(操作危险,请勿尝试):…

是机遇?是未来?拥抱 AI Agent ,拥抱 AI 2.0时代~

✍️ 作者:哈哥撩编程(视频号同名) 博客专家全国博客之星第四名超级个体COC上海社区主理人特约讲师谷歌亚马逊演讲嘉宾科技博主极星会首批签约作者 🏆 推荐专栏: 🏅 程序员:职场关键角色通识宝…

Devops部署maven项目

这里讲下应用k8s集群devops持续集成部署maven项目的流程。 failed to verify certificate: x509: certificate signed by unknown authority 今天在执行kubectl get nodes的时候报的证书验证问题,看了一圈首次搭建k8s的都是高频出现的问题。 couldn’t get curren…

代码随想录-二叉树(节点)

目录 104. 二叉树的最大深度 题目描述: 输入输出描述: 思路和想法: 111. 二叉树的最小深度 题目描述: 输入输出描述: 思路和想法: 222. 完全二叉树的节点个数 题目描述: ​输入输出描…