洋桃电子STM32F407单片机入门教程笔记九:低功耗模式

这篇具有很好参考价值的文章主要介绍了洋桃电子STM32F407单片机入门教程笔记九:低功耗模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  此文档作为对洋桃电子STM32F407单片机视频的整理,B站链接:

第28集)低功耗模式_哔哩哔哩_bilibili

        在之前的程序里应用程序在while(1)主循环中反复执行,ARM内核以100%的功率工作。这样的设计简单稳定,内核全速运行的功耗也只有几十毫安,对于外接电源的设备来讲这点功率可以忽略不计,但开发电池提供的设备时则对功耗特别敏感。

        低功耗模式就是为功耗有严格要求的设备而准备的。低功耗模式的本质是关闭用不到的内部功能以节省电量,根据内部功能的等级可分成睡眠模式、停止模式(又称停机模式)、待机模式。三种模式对应三种不同的低功耗运行方案,适用于不同的应用场合。

1. 三种低功耗模式的对比

arm内部上拉和外部上拉功耗,单片机,stm32,笔记

        不同的低功耗模式关闭单片机内部功能的数量不同,关闭功能越多越省电,但关闭的越多唤醒方法越少,有利有弊,需要视情况综合考虑。

        睡眠模式适用于ARM内核不需要连续工作的场合,不需要ARM内核工作时就进入睡眠模式可节省几毫安的功耗,由于只有ARM内核停止工作其他功能照常运行所以任意中断或事件都能唤醒ARM内核退出睡眠模式。从此可以看出睡眠模式并不会停止单片机运行,只是让ARM内核无工作时小睡一会。

        停止模式将关闭ARM内核内部所有功能,PLL时钟电路、HSE外部高速时钟相关电路,停止模式将所有工作停止ARM内核彻底停止,GPIO、ADC、DMA、USART、SPI等内部功能都停止工作,只有独立的内部功能可唤醒单片机退出停止模式。独立功能包括外部中断、电源PVD、RTC闹钟、USB唤醒,停止模式适用于偶尔工作一会的场合。

        待机模式不仅关闭单片机所有内部功能,SRAM内存都将关闭,所有寄存器数据丢失,只能通过复位单片机唤醒,复位后无法接着之前的程序继续运行,只能从头开始,待机模式适用于不需要连续运行的场合。

2. 睡眠模式

arm内部上拉和外部上拉功耗,单片机,stm32,笔记

        睡眠模式的开启不需要在CubeMX中设置,只要在程序中需要进入睡眠的地方调用HAL库函数,例如在这个示例程序的第103行调用开启睡眠模式的函数HAL_PWR_EnterSLEEPMode(),此函数有两个参数:第一个参数是电源模式设置,可设置为主电源开启或低功耗电源开启,设置为主电源开启时除了ARM内核关闭之外其它不变,设置为低功耗电源开启时ARM内核关闭的同时系统时钟频率会下降,PLL电路关闭、还有一系列性能的下降以尽量降低运行功耗。一般设置为主电源开启。第二个参数是睡眠模式的唤醒方式,可以选择中断唤醒或事件唤醒,这里选择了中断唤醒。

arm内部上拉和外部上拉功耗,单片机,stm32,笔记

        当程序运行到第103行,ARM内核停止工作程序不再继续执行,等待着中断唤醒,当出现任何一个中断ARM内核将被唤醒,唤醒后的程序从停止时的下一条开始执行,也就是105行。唤醒之后的单片机状态没有任何变化,程序照常运行。

        实验现象:

arm内部上拉和外部上拉功耗,单片机,stm32,笔记

        在CubeMX中打开NVIC窗口可以看到有很多默认开启的中断项目,这些涉及到单片机底层运行,这些中断项目都都会导致睡眠模式的唤醒。

arm内部上拉和外部上拉功耗,单片机,stm32,笔记

        在超级终端上可以看到程序运行时会快速而频繁的睡眠和唤醒,这是由于NVIC默认的中断项目导致的中断唤醒。

3. 停止模式

        停止模式的开启方法和睡眠模式几乎一样,只是调用了不同的HAL库函数。

arm内部上拉和外部上拉功耗,单片机,stm32,笔记

        同样是在程序中需要进入停止模式的地方插入第108行的HAL_PWR_EnterSTOPMode()函数。此函数有两个参数,第一个参数可选择主电源开启或低功耗电源开启,第二个参数可选择中断唤醒或事件唤醒,由于停止模式是将关闭单片机内部的所有功能所以第一个参数选择低功耗电源开启,当按下开发板上的KEY2按键执行完第108行单片机停止运行等待中断唤醒。如果有外部中断、RTC闹钟、USB信号等唤醒单片机,程序将从停止处的下一行 (第111行)继续运行。由于停止模式关闭了内部功能的时钟,所以唤醒后第111行调用了系统时钟初始化函数,重新初始化系统时钟才能重启内部功能,单片机才能进入运行状态。

        为了能够在开发板上演示停止和唤醒效果,需要把KEY1按键设置为外部中断功能,当按下KEY1按键被触发下降沿中断唤醒单片机。当程序执行完第108行进入停止模式,单片机内部功能停止不会产生中断,只有按下开发板上的KEY1按键产生外部中断触发单片机被唤醒。按下KEY2按键再次进入停止模式。

        实验现象:

arm内部上拉和外部上拉功耗,单片机,stm32,笔记

4. 待机模式

        待机模式是在停止模式的基础上关闭1.2V电源域,也就是FLASH存储器和SRAM内存的电源,使正在运行的程序全部丢失只能复位重启,待机模式下连外部中断也不能唤醒,只能通过设置WKUP引脚唤醒,WKUP引脚是专用待机唤醒的引脚,当引脚上出现上升沿信号单片机将从待机模式中唤醒。

arm内部上拉和外部上拉功耗,单片机,stm32,笔记

        在开发板电路原理图上,WKUP复用在PA0端口,在CubeMX端口视图中单击PA0端口可以选择SYSWKUP模式,但这里存在一个问题PA0端口没有连接上拉或下拉使它的电平处在不稳定状态。

arm内部上拉和外部上拉功耗,单片机,stm32,笔记

        先将PA0设置为GPIO_Input模式,此时才能将PA0的参数设置为下拉模式。至于WKUP端口将在程序代码中开启。        

arm内部上拉和外部上拉功耗,单片机,stm32,笔记

arm内部上拉和外部上拉功耗,单片机,stm32,笔记

        在主循环开始之前的第96行加入复位标志位的判断程序,判断本次复位是不是待机模式的唤醒,如果是则执行第98行,可以在这里插入待机唤醒的处理程序,然后第100行禁止WKUP功能,第101行清除复位标志位。

arm内部上拉和外部上拉功耗,单片机,stm32,笔记

        第118行是正式进入待机状态的HAL库函数,但在此之前要做一些准备工作,第116行清除WKUP状态标志位,为接收端口的上升沿信号做好准备,第117行调用HAL库函数开启WKUP功能,此时当执行完第118行进入待机状态,按下开发板上的WKUP按键并松开时,必然产生电平上升沿触发唤醒,由于待机状态下的唤醒无法继续运行只能复位重新开始,所以第118行的下面没有添加唤醒处理程序,处理程序是放在主函数开始处的第95~102行。

        实验现象:

arm内部上拉和外部上拉功耗,单片机,stm32,笔记文章来源地址https://www.toymoban.com/news/detail-819242.html

到了这里,关于洋桃电子STM32F407单片机入门教程笔记九:低功耗模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32F407ZGT6单片机连接ST_LINK和USB转TTL的接线方法+舵机接线方法

    目录 1.STM32F407ZG单片机连接ST_LINK 2.STM32F407ZG单片机连接USB转TTL(用于串口通信) 3  舵机 单片机             ST_LINK      9--------------------6      7--------------------2      20------------------3/4      1--------------------7/8  这里附上具体的接线图片: 单片机      USB转TTL TX————

    2024年02月02日
    浏览(69)
  • STM32F407单片机通用24CXXX读写程序(KEIL),兼容24C系列存储器(24C01到24C512),支持存储器任意地址跨页连续读写多个页

    原文链接:https://blog.csdn.net/ba_wang_mao/article/details/108318633 AT24C01,AT24C02,AT24C04,AT24C08,AT24C16,AT24C32,AT24C64,AT24C128,AT24C256…不同的xxx代表不同的容量。 总容量(Byte容量) = 页数 × 页内字节单元数。 对AT24CXXX进行读写操作时,都得先访问存储地址、比如AT24C01写一个字节的I

    2024年04月11日
    浏览(65)
  • stm32f407单片机上通过HAL库实现can总线数据的收发

      最近在使用can总线,由于这个以前接触的比较少,所以调试代码的时候直接是下载的正点原子的例程,在这个基础上修改调试的。现在将调试中遇到的问题,总结一下,避免以后踩坑。目前写了一个查询方式的,一个中断方式的。项目代码下载地址: https://download.csdn.n

    2024年02月09日
    浏览(53)
  • 从STM32F407到AT32F407(一)

    雅特力公司的MCU有着性能超群,价格优越的巨大优势,缺点是相关资料少一些,我们可以充分利用ST的现有资源来开发它。 我用雅特力的STM32F437开发板,使用原子 stm32f407的开发板自带程序,测试串口程序,原设定串口波特率为115200,但是输出乱码,波特率改成230400,串口输

    2024年02月02日
    浏览(60)
  • STM32F407的时钟

    时钟源用来为环形脉冲发生器提供频率稳定且电平匹配的方波时钟脉冲信号。它通常由石英 晶体振荡器和与非门组成的正反馈振荡电路组成,其输出送至环形脉冲发生器。 F4开发指南P107 F4开发指南P108 HSI高速内部时钟源 High Speed Internal。RC 振荡器,频率为 16MHz。可以直接作为

    2024年02月10日
    浏览(55)
  • STM32F407的介绍

    内核 32位 高性能ARM Cortex-M4处理器 时钟: 高达168MHz,实际还可以超频一点点 stm32f407的主频通过PLL倍频后能够达到168MHz,而且芯片内置一个16MHz的晶振和一个32KHz的晶振,可以满足不同功耗的需求。 支持FPU(浮点运算)和DSP指令 144引脚 114个IO口 存储器容量: 1024K FLASH, 192K

    2024年02月10日
    浏览(58)
  • STM32F407——串口通信

    本文将对串口通信的分类和基于 stm32 的串口配置进行介绍,以及如何使用串口调试助手进行串口收发功能的调试,旨在帮助还不会使用 stm32 单片机串口资源进行通信的家人们快速学会如何使用串口来进行通信。 (纯干货、快速上手、零基础也能会!!!) (1)串口,即串

    2023年04月08日
    浏览(55)
  • 初识 STM32和STM32F407简介

    2007 年 6 月,ST 在北京发布了全球第一款基于 ARM Cortex M3 内核的 32 位通用微控制 器芯片:STM32F103,以优异的性能,丰富的资源,超高的性价比,迅速占领市场,从此一鸣 惊人,一发不可收拾,截止到 2020 年 6 月,STM32 累计出货量超过 45 亿颗。 战舰开发板使用的 STM32F103ZET6

    2023年04月08日
    浏览(74)
  • STM32F407 移植 FreeRTOS

    本实验是基于正点原子 STM32F407ZG 探索者开发板完成的,所以需要一个STM32F407ZG 探索者开发板 用于移植的基础工程(下面会讲) FreeRTOS源码(下面会讲) 本实验所有用到的代码:基于正点原子STM32F407的FreeRTOS移植工程.zip 1.1 移植前准备 1.1.1 基础工程 由于后续需要用到 LED、

    2024年02月08日
    浏览(70)
  • STM32F407的PWM

    泉水 STM32 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。 高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。 通用定时器也能同时产生多达 4路的 PWM 输出 STM32F407 最多可以同时产生 30 路 PWM 输出! 这里我们仅利用 TIM14的 CH1 产生一路 PWM 输出。 如上所

    2024年02月17日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包