STM32(八):独立看门狗 (标准库函数)

news2024/11/20 7:12:07

前言

上一篇文章介绍了STM32单片机中的USART串口通信,这篇文章我们来介绍一下如何用STM32单片机中的独立看门狗来实现检测按键点灯的程序。

一、实验原理

单片机系统会由于受到外界的干扰,而造成程序执行紊乱,系统无法正常运行。为了防止这种情况的发生,产生了一种用于检测程序运行状态的电路或芯片,俗称看门狗(Watchdog)。

1.看门狗的介绍

看门狗(Watchdog)是一种硬件定时器,用于监测程序执行是否正常,并在系统出现故障或死锁时重启系统。看门狗可以分为独立与单片机外部的看门狗芯片和单片机内集成的看门狗外设模块两种,提供了更高的安全性、时间的精确性和使用的灵活性。而STM32F10x内置两个看门狗:IWDG(独立看门狗)WWDG(窗口看门狗)

  • IWDG(独立看门狗)

  由专门的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。

  • WWDG(窗口看门狗)

        由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。

看门狗有一个输入信号,也称“喂狗”;有一个输出信号给MCU的复位端。系统运行后启动看门狗计数器,看门狗开始计数,当计数满后(一定时间)未收到清零信号(喂狗),看门狗计数器会溢出,引起看门狗中断,造成系统复位。

而我们主要介绍一下IWDG(独立看门狗)。

2.IWDG(独立看门狗)

独立看门狗(Independent watchdog,IWDG)的时钟系统是由一个12位递减计数器和一个8位的预分频器构成的使用独立40KHZ内部低速LSI RC振荡器提供,可在停止和待机模式下工作。

要想搞清楚IWDG的原理,那么首先还是先要学会看图,原理图如图所示:

工作原理:

  • 在键寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗;
  • 此时计数器开始从其复位值0xFFF递减计数。当计数器计数到末尾0x000时,会产生一个复位信号(IWDG_RESET)。
  • 无论何时,只要在键寄存器IWDG_KR中写入0xAAAA(喂狗), IWDG_RLR中的值就会被重新加载到计数器,从而避免产生看门狗复位 。
  • IWDG_PR和IWDG_RLR寄存器具有写保护功能。要修改这两个寄存器的值,必须先向IWDG_KR寄存器中写入0x5555
值得一提的是,看门狗功能处于VDD供电区,即在停机和待机模式时仍能正常工作。

3.IWDG的寄存器

STM32单片机的IWDG相关的寄存器有:键寄存器IWDG_KR、重装载寄存器IWDG_RLR、预分频寄存器IWDG_PR和状态寄存器IWDG_SR。下面将对其进行简单的说明:

1.键寄存器IWDG_KR

一个控制寄存器,主要有三种控制方式,由位15:0决定。

 2.重装载寄存器IWDG_RLR

一个12位的寄存器,用于存放重装载值,低12位有效,即最大值为4096,这个值的大小决定着独立看门狗的溢出时间。   

计算溢出的时间公式: Tout  = (PSC * RLR)/ LSI
其中,PSC是分频系数,RLR计数器重装载值,LSI一般是40KHz。

 3.预分频寄存器IWDG_PR

允许选择一个预分频因子,该因子决定了从低速内部时钟(LSI)到看门狗计时器的时钟频率。预分频值通过对LSI时钟频率进行分频来降低,从而增长看门狗计时器的计数周期。

预分频的算法公式是:PSC = 4 * 2 PRER

其中PRER就是IWDG_PR的值。

 4.状态寄存器IWDG_SR

提供了有关看门狗重载操作和预分频值更新的实时信息,通过监测PVU和RVU位的状态,软件可以了解看门狗计时器的配置是否已经完成,从而确保看门狗定时器以预期的方式运行。

二、实验步骤

1.引脚初始化

首先是使能预分频寄存器PR和重装载寄存器RLR

IWDG_WriteAccessCmd( IWDG_WriteAccess_Enable );

接下来是设置预分频器值和设置重装载寄存器值,并把重装载寄存器的值放到计数器中,具体设置的方法可以看下图

/* 设置预分频器值 */
IWDG_SetPrescaler( prv );
	
/* 设置重装载寄存器值 */
IWDG_SetReload( rlv );
	
/* 把重装载寄存器的值放到计数器中 */
IWDG_ReloadCounter();

其中

  • prv:看门狗时钟预分频值(IWDG_ PR值);
  • rlv:看门狗的重装载值(IWDG_ RLR的值) ; 
  • 溢出时间的计算公式:Tout=((4x2^prv ) * rlv ) /40 

以下为prv所能取到的值

 最后是并使能 IWDG

/* 使能 IWDG */
IWDG_Enable(); 

2.喂狗函数

把重装载寄存器的值放到计数器中,喂狗,防止IWDG复位,当计数器的值减到0的时候会产生系统复位。

void IWDG_Feed(void)
{
	IWDG_ReloadCounter();
}

3.按键检测

key.c文件中加入KEY_lwdg(), IWDG_Feed()是喂狗,如果不喂狗,系统则会复位,LD1则会亮一次,如果在1s时间内准时喂狗的话,则LED1,LED2,LED3会常灭。

ps:这边记得需要将bsp_iwdg.h也加入key.h文件中

void KEY_lwdg(void)
{
	/* 读取按键状态 */
	int key1State = KEYx_Choice(1);
	
   /* 短按按键1 */
	if (key1State == 1)
	{
	IWDG_Feed();
	}

}

三、实操代码

程序分为3个文件:bsp_iwdg.c、bsp_iwdg.h、main.c

1.bsp_iwdg.c 

/* 包含头文件 ----------------------------------------------------------------*/
#include "bsp/wdg/bsp_iwdg.h"

void IWDG_Config(uint8_t prv ,uint16_t rlv)
{	
	/* 使能 预分频寄存器PR和重装载寄存器RLR可写 */
	IWDG_WriteAccessCmd( IWDG_WriteAccess_Enable );
	
	/* 设置预分频器值 */
	IWDG_SetPrescaler( prv );
	
	/* 设置重装载寄存器值 */
	IWDG_SetReload( rlv );
	
	/* 把重装载寄存器的值放到计数器中 */
	IWDG_ReloadCounter();
	
	/* 使能 IWDG */
	IWDG_Enable();	
}

/**
  * 函数功能: 喂狗
  */
void IWDG_Feed(void)
{
	/* 把重装载寄存器的值放到计数器中,喂狗,防止IWDG复位
	   当计数器的值减到0的时候会产生系统复位 */
	IWDG_ReloadCounter();
}

2.bsp_iwdg.h

#ifndef __BSP_IWDG_H__
#define	__BSP_IWDG_H__

/* 包含头文件 ----------------------------------------------------------------*/
#include <stm32f10x.h>

/* 类型定义 ------------------------------------------------------------------*/
/* 宏定义 --------------------------------------------------------------------*/
/* 扩展变量 ------------------------------------------------------------------*/
/* 函数声明 ------------------------------------------------------------------*/
void IWDG_Feed(void);
void IWDG_Config(uint8_t prv ,uint16_t rlv);

#endif /* __BSP_IWDG_H__ */

3.main.c


/* 包含头文件 ----------------------------------------------------------------*/
#include "stm32f10x.h"
#include "bsp/led/bsp_led.h"
#include "bsp/key/bsp_key.h"
#include "bsp/delay/delay.h"
#include "bsp/systick/bsp_SysTick.h"
#include "bsp/GeneralTIM/bsp_GeneralTIM.h" 
#include "bsp/wdg/bsp_iwdg.h"
/* 函数体 --------------------------------------------------------------------*/
//static uint16_t timecount;
__IO uint16_t timer_count=0;
/**
  * 函数功能: 主函数.
  * 输入参数: 无
  * 返 回 值: 无
  * 说    明: 无
  */
int main(void)
{

/* 初始化板载LED灯 */
  LED_GPIO_Init();
  
  /* 初始化按键 */  
  KEY_GPIO_Init();
  Delay(1000);
  
/* IWDG 1s 超时溢出 */ 
IWDG_Config(IWDG_Prescaler_64 ,625); 
  
  LED1_OFF;
  LED2_OFF;
  LED3_OFF;

  while (1)
  {	
		KEY_lwdg();
    }

}

四、实验效果

独立看门狗

结束语

本文以STM32VET6为例讲解了用STM32单片机中用IWDG(独立看门狗)来实现检测按键点灯的程序。希望对大家有所帮助!如果还有什么问题,欢迎评论区留言,谢谢!

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

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

相关文章

从学士-硕士-博士-博士后-副教授-教授-优青-杰青-长江-院士:一文看懂学术巨人的成长历程

会议之眼 快讯 学术之路&#xff0c;如同攀登一座高耸入云的山峰&#xff0c;需要毅力、智慧和不断的求知探索。从奠定基础的学士&#xff0c;到站在学术巅峰的院士。这条成长之路充满了挑战和机遇。 如果把学术界比作王者荣耀&#xff0c;那么学者们的成长历程就像是在进行一…

mediasoup基础概览

提示&#xff1a;本文为之前mediasoup基础介绍的优化 mediasoup基础概览 架构&#xff1a;2.特性&#xff1a;优点缺点 3.mediasoup常见类介绍js部分c 4.mediasoup类图5.业务类图 Mediasoup 是一个构建在现代 Web 技术之上的实时通信&#xff08;RTC&#xff09;解决方案&#…

Day13:vw 和 vh 基本使用

目标&#xff1a;使用 vw 和 less 完成移动端的布局。 一、vw 适配方案 1、vw 和 vh 基本使用 vw 和 vh 是相对单位&#xff0c;相对视口尺寸计算结果。 vw&#xff1a;viewport width&#xff08;1vw 1/100视口宽度 &#xff09;vh&#xff1a;lviewport height ( 1vh 1/…

企业为么要建设数据可视化大屏?简要的告诉您答案

1、在数字时代的浪潮中&#xff0c;数据已经成为企业决策和操作的重要基础。因此&#xff0c;“数据可视化大屏方案”逐渐成为业界关注的焦点。 2、数据可视化大屏通过将复杂的数据集合以直观的形式展现出来&#xff0c;帮助决策者快速把握信息&#xff0c;让决策者做出更加明…

Python04:python代码设置作者/创建时间/文件名称

我们新建一个py文件时&#xff0c;如果希望文件开头有固定的内容&#xff0c;怎么设置呢&#xff1f; 比如代码作者、文件创建时间等。。。 1、点击左上角【Python】–>【Settings】设置 2、在弹出的新窗口找到【File and Code Templates】–>【Python Script】–>在右…

【javaEE初阶】

&#x1f308;&#x1f308;&#x1f308;关于java ⚡⚡⚡java的由来 我们这篇文章主要是来介绍javaEE&#xff0c;一般称为java企业版&#xff0c;实际上java的历史可以追溯到上个世纪90年代&#xff0c;当时主要的语言主流的还是C语言和C&#xff0c;但是在那个时期嵌入式初…

Unity中帧动画素材的切割设置

有几个问题&#xff0c;美术在给我们帧动画的时候&#xff0c;一般都是给一个比较大的图&#xff0c;然后进行切割成多个sprite&#xff0c;导入到animation中 一般来说&#xff0c;进行那个autoSlide&#xff0c;自动切割就可以了 这个自动切割的图片会沿着有像素的最小包围…

运动会信息管理系统(Springboot+MySQL)

本课题旨在实现对运动会信息的全面管理&#xff0c;提供用户友好的界面和高效的操作体验。系统的基础功能包括运动员报名比赛、比赛成绩查询、资讯留言等。为了确保系统的高扩展性和稳定性&#xff0c;选用主流的开发技术&#xff0c;实现规范的项目结构和高效的性能。 技术选型…

Linux基础 (十四):socket网络编程

我们用户是处在应用层的&#xff0c;根据不同的场景和业务需求&#xff0c;传输层就要为我们应用层提供不同的传输协议&#xff0c;常见的就是TCP协议和UDP协议&#xff0c;二者各自有不同的特点&#xff0c;网络中的数据的传输其实就是两个进程间的通信&#xff0c;两个进程在…

VS2022,DLL1调用lib,lib调用DLL2

DLL1调用lib&#xff0c;lib调用DLL2 问题1&#xff1a;为什么在dll1中需要引入dll2的.lib文件 当你有一个工程&#xff08;dll1&#xff09;调用静态库&#xff08;lib&#xff09;&#xff0c;而静态库&#xff08;lib&#xff09;又调用另一个DLL&#xff08;dll2&#xf…

3D模型贴了白膜渲染漆黑一片---模大狮模型网

在3D建模与渲染的世界里&#xff0c;白膜通常作为基础的材质贴图&#xff0c;用于呈现模型的基本形状和轮廓。然而&#xff0c;当我们在3D Max软件中为模型贴上白膜后&#xff0c;却发现渲染结果漆黑一片&#xff0c;这无疑是一个令人困扰的问题。 一、材质与贴图问题 首先&am…

高通开发系列 - 借助libhybris库实现Linux系统中使用Andorid库(2)

By: fulinux E-mail: fulinuxsina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅&#xff01; 你的喜欢就是我写作的动力&#xff01; 返回&#xff1a;专栏总目录 目录 参考上一篇文章&#xff1a;高通开发系列 - 借助libhybris库实现Linux系统中使用And…

报名倒计时 2 天!龙蜥社区系统安全 Meetup 演讲亮点一览

各位开发者们&#xff1a; 龙蜥社区“走进系列”第 10 期《龙蜥社区系统安全 MeetUp》&#xff0c;由浪潮信息联合龙蜥社区主办&#xff0c;将于 2024 年 6 月 14 日&#xff08;周五&#xff09;在北京召开&#xff01;现场活动报名截止时间 6 月 7 日&#xff0c;限定 80 名…

Windows下SVN文件损坏,启动服务报错1067

之前碰到过一次&#xff0c;忘记最后怎么解决的了&#xff0c;只记得大概原理和原因&#xff0c;以及解决办法。 1067错误码&#xff0c;很多地方都会碰到&#xff0c;mysql也会有&#xff0c;看来应该是windows系统的错误码。跟具体程序无关。所以直接百度“SVN”、“1067”…

Vue3中的常见组件通信之mitt

Vue3中的常见组件通信之mitt 概述 ​ 在vue3中常见的组件通信有props、mitt、v-model、 r e f s 、 refs、 refs、parent、provide、inject、pinia、slot等。不同的组件关系用不同的传递方式。常见的撘配形式如下表所示。 组件关系传递方式父传子1. props2. v-model3. $refs…

重要经济数据对行情的影响有多大?

金融市场上的消息非常多&#xff0c;可以来自不同国家、不同大型企业&#xff0c;也可以由不同机构统计公布&#xff0c;甚至是各国政府或中央银行的发表。在宏观经济层面上&#xff0c;所有政经消息都属于金融市场的风险事件&#xff0c;大多能引起市场波动&#xff0c;因此投…

STM32作业实现(一)串口通信

目录 STM32作业设计 STM32作业实现(一)串口通信 STM32作业实现(二)串口控制led STM32作业实现(三)串口控制有源蜂鸣器 STM32作业实现(四)光敏传感器 STM32作业实现(五)温湿度传感器dht11 STM32作业实现(六)闪存保存数据 STM32作业实现(七)OLED显示数据 STM32作业实现(八)触摸按…

小米SU7智能座舱介绍,果然有亮点!

2024 年,小米 SU7 横空出世,从开始的怀疑到发布后仅 24h 就达到了 8W 台的订单量,火到出圈的具象化。智能手机厂家造车,之前的华为做了榜样,小米作为汽车制造中又一条鲶鱼,能否给智能汽车市场带来新的契机? 小米造车可谓是各方位进行全新打造,包括座舱、底盘、智驾、车…

word自带公式编辑器技巧

1.实现多行公式换行且对齐 1.1 准备阶段&#xff08;默认Unicode模式&#xff09; 进入公式编辑模式&#xff0c;输入\eqarray&#xff0c;紧接着按下空格键输入空格&#xff0c;如下 1.2 实现换行和对齐 将要编辑的公式输入到括号内 &&#xff1a;实现位置对齐 &…

IP协议1.0

基本概念&#xff1a; • 主机: 配有IP地址, 但是不进⾏路由控制的设备; • 路由器: 即配有IP地址, ⼜能进⾏路由控制; • 节点: 主机和路由器的统称; IP协议的报头 • 4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4. • 4位头部⻓度(header length): IP头部的⻓…