STM32单片机-PWR电源控制和WDG看门狗

news2024/11/28 8:26:49

STM32单片机-PWR电源控制和WDG看门狗

  • 一、PWR简介
  • 二、低功耗模式
  • 三、修改主频&睡眠模式&停机模式&待机模式
    • 3.1 修改主频
    • 3.2 睡眠模式
    • 3.3 停机模式
    • 3.4 待机模式
  • 四、WDG简介
    • 4.1 独立看门狗原理
    • 4.2 窗口看门狗原理
    • 4.3 IWDG和WWDG对比
  • 五、独立看门狗&窗口看门狗
    • 5.1 独立看门狗
    • 5.2 窗口看门狗

一、PWR简介

  • PWR负责管理STM32内部的电源供电部分,可以实现可编程电压监测器低功耗模式的功能
  • 可编程电压监测器(PVD)可以监测VDD电源电压,当VDD下降到PVD阈值以下或上升到PVD阈值以上时,PVD会触发中断,用于执行紧急关闭任务
  • 低功耗模式包括睡眠模式(Sleep)、停机模式(Stop)和待机模式(Standby),可在系统空闲时,降低STM32的功耗,延长设备的使用时间

  下图为STM32的电源框图
  从图中需要知道每个区域的供电引脚以及供电的电路

在这里插入图片描述

二、低功耗模式

  下图为低功耗模式表
  从上到下,关闭的电路越来越多,越来越省电,越来越难唤醒
  睡眠模式:调用WFIWFE进入睡眠模式。WFI:任何外设发生中断时,芯片都会立刻醒来。WFE:事件唤醒,不需要进入中断。只关闭CPU时钟,对他电路无任何操作

  关闭电路通常有关闭时钟和关闭电源两个做法,关闭时钟:所有运算和涉及时序的操作都会暂停,寄存器和存储器的数据可以维持,不会消失。关闭电源:电路直接断电,电路操作和数据会直接丢失

  停机模式待机模式:首先SLEEPDEEP= 1,之后PDDS=0-停机模式PDDS=1-待机模式LPDS=0-电压调节器开启LPDS=1-电压调节器进入低功耗,最终调用WFI或者WFE进入低功耗模式。任一外部中断(不需要时钟)外部事件唤醒停机模式WKUP上升沿RTC闹钟等唤醒待机模式。停机和待机同时关闭CPU和外设时钟内外部高速时钟停机模式不关闭电源,所以CPU和外设寄存器数据维持原状待机模式全部关闭

在这里插入图片描述

  下图为模式选择配置
  执行WFI和WFE指令后,STM32进入低功耗模式

三、修改主频&睡眠模式&停机模式&待机模式

3.1 修改主频

  在system.stm32f1ox.c文件中修改系统主频,默认72Mhz,文件是只读的,所以需要修改权限

#if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
/* #define SYSCLK_FREQ_HSE    HSE_VALUE */
 #define SYSCLK_FREQ_24MHz  24000000
#else
/* #define SYSCLK_FREQ_HSE    HSE_VALUE */
/* #define SYSCLK_FREQ_24MHz  24000000 */ 
/* #define SYSCLK_FREQ_36MHz  36000000 */
/* #define SYSCLK_FREQ_48MHz  48000000 */
/* #define SYSCLK_FREQ_56MHz  56000000 */
#define SYSCLK_FREQ_72MHz  72000000
#endif

3.2 睡眠模式

  对于中断触发的代码,加入低功耗模式,不进入中断的时候,可以节省资源,有中断进来再进入中断函数
  利用串口收发函数模拟,调用__WFI();函数,程序进入睡眠模式,Running!不再闪烁,当STM接收到数据触发中断时,Runnging!闪烁一次,接着进入睡眠模式,降低功耗

uint8_t RxData;
int main(void)
{
	OLED_Init();
	Serial_Init();
	OLED_ShowString(1,1,"RxData:");
	while(1)
	{
		if(Serial_GetRxFlag() == 1)
		{
			RxData = Serial_GetRxData();
			OLED_ShowHexNum(1,8,RxData,2);
		}
		
		OLED_ShowString(2,1,"Running!");
		Delay_ms(100);
		OLED_ShowString(2,1,"        ");
		Delay_ms(100);
		
		__WFI();//开启睡眠模式(中断唤醒)
	}
}

3.3 停机模式

  停机模式使用外部中断唤醒,利用对射红外传感器模拟
  当外部中断不触发时,CountSensor_Get()会一直被扫描,浪费资源,可以使STM32进入低功耗模式,节省资源
  进入停机模式,需要使用PWR外设,所以需要开启APB1PWR时钟,然后调用PWR_EnterSTOPMode()函数,开启停机模式,外部中断发生时,芯片唤醒
  复位后第一次Running!闪烁很快,后面的Running!闪烁很慢,是由于第一次在是72Mhz主频,后面进入停止模式,默认时钟是8MHz

  注意按下复位按钮下载

int main(void)
{
	OLED_Init();
	CountSensor_Init();
	OLED_ShowString(1,1,"Count:");
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);//开启PWR时钟
	
	while(1)
	{
		OLED_ShowNum(1,7,CountSensor_Get(),5);
		
		OLED_ShowString(2,1,"Running:");
		Delay_ms(100);
		OLED_ShowString(2,1,"        ");
		Delay_ms(100);
		
		PWR_EnterSTOPMode(PWR_Regulator_ON,PWR_STOPEntry_WFI);//开启停止模式
		SystemInit();//恢复主频
	}
}

3.4 待机模式

  待机模式唤醒需要特定的信号,使用RTC唤醒待机模式
  首先开启PWR时钟,然后调用PWR_EnterSTANDBYMode()开启待机模式。当RTC闹钟事件来临时,唤醒待机模式,唤醒一次后,程序从头开始,闹钟值会重新设置

int main(void)
{
	MyRTC_Init();
	OLED_Init();
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);//开启PWR时钟
	
	OLED_ShowString(1,1,"CNT:");
	OLED_ShowString(2,1,"ALR:");
	OLED_ShowString(3,1,"ALRF:");
	uint32_t Alarm = RTC_GetCounter()+10;
	RTC_SetAlarm(Alarm);//设定闹钟值
	
	OLED_ShowNum(2,6,Alarm,10);
	while(1)
	{
		OLED_ShowNum(1,6,RTC_GetCounter(),10);
		OLED_ShowNum(3,6,RTC_GetFlagStatus(RTC_FLAG_ALR),1);
		
		OLED_ShowString(4,1,"Running!");
		Delay_ms(100);
		OLED_ShowString(4,1,"        ");
		Delay_ms(100);
		
		PWR_EnterSTANDBYMode();//开启待机模式
	}
}

四、WDG简介

  • 看门狗可以监控程序的运行状态,当程序因为设计漏洞硬件故障电磁干扰等原因,出现卡死或跑飞现象时,看门狗能及时复位程序避免程序陷入长时间的罢工状态,保证系统的可靠性和安全性
  • 看门狗本质上是一个定时器,当指定时间范围内,程序没有执行喂狗(重置计数器)操作时,看门狗硬件电路就会自动产生复位信号
  • STM32内置两个看门狗
  • 独立看门狗(IWDG):独立工作,对时间精度要求较低
  • 窗口看门狗(WWDG):要求看门狗在精确计时窗口起作用

4.1 独立看门狗原理

  下图为独立看门狗框图
  与定时器类似,看门狗使用的是自减运行,自减到0后,定时器产生更新事件或者中断,看门狗是直接产生复位,定时器是产生事件后自动重装值,看门狗需要在自减到0之前手动重装,不然就会进行复位,手动重装就是喂狗
  看门狗输入时钟是低速时钟LSI40KHz,之后时钟进入8位预分频器进行预分频,最大256分频,预分频寄存器可以配置分频系数,之后每来一个时钟,12位递减计数器自减一个数,最大值是4095,自减到0后产生IWDG复位,在重装载数值写一个值,在键寄存器里写一个特定数据,控制电路进行喂狗,这时重装值就会复制到当前的计数器中,计数器就会回到重装值,重新自减运行了

在这里插入图片描述

  下面给出IWDG键寄存器

  • 键寄存器本质上是控制寄存器,用于控制硬件电路的工作
  • 在可能存在干扰的情况下,一般通过在整个键寄存器写入特定值代替控制寄存器写入一位的功能,以降低硬件电路收到干扰的概率

在这里插入图片描述

  • 超时时间TIWDG = TLSI x PR预分频系数 x (RL(重装值)+1)
  • 其中:TLSI = 1/FLSI = 1/40K = 0.025ms

  下图为PR寄存器和分频系数的对应关系以及RL和时间关系

在这里插入图片描述

4.2 窗口看门狗原理

  下图为窗口看门狗框图
  PCLK1时钟源36MHz进入预分频器WDGTB,然后到6位递减计数器(T6是溢出标志位,溢出产生复位信号)CNT,窗口看门狗没有重装寄存器,喂狗只需要在计数器里写入数据即可
  复位信号输出部分,WDGA是窗口看门狗激活位,给1启动窗口看门狗。T6=0时表示计数器溢出,产生复位信号,计算一个最早界限的计数值写入到W6-W0中,固定不变,执行写入CR操作时,即喂狗时的CNT计数值 > 窗口值,比较结果为1,也可以申请复位
  喂狗太晚,6位计数器减到0后,复位;喂狗太早,计数器的值超过窗口值,复位

  当计数器减到0x40(1000 0000)时,可以产生早期唤醒中断(EWI),下一时刻才复位

在这里插入图片描述

  • 超时时间(喂狗的最晚时间):TWWDG = TPCLK1 x 4096 x WDGTB预分频系数 x (T[5:0] + 1)
  • 窗口时间(喂狗的最早时间):TWIN = TPCLK1 x 4096 x WDGTB预分频系数 x (T[5:0] - W[5:0])
  • TPCLK1 = 1 / FPCLK1(36MHz)

  下图为最小/最大超时值与分配系数关系
  WDGTB = 0,1,2,3对应1,2,4,8分频

在这里插入图片描述

4.3 IWDG和WWDG对比

  下图为IWDG和WWDG对比图

在这里插入图片描述

五、独立看门狗&窗口看门狗

5.1 独立看门狗

  步骤:打开LSI时钟(默认打开) — 键寄存器(解除写保护) — 写入预分频值和重装值键寄存器(启动独立看门狗) — 键寄存器(写重装值-喂狗)

  当程序卡死超过设定时间时,看门狗就会进行复位

int main(void)
{
	OLED_Init();
	Key_Init();
	OLED_ShowString(1,1,"IWDG TEST");
	
	if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST) == SET)//本次复位由IWDG产生
	{
		OLED_ShowString(2,1,"IWDGRST");
		Delay_ms(500);
		OLED_ShowString(2,1,"       ");
		Delay_ms(500);
		RCC_ClearFlag();//清除标志位
	}
	else//普通复位
	{
		OLED_ShowString(3,1,"RST");
		Delay_ms(500);
		OLED_ShowString(3,1,"   ");
		Delay_ms(500);
	}
	//时钟自动配置
	IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//接触写保护
	//1000ms超时时间
	IWDG_SetPrescaler(IWDG_Prescaler_16);//配置预分频值
	IWDG_SetReload(2499);//配置重装值/喂狗
	IWDG_ReloadCounter();//先喂狗,CNT初始值就是2499
	//启动看门狗
	IWDG_Enable();
	while(1)
	{
		Key_GetNum();//按键一直按下,程序卡死,看门狗复位
		IWDG_ReloadCounter();//喂狗
		//Delay_ms(950);//看门狗不复位
		//Delay_ms(1010);//程序卡死超过1000ms,看门狗会一直复位
	}
}

5.2 窗口看门狗

  步骤:打开PCLK1时钟(APB1时钟) — 配置预分频和窗口寄存器值写入控制寄存器CR(看门狗使能计数器溢出标志位计数器有效位) — 计数器写值(喂狗)

  窗口看门狗需要设定窗口值和超时值,过早或超时喂狗都会使得看门狗复位

int main(void)
{
	OLED_Init();
	Key_Init();
	OLED_ShowString(1,1,"WWDG TEST");
	
	if(RCC_GetFlagStatus(RCC_FLAG_WWDGRST) == SET)//本次复位由WWDG产生
	{
		OLED_ShowString(2,1,"WWDGRST");
		Delay_ms(500);
		OLED_ShowString(2,1,"       ");
		Delay_ms(500);
		RCC_ClearFlag();//清除标志位
	}
	else//普通复位
	{
		OLED_ShowString(3,1,"RST");
		Delay_ms(500);
		OLED_ShowString(3,1,"   ");
		Delay_ms(500);
	}
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);//开启PCLK1时钟
	//超时50ms 窗口30ms
	WWDG_SetPrescaler(WWDG_Prescaler_8);//分频系数
	WWDG_SetWindowValue(0x40 | 21);//窗口值是W5-W0,W6为1
	WWDG_Enable(0x40 | 54);//计数器值是T5-T0,T6为1
	
	
	while(1)
	{
		//Key_GetNum();
		//Delay_ms(32);//过早喂狗:避免第一次喂狗和第二次间隔小于窗口30ms
		Delay_ms(55);//超时喂狗
		WWDG_SetCounter(0x40 | 54);
	}
}

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

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

相关文章

如何确保远程桌面安全

在数字化快速发展的今天,远程桌面技术广泛应用于企业办公、技术支持以及个人使用等领域。然而,随之而来的安全问题也不容忽视。白名单技术作为一种重要的安全防护手段,在确保远程桌面安全方面发挥着至关重要的作用。 一、白名单技术概述 白名…

ArcGIS批量设置多图层的三调地类符号

​​ 点击下方全系列课程学习 点击学习—>ArcGIS全系列实战视频教程——9个单一课程组合系列直播回放 01需求说明 这次我们要实现的是将多个地类图层批量符号化。比如将多个三调地类图斑批量符号化。 ​ 有什么好方法呢 ? 我们可以将一个图层利用三调符号库进行…

一作分享|eDNA揭示水库梯级影响下乌江流域鱼类多样性的空间分布

在梯级开发背景下,乌江干流鱼类群落结构已发生显著改变,凌恩客户重庆师范大学生命科学学院通过eDNA宏条码技术对对乌江干流全面系统的鱼类资源现状进行了调查。本期邀请一作程如丽老师对文章进行了解读分享。 文章信息 标题:eDNA reveals spa…

录视频软件有哪些,5种软件分享(2024最新)

你是否也在电脑上游览着各种生动且有趣的视频?看到他人分享的视频时,是否也会思考自己如何才能录制出精美的视频? 随着数字化时代的到来,视频内容已经深入到我们生活的方方面面,无论是娱乐、学习还是工作,…

【CS.DS】数据结构 —— 图: 图的相关概念大全

文章目录 1 图的类型2 图的基本术语References 1 图的类型 图是一种数据结构,由节点(顶点)和边组成。图可以用来表示各种网络结构,如社交网络、交通网络、计算机网络等。根据边的性质,图可以分为以下几种类型&#xf…

Nvidia Isaac Sim搭建仿真环境 入门教程 2024(4)

Nvidia Isaac Sim 入门教程 2024 版权信息 Copyright 2023-2024 Herman YeAuromix. All rights reserved.This course and all of its associated content, including but not limited to text, images, videos, and any other materials, are protected by copyright law. …

【b站-湖科大教书匠】1 计算机网络概述-计算机网络微课堂

课程地址:【计算机网络微课堂(有字幕无背景音乐版)】 https://www.bilibili.com/video/BV1c4411d7jb/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 1 概述 1.1 计算机网络在信息时代的作用 1.2 因特网概述…

PPT可以转换成Word吗?归纳了三种转换方式

PPT可以转换成Word吗?在当今快节奏的工作和学习环境中,不同格式文件之间的转换变得日益重要。PPT作为演示文稿制作的首选工具,广泛应用于会议演讲、教育培训等多个场景,而Word则是文档编辑与编排的基石。为了便于进一步编辑、分享…

ssh远程连接vps

打开ssh服务 sudo vi /etc/ssh/sshd_config查看是否好了 systemctl status sshd生成ssh私钥 生成在C:\Users\baozhongqi\.ssh 然后可以用自己密码登录或者用私钥登录 密码登录 ssh私钥登录 我使用的是tabby tabby下载 setup是Windows使用的版本 如果这样子不能ssh链接只能…

Redis通用命令详解

文章目录 一、Redis概述1.1 KEYS:查看符合模板的所有 key1.2 DEL:删除一个指定的 key1.3 EXISTS:判断 key 是否存在1.4 EXPIRE:给一个 key 设置有效期,有效期到期时该 key 会被自动删除1.5 TTL:查看一个 ke…

基于FPGA的Cordic向量模式原理及设计

目录 一、向量模式 1、向量模式原理 1.1 1.2 2、向量模式的MATLAB仿真 3、向量模式的FPGA实现 3.1 预处理 3.2 迭代 3.3 结果计算 一、向量模式 1、向量模式原理 已知直角坐标下一点(x,y),如何求该点在极坐标系的坐标&a…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] API集群访问频次统计(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 &#x1f…

多路h265监控录放开发-(4)完成摄像机管理的数据的增删改模型层代码(单例模式)

xcamera_config.h #pragma once #include <vector> #include <mutex> struct XCameraData {char name[1024] { 0 };char url[4096] { 0 }; //摄像机主码流char sub_url[4096] { 0 }; //摄像机辅码流char save_path[4096] { 0 }; //视频录制存放目…

RX8025/INS5T8025实时时钟-国产兼容RS4TC8025

该模块是一个符合I2C总线接口的实时时钟&#xff0c;包括一个32.768 kHz的DTCXO。 除了提供日历&#xff08;年、月、日、日、时、分、秒&#xff09;功能和时钟计数器功能外&#xff0c;该模块还提供了大量其他功能&#xff0c;包括报警功能、唤醒定时器功能、时间更新中断功能…

基于EKF算法估计电动汽车蓄电池的SOC

电动汽车&#xff08;EV&#xff09;作为未来汽车的一大发展方向&#xff0c;其动力源——动力锂电池组的荷电状态&#xff08;SOC&#xff09;估计显得尤为重要。SOC直接反应了电池组剩余容量的多少&#xff0c;是预测EV行驶里程、使用和维护电池组的重要依据。 然而&#xf…

读AI新生:破解人机共存密码笔记07概念和理论

1. 全球层面的智能 1.1. 仅仅为了阅读完当前世界上所有的出版物&#xff08;更不用说过去所有的书面材料&#xff09;就需要20万名全职人员&#xff0c;收听当前的广播则还需要6万名全职人员 1.1.1. 监听世界上所有的电话也是可能的&#xff08;这项工作需要大约2000万人&…

深度学习之计算机视觉

神经网络简介 全连接层和卷积层的根本区别在于权重在中间层中彼此连接的方式。图5.1描述了全连接层或线性层是如何工作的。 在计算机视觉中使用线性层或全连接层的最大挑战之一是它们丢失了所有空间信息&#xff0c;并且就全连接层使用的权重数量而言复杂度太高。例如&#xf…

电商爬虫API的定制开发:满足个性化需求的解决方案

一、引言 随着电子商务的蓬勃发展&#xff0c;电商数据成为了企业决策的重要依据。然而&#xff0c;电商数据的获取并非易事&#xff0c;特别是对于拥有个性化需求的企业来说&#xff0c;更是面临诸多挑战。为了满足这些个性化需求&#xff0c;电商爬虫API的定制开发成为了解决…

Spring Boot集成tensorflow实现图片检测服务

1.什么是tensorflow&#xff1f; TensorFlow名字的由来就是张量(Tensor)在计算图(Computational Graph)里的流动(Flow)&#xff0c;如图。它的基础就是前面介绍的基于计算图的自动微分&#xff0c;除了自动帮你求梯度之外&#xff0c;它也提供了各种常见的操作(op&#xff0c;…

使用 jQuery 选择器获取页面元素,然后利用 jQuery 对象的 css() 方法设置其 display 样式属性,从而实现显示和隐藏效果。

在页面中显示电影排行榜 当单击“&#xff08;收起&#xff09;”链接时&#xff0c;排行榜中后三项的电影名称隐藏而且链接的文本更改为“&#xff08;展开&#xff09; ” 当单击“&#xff08;展开&#xff09;”的链接时&#xff0c;后三项的电影名称重新显示且链接的文本…