STM32学习笔记 电源控制PWR 01

2023-11-10 07:59

本文主要是介绍STM32学习笔记 电源控制PWR 01,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

电源控制PWR

  • 简介

  1. STM32的工作电压(VDD)为2.0~3.6V,通过内置的电压调节器提供所需的1.8V电源

  2. 当主电源VDD掉电后,通过VBAT脚为实时时钟(RTC)和备份寄存器(BKP)提供电源

  3. 使用电池或其他电源连接到VBAT脚上,当VDD断电时,可以保存备份寄存器的内容和维持 RTC的功能

  • PWR模块使用注意点

  1. 当后备供电区域由VDD(内部模拟开关连到VDD)供电时,下述功能可用:

    ● PC14和PC15可以用于GPIO或LSE(外部低速晶振)引脚

    ● PC13可以作为通用I/O口、TAMPER引脚、RTC校准时钟、RTC闹钟或秒输出

  2. 当后备供电区域由VBAT供电时(VDD消失后模拟开关连到VBAT),可以使用下述功能 :

    ● PC14和PC15只能用于LSE(外部低速晶振)引脚

    ● PC13可以作为TAMPER引脚、RTC闹钟或秒输出

Note :因为模拟开关只能通过少量的电流(3mA),在输出模式下使用PC13至PC15的I/O口功能是有限制的:速度必须限制在2MHz以下,最大负载为30pF,而且这些I/O口绝对不能当作电流源 (如驱动LED)

  • 电压调节器

  • 电压调节器复位后默认使能,根据应用场景提供下列3中工作模式

  1. 运行模式:调节器以正常功耗模式提供1.8V电源(驱动内核及外设工作)

  2. 停止模式:调节器以低功耗模式提供1.8V电源,以保存寄存器和SRAM的内容

  3. 待机模式:调节器停止供电。除了备用电路和备份域外,寄存器和SRAM的内容全部丢失

电源模块结构框​​​​​​​图

Vref-   :ADC参考电压源负
Vref+  :ADC参考电压源正
Vdda  :ADC独立电源正
Vssa   :ADC独立电源负

VDD     :芯片供电正(3.3V)

VSS     :芯片供电负

VBAT   :备用电池供电

Note :使用电池或其他电源连接到VBAT脚上,当VDD断电时,可以保存备份寄存器(RCC_BDCR)的内容和维持RTC的功能

VBAT脚也为RTC、LSE振荡器和PC13至PC15供电,这保证当主要电源被切断时RTC能继续工作

如果应用中没有使用外部电池,VBAT必须连接到VDD引脚上

 可编程电压监测器(PVD)

PVD电压监测主要用于处理上电和掉电需要紧急处理的事件

通过下列配置代码进行初始配置

int main()
{__HAL_RCC_PWR_CLK_ENABLE();//使能电源管理外设时钟HAL_PWR_ConfigPVD(PWR_PVDTypeDef *sConfigPVD);//配置监测电压值及外部中断和事件16HAL_PWR_EnablePVD();//开启PVD监测
}void PVD_IRQHandler(void)//系统中断入口
{HAL_PWR_PVD_IRQHandler();//PVD中断处理函数
}void HAL_PWR_PVDCallback(void)//PVD中断回调回调函数
{/*中断响应会通过PVD中断处理函数跳转至此中断回调*/__HAL_PWR_GET_FLAG(PWR_FLAG_PVDO);//通过返回值判断高于或低于监测值
}

低功耗模式

在MCU空闲时进入低功耗模式来降低系统能耗增加续航能力

STM32低功耗提供3种模式

  1. 睡眠模式 :只对CPU时钟进行关闭,不影响其他外设时钟,可通过任意中断或事件进行唤醒
  2. 停机模式 :关闭所有外设时钟,关闭时钟振荡器,电压调节器可选正常模式及低功耗模式,可通过外部中断或事件进行唤醒
  3. 待机模式 :关闭所有外设,时钟,电压调节器,丢失所有寄存数据

待机模式提供4种方式进行唤醒 1.WKUP引脚上升沿唤醒,2.RTC闹钟事件,3.NRST外部复位,4.IWDG复位

睡眠模式 Template

int main()
{HAL_SuspendTick();//挂起SysTick中断,防止中断唤醒HAL_PWR_EnterSLEEPMode(NULL, PWR_SLEEPENTRY_WFI);//进入睡眠模式HAL_ResumeTick();//恢复SysTick中断
}

停止模式 Template 

int main()
{HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);//进入停止模式SystemClock_Config();//唤醒重新初始化时钟
}

待机模式 Template

int main()
{/*使能唤醒引脚*/HAL_PWR_EnableWakeUpPin(uint32_t WakeUpPinx);/*清除待机和唤醒标志*/__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU | PWR_FLAG_SB);/*进入待机模式API*/HAL_PWR_EnterSTANDBYMode(void);
}

Note :进入低功耗模式可选WFI(等待中断)指令和WFE​​​​​​​(等待事件)指令,决定中断或事件唤醒

低功耗模式下的自动唤醒(AWU)

​​​​​​​为了用RTC闹钟事件将系统从停止模式下唤醒,必须进行如下操作:

配置外部中断线 17 为上升沿触发。
配置 RTC 使其可产生 RTC 闹钟事件。
int main()
{__HAL_RCC_AFIO_CLK_ENABLE();//使能AFIO时钟__HAL_RTC_ALARM_EXTI_ENABLE_RISING_EDGE();//配置闹钟事件线为上升沿触发__HAL_RTC_ALARM_EXTI_ENABLE_EVENT();//使能RTC事件/*设置闹钟寄存器*/HAL_RTC_SetAlarm(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Format);HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);//进入停止模式SystemClock_Config();//唤醒重新初始化时钟__HAL_RTC_ALARM_CLEAR_FLAG(&hrtc,RTC_FLAG_ALRAF);//清除闹钟事件标志
}
如果要从待机模式中唤醒,不必配置外部中断线17
int main()
{__HAL_RCC_AFIO_CLK_ENABLE();//使能AFIO时钟__HAL_RTC_ALARM_EXTI_ENABLE_EVENT();//使能RTC事件/*设置闹钟寄存器*/HAL_RTC_SetAlarm(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Format);/*进入待机模式API*/HAL_PWR_EnterSTANDBYMode(void);
}

PWR电源管理常用HAL库函数LIST

stm32f1xx_hal_pwr.c

在复位后,RTC和后备寄存器处于被保护状态以防意外写入
/*调用此函数使能或失能保护*/
HAL_PWR_EnableBkUpAccess(void);
HAL_PWR_DisableBkUpAccess(void);
/*此函数用于配置唤醒Wake-Up引脚*/
HAL_PWR_EnableWakeUpPin(uint32_t WakeUpPinx);
HAL_PWR_DisableWakeUpPin(uint32_t WakeUpPinx);

stm32f1xx_hal_pwr.h 

#define PWR_FLAG_WU    //唤醒标志
#define PWR_FLAG_SB    //待机标志
#define PWR_FLAG_PVDO  //PVD监测标志       #define __HAL_PWR_GET_FLAG(__FLAG__)//查询PWR标志位
#define __HAL_PWR_CLEAR_FLAG(__FLAG__)//清除PWR标志位
#define __HAL_PWR_PVD_EXTI_GENERATE_SWIT()//执行一次PVD软件中断

Author :HU&DA

 

这篇关于STM32学习笔记 电源控制PWR 01的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/381385

相关文章

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

Spring IOC控制反转的实现解析

《SpringIOC控制反转的实现解析》:本文主要介绍SpringIOC控制反转的实现,IOC是Spring的核心思想之一,它通过将对象的创建、依赖注入和生命周期管理交给容器来实现解耦,使开发者... 目录1. IOC的基本概念1.1 什么是IOC1.2 IOC与DI的关系2. IOC的设计目标3. IOC

Python实现局域网远程控制电脑

《Python实现局域网远程控制电脑》这篇文章主要为大家详细介绍了如何利用Python编写一个工具,可以实现远程控制局域网电脑关机,重启,注销等功能,感兴趣的小伙伴可以参考一下... 目录1.简介2. 运行效果3. 1.0版本相关源码服务端server.py客户端client.py4. 2.0版本相关源码1

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]