stm32f407探索者开发板(二十)——独立看门狗实验

news/2024/4/24 0:30:35/文章来源:https://blog.csdn.net/m0_52592798/article/details/129114550

文章目录

  • 一、独立看门狗概述
    • 1.1 独立看门狗
  • 二、常用寄存器和库函数配置
    • 2.1 独立看门狗框图
    • 2.2 键值寄存器IWDG_KR
    • 2.3 预分频寄存器IWDG_PR
    • 2.4 重装载寄存器IWDG_RLR
    • 2.5 状态寄存器IWDG_SR
    • 2.6 IWDG独立看门狗操作库函数
  • 三、手写独立看门狗实验
    • 3.1 操作步骤
    • 3.2 iwdg.c
    • 3.3 iwdg.h
    • 3.4 mian.c

一、独立看门狗概述

在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称“看门狗”(watchdog) 。

在启动正常运行的时候,系统不能复位。
在系统跑飞(程序异常执行)的情况,系统复位,程序重新执行。

对于两个看门狗

  • STM32内置两个看门狗,提供了更高的安全性,时间的精确性和使用
    的灵活性。两个看门狗设备(独立看门狗/窗口看门狗)可以用来检测和
    解决由软件错误引起的故障。当计数器达到给定的超时值时,触发一个
    中断(仅适用窗口看门狗)或者产生系统复位。
  • 独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生
    故障它仍有效。
    • 独立看门狗适合应用于需要看门狗作为一个在主程序之外 能够完全独立工
      作,并且对时间精度要求低的场合。
  • 窗口看门狗由从APB1时钟分频后得到时钟驱动。通过可配置的时间窗口
    来检测应用程序非正常的过迟或过早操作。
    • 窗口看门狗最适合那些要求看门狗在精确计时窗口起作用的程序。

1.1 独立看门狗

  • 在键值寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗。此时计数器开始从其复位值0xFFF递减,当计数器值计数到尾值0x000时会产生一个复位信号(IWDG_RESET)。
  • 无论何时,只要在键值寄存器IWDG_KR中写入0xAAAA(通常说的喂狗), 自动重装载寄存器IWDG_RLR的值就会重新加载到计数器,从而避免看门狗复位。
  • 如果程序异常,就无法正常喂狗,从而系统复位。

二、常用寄存器和库函数配置

2.1 独立看门狗框图

在这里插入图片描述

  • 键值寄存器IWDG_KR: 0~15位有效
  • 预分频寄存器IWDG_PR:0~2位有效。具有写保护功能,要操作先取消写保护
  • 重装载寄存器IWDG_RLR:0~11位有效。具有写保护功能,要操作先取消写保护
  • 状态寄存器IWDG_SR:0~1位有效

2.2 键值寄存器IWDG_KR

在这里插入图片描述

取消写保护,写入0X5555;启动看门狗,写入0XCCCC;定时喂狗,写入0XAAAA

2.3 预分频寄存器IWDG_PR

在这里插入图片描述

就是进行分频配置

独立看门狗超时时间
溢出时间计算: Tout=((4×2^prer) ×rlr) /32 (M4)
时钟频率LSI=32K, 一个看门狗时钟周期就是最短超时时间。
最长超时时间= (IWDG_RLR寄存器最大值)X看门狗时钟周期

在这里插入图片描述

2.4 重装载寄存器IWDG_RLR

在这里插入图片描述

在键值寄存器内写入0XAAAA,重装载寄存器将进行重装载

2.5 状态寄存器IWDG_SR

在这里插入图片描述

2.6 IWDG独立看门狗操作库函数

void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess);//取消写保护:0x5555使能
void IWDG_SetPrescaler(uint8_t IWDG_Prescaler);//设置预分频系数:写PR
void IWDG_SetReload(uint16_t Reload);//设置重装载值:写RLR
void IWDG_ReloadCounter(void);//喂狗:写0xAAAA到KR
void IWDG_Enable(void);//使能看门狗:写0xCCCC到KR
FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG);//状态:重装载/预分频 更新

三、手写独立看门狗实验

FWLIB要加入
在这里插入图片描述

3.1 操作步骤

取消寄存器写保护
IWDG_WriteAccessCmd();
设置独立看门狗的预分频系数,确定时钟:
IWDG_SetPrescaler();
设置看门狗重装载值,确定溢出时间:
IWDG_SetReload();
使能看门狗
IWDG_Enable();
应用程序喂狗:
IWDG_ReloadCounter();

溢出时间计算:
Tout=((4×2^prer) ×rlr) /32 (M4)

3.2 iwdg.c

#include "iwdg.h"void IWDG_Init(u8 prer,u16 rlr)
{IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);IWDG_SetPrescaler(prer);IWDG_SetReload(rlr);IWDG_ReloadCounter();IWDG_Enable();}

3.3 iwdg.h

#ifndef __IWDG_H
#define __IWDG_H
#include "sys.h"//prer是预分频系数,rlr重载值
void IWDG_Init(u8 prer,u16 rlr);#endif

3.4 mian.c

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "beep.h"
#include "key.h"
#include "iwdg.h"//ALIENTEK 探索者STM32F407开发板 实验3
//按键输入实验-库函数版本 
//技术支持:www.openedv.com
//淘宝店铺:http://eboard.taobao.com
//广州市星翼电子科技有限公司    
//作者:正点原子 @ALIENTEK int main(void)
{ delay_init(168);  //初始化延时函数LED_Init();				//初始化LED端口 BEEP_Init();      //初始化蜂鸣器端口KEY_Init();       //初始化与按键连接的硬件接口delay_ms(500);LED0=0;				  	//先点亮红灯IWDG_Init(4,500);  //·/64·分频,0.5KHZ,2ms,所以500个周期,及1秒while(1){if(KEY_Scan(0)==WKUP_PRES){IWDG_ReloadCounter();}delay_ms(10);}}

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

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

相关文章

NLP学习笔记(九) 分词(上)

大家好,我是半虹,这篇文章来讲分词算法 1 概述 分词是自然语言处理领域中的基础任务,是文本预处理的重要步骤 简单来说,就是将文本段落分解为基本语言单位,亦可称之为词元 ( token\text{token}token ) 按照粒度的不…

[Flink]概述day1第4个视频完

一、概述什么是Flink是一种大数据计算引擎,用于对无界(流数据)和有界(批数据)数据进行有状态计算。特点1)批流一体:统一批处理、流处理2)分布式:Flink程序可以运行在多台…

python小基础-更多请自学,或者某某教程-2023-2-21 小扒菜的自学之路【1】

python基础 基础学习 自己跟着菜鸟教程看的一些基础,会java或者js的话,1个半小时就可以over 好久没更新博客了,现在慢慢来发吧,基础内容不太多,自己理解会很快的(下面是一段个人的小经历,大家也可以看看,嘻嘻) 假期看了灵魂摆渡几部电视剧,无聊中收到了一个python爬虫公开课穷,…

单Buffer的缺点与改进方法

单Buffer的缺点与改进方法 文章目录单Buffer的缺点与改进方法一、 单Buffer的缺点二、 使用多Buffer来改进三、 内核驱动程序、APP互相配合使用多buffer致谢参考资料 内核自带的LCD驱动程序 IMX6ULL驱动源码:Linux-4.9.88\drivers\video\fbdev\mxsfb.c 一、 单Buf…

I/O多路复用模型实现——epoll

epoll IO多路复用模型实现机制I/O多路复用epollepoll_create(int size)epoll_ctl(int epfd, int op, int fd, struct epoll_event *event)epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout)epoll eventepoll流程I/O多路复用 I/O 多路复用的本质…

Java使用MD5加盐对密码进行加密处理,附注册和登录加密解密处理

前言 在开发的时候,有一些敏感信息是不能直接通过明白直接保存到数据库的。最经典的就是密码了。如果直接把密码以明文的形式入库,不仅会泄露用户的隐私,对系统也是极其的不厉,这样做是非常危险的。 那么我们就需要对这些铭文进…

MyBatis分页插件

目录 分页插件 Mybatis插件典型适用场景 实现思考 第一个问题 第二个问题 自定义分页插件 分页插件使用 添加pom依赖 插件注册 调用 代理和拦截是怎么实现的 PageHelper 原理 分页插件 MyBatis 通过提供插件机制,让我们可以根据自己的需要去增强MyBati…

去中心化开源社交平台Misskey

本文是应网友 anthony084 的要求写的; 什么是 Misskey ? Misskey 是一个开源、去中心化的社交媒体平台,发帖方式类似于微博和推特。 去中心化则意味着一个 Misskey 实例可以与其他 Misskey 实例进行相互连接,在 Fediverse (Activi…

广义学习矢量量化(GLVQ)分类算法介绍和代码实现

广义学习矢量量化(Generalized Learning Vector Quantization,GLVQ)是一种基于原型的分类算法,用于将输入数据分配到先前定义的类别中。GLVQ是LVQ(Learning Vector Quantization)的一种扩展形式&#xff0c…

性能分析之vmstat工具

vmstat 工具的使用 命令:vmstat 1 60> /tmp/cpu.txt 说明:每秒采样 1 次,共采集 100 次 格式化显示:cat /tmp/cpu.txt|column -t (1)procs r: 表示运行和等待 CPU 时间片的进程数&#xff0…

go进阶(1) -深入理解goroutine并发运行机制

并发指的是同时进行多个任务的程序,Web处理请求,读写处理操作,I/O操作都可以充分利用并发增长处理速度,随着网络的普及,并发操作逐渐不可或缺 一、goroutine简述 在Golang中一个goroutines就是一个执行单元&#xff…

多种调度模式下的光储电站经济性最优储能容量配置分析(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Crafting interpreters 中文翻译(全),持续修正

本书在线地址 http://craftinginterpreters.com/ 感谢作者 作者用近 4 年的时间持续创作和改进本书,并把其 Web 版本公开在网上。这本纸质书于今年 7 月出版,立刻在 Hacker News 等网络媒介上引起关注和讨论。 书中作者首先定义了一个动态类型的语言 …

23年PMP真的值得考吗?分析+资料分享

我觉得,如过是真的想学习项目管理,或者工作要求考PMP,招聘要求又的确“PMP证书”优先,那考一个是划算的,毕竟在项目管理这一块,PMP是专业和知名度最高的证书了。 它是由美国项目管理协会(PMI)在全球范围内推…

数组-二分查找-搜索插入位置/在排序数组中查找元素的第一个和最后一个位置/x 的平方根/有效的完全平方数

二分查找 35搜索插入位置 https://leetcode.cn/problems/search-insert-position/submissions/ class Solution:def searchInsert(self, nums: List[int], target: int) -> int:l 0r len(nums)-1# // 整数除法 int /浮点数除法while(l<r):mid l (r - l)//2if nums…

二叉树——找树左下角的值

找树左下角的值 链接 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1 示例 2: 输入: [1,2,3,4,null,5,6,null,null,7] 输出: 7 递归法 二叉树的 最底层 最左…

一维,二维差分の详解(简单易懂)

一,差分定义差分,就是前缀和的逆运算。二,具体过程1.一维差分例题构造差分数组首先给定一个原数组a&#xff1a;a[1], a[2], a[3],,,,,, a[n];然后我们构造一个数组b &#xff1a; b[1], b[2], b[3],,,,,, b[i];使得 a[i] b[1] b[2] b[3] ,,,,,, b[i]也就是说&#xff0c;…

Redis分布式锁实现及使用

文章目录分布式锁全局ID生成器一人一单实现超卖问题一人一单分布式锁Redis setnx实现分布式锁Redis在业内解决秒杀等业务场景有非常广的应用&#xff0c;如何设计实现一个分布式锁是解决超卖、一人一单问题非常重要… 分布式锁 分布式锁是控制分布式系统之间同步访问共享资源的…

CRM客户管理系统的作用和四大优势

CRM系统是一种以客户管理为核心&#xff0c;帮助营销、销售、服务部门实现业务自动化&#xff0c;为企业进行客户数据的收集、管理和分析&#xff0c;提高客户体验和留存&#xff0c;实现以客户为中心的管理模式的企业管理工具。那么&#xff0c;企业为什么要使用CRM系统&#…

Javaweb之mybits入门

2.1 Mybatis概述 2.1.1 Mybatis概念 MyBatis 是一款优秀的持久层框架&#xff0c;用于简化 JDBC 开发 MyBatis 本是 Apache 的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code&#xff0c;并且改名为MyBatis 。2013年11月迁移到Github …