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

前言

上一篇文章介绍了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.mzph.cn/diannao/20675.shtml

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

相关文章

STL:stack和queue

文章目录 stack的介绍和使用stack的介绍stack的使用stack的模拟实现 queue的介绍和使用queue的介绍queue的使用queue的模拟实现 priority_queue的介绍和使用priority_queue的介绍priority_queue的使用优先级队列的模拟实现 deque的介绍deque的结构deque的缺陷为什么选择deque作…

Django ORM魔法:用Python代码召唤数据库之灵!

探索Django ORM的神奇世界&#xff0c;学习如何用Python代码代替复杂的SQL语句&#xff0c;召唤数据库之灵&#xff0c;让数据管理变得轻松又有趣。从基础概念到高级技巧&#xff0c;阿佑带你一步步成为Django ORM的魔法师&#xff0c;让你的应用开发速度飞起来&#xff01; 文…

golang线程池ants-四种使用方法

目录 1、ants介绍 2、使用方式汇总 3、各种使用方式详解 3.1 默认池 3.2 普通模式 3.3 带参函数 3.4 多池多协程 4、总结 1、ants介绍 众所周知&#xff0c;goroutine相比于线程来说&#xff0c;更加轻量、资源占用更少、无线程上下文切换等优势&#xff0c;但是也不能…

前端Vue小兔鲜儿电商项目实战Day06

一、本地购物车 - 列表购物车 1. 基础内容渲染 ①准备模板 - src/views/cartList/index.vue <script setup> const cartList [] </script><template><div class"xtx-cart-page"><div class"container m-top-20"><div…

vs2019 无法打开QT的UI文件

/* * --------------------------- Microsoft Visual StudioQt5.15.2\5.15.2\msvc2019_64 --------------------------- D:\QT_Project_vs\QtWidgetsApplication1\QtWidgetsApplication1\QtWidgetsApplication1.ui 无法打开文件。 --------------------------- 确定 -------…

基于LQR控制算法的电磁减振控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于LQR控制算法的电磁减振控制系统simulink建模与仿真。仿真输出控制器的收敛曲线。 2.系统仿真结果 3.核心程序与模型 版本&#xff1a;MATLAB2022a 08_029m 4.系统原理…

系统架构设计师【第5章】: 软件工程基础知识 (核心总结)

文章目录 5.1 软件工程5.1.1 软件工程定义5.1.2 软件过程模型5.1.3 敏捷模型5.1.4 统一过程模型&#xff08;RUP&#xff09;5.1.5 软件能力成熟度模型 5.2 需求工程5.2.1 需求获取5.2.2 需求变更5.2.3 需求追踪 5.3 系统分析与设计5.3.1 结构化方法5.3.2 面向对象…

Qt6 mathgl数学函数绘图

1. 程序环境 Qt6.5.1, mingw11.2mathgl 8.0.1: https://sourceforge.net/projects/mathgl/,推荐下载mathgl-8.0.LGPL-mingw.win64.7z,Windows环境尝试自己编译mathgl会缺失一些库,补充完整也可以自己编译,路径"D:\mathgl-8.0.LGPL-mingw.win64\bin"添加至系统环境…

复试不考机试,初试300分以上,上岸稳了?东北林业大学计算机考研考情分析!

东北林业大学&#xff08;Northeast Forestry University&#xff09;&#xff0c;简称东北林大&#xff08;NEFU&#xff09;&#xff0c;位于黑龙江省哈尔滨市&#xff0c;是一所以林科为优势、林业工程为特色的中华人民共和国教育部直属高校&#xff0c;由教育部、国家林业局…

Java多线程--volatile关键字

并发编程的三大特性 可见性有序性原子性 可见性 为什么会有可见性问题&#xff1f; 多核CPU 为了提升CPU效率&#xff0c;设计了L1&#xff0c;L2&#xff0c;L3三级缓存&#xff0c;如图。 如果俩个核几乎同时操作同一块内存&#xff0c;cpu1修改完&#xff0c;当下是对c…

APISIX的安装与测试(springboot服务测试)

安装&#xff1a; 1.1安装依赖&#xff1a; curl https://raw.githubusercontent.com/apache/apisix/master/utils/install-dependencies.sh -sL | bash -1.2 安装 OpenResty yum-config-manager --add-repo https://openresty.org/package/centos/openresty.reposudo yum i…

英语翻译程序,可以对用户自己建立的词汇表进行增删查改

⑴ 自行建立一个包含若干英文单词的词汇表文件&#xff0c;系统初始化时导入内存&#xff0c;用于进行句子翻译。 ⑵ 用户可以输入单词或者句子&#xff0c;在屏幕上显示对应翻译结果。 ⑶ 用户可对词汇表进行添加和删除&#xff0c;并能将更新的词汇表存储到文件中。 #defi…

Adobe Acrobat DC无法卸载

控制版面、电脑管家等均无法卸载&#xff0c;使用自身的remove也不能卸载 解决方法&#xff1a;删除Adobe Acrobat DC的注册表 1、首先打开注册列表&#xff1a; 2、根据圈出来的信息&#xff0c;找到以下路径&#xff1a; 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Inst…

现如今AI大环境究竟怎样?

遇到难题不要怕&#xff01;厚德提问大佬答&#xff01; 厚德提问大佬答10 你是否对AI绘画感兴趣却无从下手&#xff1f;是否有很多疑问却苦于没有大佬解答带你飞&#xff1f;从此刻开始这些问题都将迎刃而解&#xff01;你感兴趣的话题&#xff0c;厚德云替你问&#xff0c;你…

车载电子电器架构 —— 智能座舱技术范围(万字长文精讲)

车载电子电器架构 —— 智能座舱技术范围 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明…

MySQL性能分析工具——EXPLAIN

性能分析工具——EXPLAIN 1、概述 定位了查询慢的SQL之后&#xff0c;我们就可以使用EXPLAIN或DESCRIBE工具做针对性的分析查询语句 。 DESCRIBE语句的使用方法与EXPLAIN语句是一样的&#xff0c;并且分析结果也是一样的。 MySQL中有专门负责优化SELECT语句的优化器模块&…

FreeRTOS基础(五):任务挂起与恢复

今天我们将探讨FreeRTOS中的两个非常重要的函数&#xff1a;任务挂起和恢复函数。在实际的嵌入式系统开发中&#xff0c;我们常常需要在特定条件下暂停某些任务的执行&#xff0c;而在满足某些条件后再恢复这些任务的执行。这就像我们日常生活中的“暂停”和“继续”按钮。无论…

【Kubernetes】Pod理论详解

一、Pod基础概念&#xff1a; Pod是kubernetes中最小的资源管理组件&#xff0c;Pod也是最小化运行容器化应用的资源对象。一个Pod代表着集群中运行的一个进程。kubernetes中其他大多数组件都是围绕着Pod来进行支撑和扩展Pod功能的&#xff0c;例如&#xff0c;用于管理Pod运行…

Unix、Linux 软件包管理快速入门对照

Linux&#xff08;RHEL、Ubuntu&#xff09;或者 Unix&#xff08;macOS、FreeBSD&#xff09;可以参看下表快速入门: 命令功能/系统Darwin (macOS)FreeBSDDebian/UbuntuRHEL&#xff08;dnf yum&#xff09;搜索和查找软件包brew searchpkg searchapt listyum list查看软件包…

生态系统服务功能之碳储量

大家好&#xff0c;这期开始新生态系统服务功能即碳储量的计算&#xff0c;这部分较简单&#xff0c;下面让我们开始吧&#xff01;&#xff01;&#xff01; 碳储量的计算公式 生态系统通过从大气中释放和吸收二氧化碳等温室气体来调节地球气候&#xff0c;而森林、 草原和沼…