STM32学习笔记:IWDG_独立看门狗

2023-05-16

 1、简介

独立看门狗就是一个12位的递减计数器,最大值0xFFF;
计数器的值从某一个值减到0时,系统产生一个复位信号(IWDG_RESET);
在计数器没减到0之前,刷新计数器的值,就不会产生复位信号(就是要喂狗)。

1.1 IWDG性能

        (1)自由运行的递减计数器
        (2)时钟由独立的RC振荡器提供(停止和待机模式下仍可工作)

1.2 IWDG功能

  •       开启IWDG:键寄存器写入(0xCCCC);
  •       计数器从0xFFF递减计数;
  •       计数到0x000,产生复位信号(IWDG_RESET);
  •       键寄存器中写入(0xAAAA),重装载寄存器中的值被加载到计数器,避免看门狗复位。

1.3 硬件看门狗

        如果启用了“硬件看门狗”,系统上电复位后,看门狗自行运行;
        如果计数器计数结束前,软件没有向键寄存器写入相应的值,系统就会复位。

2. IWDG的寄存器

2.1 重装载寄存器(IWDG_RLR)

12位寄存器,存储(要刷新到计数器的值),决定了看门狗溢出的时间。

2.2 键寄存器(IWDG_KR)

独立看门狗的控制寄存器
软件启动看门狗:键寄存器中写入0xCCCC,看门狗启动后就关不掉,只有复位才能关掉。

0xAAAA把RLR中的值重装载到计数器
0x555PR和RLR这两个寄存器可写
0xCCCC启动看门狗

2.3 状态寄存器(SR)

RVU:看门狗计数器重新装载值更新
PVU:看门狗预分频值更新

 3、IWDG的软件设计

(1)取消寄存器写保护
       取消PR和RLR的写保护,使得后面可以操作者两个寄存器

/* 使能对寄存器 IWDG_PR 和 IWDG_RLR 的写操作 */
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

(2)设置IWDG的预分频系数和重装载值

void IWDG_SetPrescaler(uint8_t IWDG_Prescaler); //设置 IWDG 预分频值
void IWDG_SetReload(uint16_t Reload); //设置 IWDG 重装载值

 溢出时间的计算方法 
Tout=((4×2^prer) ×rlr) /4
prer:分频
rlr:加载值 

(3)重载计数值喂狗
       向IWDG_KR写入0xAAAA,刷新计数器的值,喂狗

IWDG_ReloadCounter(); 

(4)启动看门狗
       向 IWDG_KR 写入 0XCCCC

IWDG_Enable(); //使能 IWDG

3.1 看门狗初始化

void IWDG_Init(u8 prer,u16 rlr)
{
    IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
    IWDG_SetPrescaler(uint8_t IWDG_Prescaler);
    IWDG_SetReload(uint16_t Reload);
    IWDG_ReloadCounter();
    IWDG_ReloadCounter();    
}

3.2 喂狗函数

void IWDG_Feed(void)
{
    IWDG->KR=0xAAAA;
}

3.3 主函数

通过按键来喂狗,如果喂狗成功,则亮绿灯,如果喂狗失败的话,系统重启, 程序重新执行

int main(void)
{
    LED_GPIO_Config();
    
    /* 检测独立看门狗复位是否被设置 */
    if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST)!= RESET)
    {
       /*独立看门狗复位了,红灯亮*/
       LED_RED; 
       RCC_ClearFlag();
    }
    else
    {
        lED_BLUE;
    }
    
    Key_GPIO_Config();
    
    /*4分频,重载值625,溢出时间1s*/
    IWDG_Init(4,625);
    
    while(1)
    {
        if(Key_Scan(KEY1_GPIO_PORT,KEY1_PIN) == KEY_ON)
        {
            IWDG_Feed();
            LED_GREEN;
        }
    }
}

3.4 喂狗函数的应用

while 部分是我们在项目中具体需要写的代码,这部分的程序可以用独立看门狗来监控,

  • 如果我们知道这部分代码的执行时间,比如是 500ms,那么我们可以设置独立看门狗的溢出时间是510ms,比 500ms 多一点;
  • 如果要被监控的程序没有跑飞正常执行的话,那么执行完毕之后就会执行喂狗的程序,如果程序跑飞了那程序就会超时,到达不了喂狗的程序,此时就会产生系统复位;
  • 但是也不排除程序跑飞了又跑回来了,刚好喂狗了,歪打正着。所以要想更精确的监控程序,可以使用窗口看门狗,窗口看门狗规定必须在规定的窗口时间内喂狗,早了不行,晚了也不行。
  • 项目中遇到的问题:
    • 问题:板子第一次烧程序是好的,第二次烧程序,板子挂掉;
    • 第一次烧好代码,喂狗程序启动,代码不会复位,代码正常运行
    • 第二次要把代码烧进入,必须把看门狗断开,让板子复位,重启一下,烧入新代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32学习笔记:IWDG_独立看门狗 的相关文章

  • 在 Linux 系统中如何查看和指定 C 语言标准

    本文主要介绍在 Linux 系统中如何查看当前支持的 C 语言版本 xff0c 以及在编译时如何指定 C 语言标准 目前常见的 C 语言标准有 C89 C99 C11 和 C17 xff0c 详情可参考 C语言标准 查看 C 语言标准 我们
  • 使用Openssl EVP函数计算Hash值

    OpenSSL EVP函数库提供了一组用于加密操作高层接口 xff0c 其中也包含了计算消息摘要Hash值得函数 OpenSSL提供了MD2 MD4 MD5 sha1 sha256 sha512等多种Hash算法 计算Hash值相关API
  • 51单片机+L298N控制步进电机【T型】加减速

    本文介绍另一种常见的步进电机 T型 加减速方法 关于L298N模块的使用介绍 以及S型加减速可以上一篇文章 xff0c 传送门如下 xff1a 51单片机 43 L298N控制步进电机S曲线加减速 1 与S曲线加减速对比 1 S曲线一般用查
  • curl用法2

    CURLOPT FTPSSLAUTH The FTP authentication method when is activated CURLFTPAUTH SSL try SSL first CURLFTPAUTH TLS try TLS
  • 简单小实验——串口控制LED灯(HAL库)

    硬件设备 STM32F103ZET3开发板 STLink 功能实现 发送ON LED亮 发送OFF LED灭 其他指令串口发送error 实验过程 波特率设置为115200 数据位8 奇偶校验位None 停止位1 这里我采用的是中断的方式去
  • sudo apt-get update报错【错误:5 http://packages.ros.org/ros/ubuntu xenial InRelease】

    sudo apt get update报错 错误 5 http packages ros org ros ubuntu xenial InRelease 解决办法 xff1a ros的wiki官网 xff0c 更新公钥 网址http wik
  • windowns10下安装MySQL

    安装时参考一下这个链接 xff0c 亲测可用 https blog csdn net qq 45173404 article details 107369405 fps 61 1 amp locationNum 61 2
  • Semi-join在Greenplum中的三种实现方式

    Semi join xff08 半连接 xff09 是用来处理外表的记录是否在内表中存在与其匹配的行 xff0c 而无需考虑匹配行的条数 xff0c 半连接的返回结果集仅使用外表数据集 xff0c 使用场景如 xff1a in exists
  • C#在不同VS版本切换时报错未能找到类型或命名空间名称MySQL

    C 未能找到类型或命名空间名称MySQL 在尝试各种方法无效后 xff0c 通过下方链接第三种情况解决问题 https blog csdn net li gege article details 103416210 utm medium 6
  • Lipschitz 条件或者Lipschitz连续

    https blog csdn net tanga cc article details 86362897
  • STM32F4开发板学习笔记一

    STM32F4是由ST xff08 意法半导体 xff09 开发的一种高性能微控制器 xff0c 之前学习过51单片机的相关知识 xff0c 现在看STM32F4的芯片 xff0c 不得不说它强大的外设功能 xff0c 还有就是固件库 对于
  • 类的三种继承方式

    类的继承方式 公有型 xff08 public xff09 保护型 xff08 protected xff09 私有型 private xff0c 访问控制修饰符也有public protected private3种类型 继承方式不同 x
  • C++ 中在函数的前面加上static的作用

    在一般的函数前面加上static 作用是 xff1a 加了static后表示该函数失去了全局可见性 xff0c 只在该函数所在的文件作用域内可见 当函数声明为static以后 编译器在该目标编译单元内只含有该函数的入口地址 没有函数名 其它
  • 网络字节序跟主机字节序有什么区别

    网络字节序跟主机字节序有什么区别 xff0c 这是我16年9月份校招面试腾讯被问到的一个问题 xff0c 也是Linux服务器开发岗常考的面试题 字节序分为大端字节序和小端字节序 大端字节序是指一个整数的高位字节 xff08 32 31bi
  • 不使用strcat函数,实现两个字符串连接

    设计思路 xff1a 1 首先我们要找到目标字符串的结尾 xff0c 即 0 处 2 然后我们再依次把源字符串依次添加到目标字符串的结尾即可 实现源码如下 xff1a span class token macro property span
  • 使用环形缓冲区ringbuffer实现串口数据接收

    文章目录 1 ringbuffer简单介绍2 ringbuffer的代码实现2 1 ringbuffer数据结构定义2 2 ringbuffer初始化2 3 ringbuffer写数据2 4 ringbuffer读数据 3 在串口中使用ri
  • 结构体(struct)

    什么是结构体 结构是程序员定义数据类型 xff0c 与类非常相似 它们有数据成员和函数成员 xff0c 虽然相似 xff0c 但是有许多区别 xff0c 区别如下 xff1a 类是引用类型二结构是值类型 结构是隐式密封的 xff0c 这意味
  • 【C语言】——结构体进阶:结构体的内存对齐(超详细)

    前言 xff1a 上一篇已经讲了结构体的基本用法 相信各位小伙伴以经学会怎么使用 但是还有一个问题没有弄明白 结构体到底多大 xff0c 占内存空间多不多 xff0c 以经系统到底怎么访问结构体内的数据的 接下来 xff0c 详细分析一下结
  • 【HTTP】摘要认证 Digest access authentication

    第三方接口对接 xff1a 摘要认证 Digest access authentication HTTP认证方式 xff1a BASIC 认证 xff08 基本认证 xff09 xff1b DIGEST 认证 xff08 摘要认证 xff0
  • 自己编译安装OpenCV (linux/windows)

    简单介绍一下OpenCV OpenCV 是 Open Source Computer Vision Library 的简称 xff0c 在计算机视觉领域中是一个非常重要的开源库 xff0c 该库使用的是BSD开源协议 xff0c 这个开源协

随机推荐

  • 基于TCP的项目学习历程(一)实现简单的socket请求。瞎扯的,不要评论。

    毕业至今不到两年 xff0c 但从大四刚开始就在外面开始从事开发工作了 但是一直从事的WEB项目的开发 xff0c 一直没啥长进 最近由于需要 xff0c 需要学习基于TCP的服务器开发 xff0c 由此决定 xff0c 写点东西 xff0
  • laravel框架如何生成Authorization值

    1 xff0c 创建密码授权客户端 在laravel当前目录执行 php artisan passport client password 生成如下值 Client ID 11 Client Secret fOxGavTYTJFP7Eqo0
  • eclipse mysql 数据库报错 com.mysql.jdbc.Driver

    eclipse 项目使用mysql数据库 报一下错误 Caused by java lang ClassNotFoundException com mysql jdbc Driver 解决方法 xff1a 1 xff1a 首先查看项目中是否
  • eclipse svn 报错 文件夹已经不存在

    最近做项目用eclipse 遇到个很奇怪的问题 xff0c 前几天svn还是可以用的 xff0c 突然一下子不能用了 xff0c 于是网上各种找解决方法啊 xff0c 终于问题解决了 xff0c 总结一下 查看svn报错信息 xff1a s
  • Java 提供接口供其它应用调用

    64 author 会员 接口类 相关参数协议 xff1a 00 请求失败 01 请求成功 02 返回空值 03 请求协议参数不完整 04 用户名或密码错误 05 FKEY验证失败 64 Controller 64 RequestMappi
  • H5 下载文件到本地

    H5 下载文件到本地 其实 xff0c 目前下载文件到本地有很多中方法 xff0c 不管是 JavaScript 或者 jQuery 也好 xff0c 都有各色各样的方法 xff0c 都可以做的到 xff0c 在这里我介绍下我发现的一个比较
  • Javaweb QQ第三方登录

    这是第三方登录的第二篇 xff0c 关于web接入微博第三方登录可以参考我之前的博文 xff0c 之前的博文比较详细的讲解了该如何进行第三方登录的申请和准备工作 http blog csdn net cwfjimogudan article
  • vmware 虚拟机启动失败, Intel VT-x 处于禁用状态

    错误提示 xff1a 已将该虚拟机配置为使用 64 位客户机操作系统 但是 xff0c 无法执行 64 位操作 此主机支持 Intel VT x xff0c 但 Intel VT x 处于禁用状态 如果已在 BIOS 固件设置中禁用 Int
  • java 35 个 Java 代码性能优化总结

    前言 代码优化 xff0c 一个很重要的课题 可能有些人觉得没用 xff0c 一些细小的地方有什么好修改的 xff0c 改与不改对于代码的运行效率有什么影响呢 xff1f 这个问题我是这么考虑的 xff0c 就像大海里面的鲸鱼一样 xff0
  • 基于51单片机超声波红外避障语音导盲仪设计(全套资料)

    基于51单片机的超声波红外避障语音导盲仪设计 本系统采用STC89C52单片机 43 4位高亮白色LED灯 43 红外避障传感器电路 43 超声波电路 43 光敏电阻模块 43 语音报警电路 43 震动电路 43 液晶1602电路 43 电
  • linux 解压zip压缩包命令

    unzip 文件名 zip d 解压位置 例如 xff1a unzip 微信 zip d demowx
  • linux 文件授权命令

    文件授权 chmod 43 x sh
  • linux tomcat常用命令

    startup sh 启动tomcat shutdown sh 关闭tomcat ps ef grep tomcat 查看Tomcat运行 kill 9 4723 杀进程 tail f catalina out 查看tomcat运行日志 c
  • linux redis常用命令

    flushall 清空redis缓存 redis cli 进入redis xff08 需要进入redis的安装目录下 xff09 get key 查找key del key 删除key
  • java DateUtils时间工具栏

    package com eeye common utils import org apache commons lang3 time DateFormatUtils import java text ParseException impor
  • unity3d:Astar寻路,A星,A*,二叉堆优化Open表

    原理视频 油管 xff1a https youtu be i0x5fj4PqP4 别人的B站翻译 xff1a https www bilibili com video BV1v44y1h7Dt spm id from 61 333 999
  • TCP/IP 、HTTP、Socket的区别与联系

    1 Socket和http的区别 http xff1a 如何封装数据 xff1b 基于TCP协议 xff0c 简单的对象访问协议 xff0c 对应于应用层 xff1b xff08 货物 xff09 tcp协议 xff1a 数据在网络中的传输
  • 【亲测一次成功】将本地代码上传到Gitee码云

    1 在Gitee码云上创建仓库 2 在本地新建一个文件夹 3 右击新建的文件夹 xff0c 使用git bush here 4 输入 git init 5 输入 git remote add origin 43 仓库地址 6 输入 git
  • keil5打开工程报错:error:not found device

    1 error not found device 解决方法 xff1a 将Project文件夹中的工程扩展名由 uvproj改为 uvprojx 原因 xff1a 前提是所有的库安装都是正常且正确的 xff0c 所以应该是如下问题 xff1
  • STM32学习笔记:IWDG_独立看门狗

    1 简介 独立看门狗就是一个12位的递减计数器 xff0c 最大值0xFFF xff1b 计数器的值从某一个值减到0时 xff0c 系统产生一个复位信号 xff08 IWDG RESET xff09 xff1b 在计数器没减到0之前 xff