STM32--IWDG独立看门狗实验

news/2024/6/3 18:01:04 标签: stm32, 单片机, c++, 嵌入式硬件, c语言

STM32F1系列内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障;当计数器达到给
定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。

我们举一个例子来更好地理解看门狗。比如我们设定一个设定的看门狗触发时间128,如果我们在没有喂狗的情况下,当我们的时钟计时器数到128的时候,就会触发系统复位,整个单片机重启,重新开始计时。当再次数到128的时候,就再次重启,如此往复。于是如果单片机发生错误,无法继续进行推进到喂狗复位,在没有喂狗复位时钟的时候单片机就会重启,可能能解决相关的出错。

但是,单片机反复的重启对整个系统的危险性不亚于单片机出错或者死机。于是我们有一个“喂狗”计时时钟复位程序,来保证我们正常运行时候不发生看门狗系统复位。比如在接下来的LED循环闪烁的情况下,因为在正常运行时候,一个循环只有40ms(不考虑误差),我们在第40ms的时候就会进行喂狗,然后给看门狗计时时钟复位,使之重新开始计时。如果发生错误导致while循环没有重复,则看门狗复位程序不会触发,则会导致看门狗系统复位触发,导致整个单片机程序重启,这样一般能解决普通的软件出错。

今天我们介绍的独立看门狗(IWDG)由专用的40kHz的低速时钟驱动,即使主时钟发生故障它也仍然有效。窗口看门狗由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。

接下来我们来编辑我们的实验代码。

首先编辑iwdg.h头文件:

#ifndef __IWDG_H
#define __IWDG_H

#include "./SYSTEM/sys/sys.h"

void iwdg_init(uint8_t prer, uint16_t rld);
void iwdg_feed(void);

#endif

接下来我们再编译iwdg.c文件:

#include "./BSP/IWDG/iwdg.h"

IWDG_HandleTypeDef g_iwdg_handle;

void iwdg_init(uint8_t prer, uint16_t rld){

    g_iwdg_handle.Instance = IWDG;
    g_iwdg_handle.Init.Prescalar = prer;//分频系数
    g_iwdg_handle.Init.Reload = rld;//重装载值

    HAL_IWDG_Init(&g_iwdg_handle);
}

//喂狗函数
void iwdg_feed(void){
    
    HAL_IWDG_Refresh(&g_iwdg_handle);
}

这里有两个重要参数prer分频系数和rld重装载值,是与看门狗的复位计时有关系的。我们会在之后的分析笔记中着重讲解这两个参数。

最后我们来编辑main主函数:

#include "./BSP/IWDG/iwdg.h"
#include "./BSP/LED/led.h"
#include "./BSP/DELAY/delay.h"
#include "./SYSTEM/sys/sys.h"

int main(){
    HAL_Init();
    sys_stm32_clock_init(RCC_PLL_MUL9);
    delay_init(72);
    led_init();
    iwdg_init(IWDG_PRESCALAR_16 , 1250);
    
    printf("Please feed the dog!");
    while(1){

        delay_ms(1000);
        iwdg_feed();
        printf("You have already fed the dog.");
    }

}

到这里我们的实验代码就写完了。


http://www.niftyadmin.cn/n/204552.html

相关文章

【Java递推与递归】P1255 数楼梯

数楼梯 题目描述 楼梯有 NNN 阶,上楼可以一步上一阶,也可以一步上二阶。 编一个程序,计算共有多少种不同的走法。 输入格式 一个数字,楼梯数。 输出格式 输出走的方式总数。 样例 #1 样例输入 #1 4样例输出 #1 5提示 …

KVM虚拟化(一)

文章目录1. 云计算介绍2. 云计算的服务类型3. 云计算的应用4. 云计算的基础KVM虚拟化1. 云计算介绍 云计算是一种按量付费的模式!云计算的底层是通过虚拟化技术来实现的! 2. 云计算的服务类型 (1)IAAS 基础设施即服务(infrastructure as a…

同城配送物流3大痛点4大趋势

现如今人们生活水平不断提高各式各样的新型行业涌入市场给人们带来了无限的便利,同城物流配送行业也应运而生,同时同城配送已经离不开人们的生活,每个行业的兴起都是与时代的发展相关联,那么同城物流配送服务有哪些痛点&#xff1…

全链路监控:方案概述

问题背景 随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台…

【ns-3】打开PyViz可视化工具

文章目录前言1. 修改配置选项,打开python绑定配置2. 重新编译ns3前言 在之前的【ns-3】零基础安装教程中,我们已经介绍了如何下载、安装、编译ns-3.37。但是,有细心的读者可能已经发现,在之前的编译过程中,PyViz可视化…

上海租房公积金提取/失业金领取

文章目录1. 上海公积金提取1.1 基本步骤1.2 网签合同 vs 租赁备案1.2.1 基本说明1.2.2 使用区别2. 失业金申领2.1 基本步骤2.2 后续问题1. 上海公积金提取 1.1 基本步骤 直接去随申办搜索公积金,这里有两项,一个是未网签备案,一个是网签备案…

webrtc服务器开发--搭建静态页面访问服务

文章目录使用 go 语言创建 http server编写 go 程序编译创建静态 html 页面编写 html 程序打开某为云服务器公网IP 的 8080 端口启动服务器在浏览器访问 share.html 页面接着上一节 webrtc服务器开发–搭建环境 使用 go 语言创建 http server cd ~/dev/go mkdir screen_share…

【js】基础知识点--语句,break和continue,switch,with,for..in,do-while,while

一、break和continue语句&#xff0c;常用 break 语句会立即退出循环&#xff0c;强制继续执行循环后面的语句。而 continue 语句虽然也是立即退出循环&#xff0c;但退出循环后会从循环的顶部继续执行 var num 0; for (var i1; i < 10; i) {if (i % 5 0) {break;}num; …