STM32独立看门狗实验

STM32独立看门狗实验一为什么需要看门狗?在MCU微型计算机系统中,MCU运行程序很容易受到外界电磁场的干扰,从而造成程序运行错误甚至发生跑飞现象,从而陷入死循环,程序的正常运行被打乱,从而造成不可预料的严重后果,于是人们就设计了一款用于实时监测计算机运行状态的芯片,我们就将其称为“看门狗(WatchDog)”。二看门狗的作用看门狗在我们程序正常工作的时候是不工作的,也就是说他根本没有任何作用,只有在单片…

大家好,又见面了,我是你们的朋友全栈君。

一 为什么需要看门狗?
在MCU微型计算机系统中,MCU运行程序很容易受到外界电磁场的干扰,从而造成程序运行错误甚至发生跑飞现象,从而陷入死循环,程序的正常运行被打乱,从而造成不可预料的严重后果,于是人们就设计了一款用于实时监测计算机运行状态的芯片,我们就将其称为“看门狗(WatchDog)”。
二 看门狗的作用
看门狗在我们程序正常工作的时候是不工作的,也就是说他根本没有任何作用,只有在单片机发生程序跑飞现象的时候看门狗才会产生一个复位脉冲强制单片机复位,从而使单片机正常运行。
三 STM32中的看门狗
STM32中内置了两种看门狗,一个是独立看门狗,另外一个是窗口看门狗,那么这两种看门狗有什么区别呢?
在这里插入图片描述
独立看门狗由内部RC振荡器震荡计时,因此其计时精度不够高。
四 看门狗的工作原理
看门狗的工作原理步骤:
1 键值寄存器(IWDG_KR)中写入 0xCCCC,开始启用独立看门狗。
2 看门狗开始从复位值 0xFFF 递减计数,每次递减1
3 计数器计数到末尾 0x000 时,会产生一个复位信号(IWDG_RESET)。
不管何时,我们都可以给键值寄存器(IWDG_KR)中写入0xAAAA,那么单片机就会自动将IWDG_RLR(自动重装载计数器)中的值重新写入键值寄存器(IWDG_KR)中,键值寄存器会从自动重装载计数器的值的基础上,重新向下计数,这就是人们俗称的“喂狗”。那么看门狗是如何实现实时监测程序的呢?看门狗会无时无刻的去喂狗,如果程序发生跑飞的现象,那么单片机程序就不能继续去喂狗,继而计数器计数到0,看门狗产生复位脉冲信号。
IWDG_PR (预分频寄存器)和 IWDG_RLR(自动重装载计数器) 寄存器具有写保护功能,自动写保护功能我们在单片机中已经见到很多了,写保护在现在计算机当中经常遇到,亩的就是保护计算机的程序被随意修改阅读,从而造成程序跑飞等现象。要想取消这两个寄存器的写保护,就要分别向两个寄存器中写入命令,IWDG_KR 寄存器中写入0x5555取消写保护。
IWDG_PR (预分频寄存器)用来设置看门狗的分频系数,刚才我们说到,我们的独立看门狗是LSI(40KHZ)的外部时钟振荡器得到的时钟系数,我们设置了分频系数就可以改变输入看门狗的时钟振荡频率。比如我们设置与分频系数为4,那么得到的分频频率就是10HZ。
五 独立看门狗常用操作库函数
1 IWDG_WriteAccessCmd//取消写保护 向其中写入0x5555
在这里插入图片描述
2 IWDG_SetPrescaler//设置预分频系数
在这里插入图片描述
3 IWDG_SetReload//设置重装载值
在这里插入图片描述
4 IWDG_ReloadCounter//喂狗,写入0xAAAA
在这里插入图片描述
5 IWDG_Enable//使能看门狗
在这里插入图片描述
6 IWDG_GetFlagStatus//获取看门狗此时的状态
在这里插入图片描述
六 独立看门狗的操作步骤
1 取消写保护
IWDG_WriteAccessCmd();
2 设置独立看门狗的预分频系数
IWDG_SetPrescaler();
3 设置独立看门狗的重装载值
IWDG_SetReload();
4 使能看门狗
IWDG_Enable();
5 看门狗喂狗
IWDG_ReloadCounter();
七 源码分享


void IWDG_Init(u8 prer,u16 rlr)//设置prer为预分频系数rlr为重装载
{
  //NO.1 取消写保护
  IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); 
  //NO.2 设置独立看门狗的预分频系数
  IWDG_SetPrescaler(prer);
  //NO.3 设置独立看门狗的重装载值
  IWDG_SetReload(rlr);
  //NO.4 使能看门狗·
  IWDG_Enable();
  //看门狗喂狗
  IWDG_ReloadCounter();
}
int main (void)
{
 
    RCC_Configuration(); 
    LED_Init();
    KEY_Init();
    IWDG_Init(4,625);
    
    delay_ms(500);
    GPIO_SetBits(LEDPORT,LED1);
  
    while(1)
     {
        if(!GPIO_ReadInputDataBit(KEYPORT,KEY1))
        {
            IWDG_ReloadCounter();·
        }
         delay_ms(10);
     }

}

我们来看看主函数,主函数中如果我们不去喂狗,那么主函数就会延时500毫秒然后点亮,一闪而过,那么我们就设置当按键按下时我们就去喂狗,我们不停地喂狗,那么MCU就不会去产生复位脉冲,从而LED就会一直亮,永远不会熄灭,我们不去喂狗了,MCU才会递减计数到0产生复位脉冲,然后LED熄灭。我们来看看开发板是否有这样的效果。
视频一开始我们并没有去喂狗,可以看看到LED一闪而过,视频后期我们一直不停地去喂狗,LED灯常亮。停止喂狗,LED熄灭。
微信搜索公众号“一昊”,带给你更多精彩!
专注ARM系列单片机、51单片机、小程序、C语言、云服务器、物联网、网页研发、JAVA、Android/IOS APP开发等领域,专注学习过程以及经验分享,共同学习,共同进步,不定期推送知识内容,不搬运知识,我只做知识的深加工,化繁为简。
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/144753.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • YOLO3训练自己数据(超详细步骤)

    YOLO3训练自己数据(超详细步骤)须知:对于占比较小的目标检测效果不好,虽然每个格子可以预测多个boundingbox,但是最终只选择IOU(预测的矩形框和真实目标的交集与并集之比)最高的boundingbox作为物体检测输出,即每个格子最多只预测出一个物体。当一个格子中包含多个物体时,如鸟群等,却只能检测出其中一个。另外,YOLO对车牌识别的效果一般。一:下载YOLO3项目gitclonehttps://githu…

    2022年6月25日
    27
  • 最全的 Charles 抓包工具详解「建议收藏」

    最全的 Charles 抓包工具详解「建议收藏」本文介绍了详细介绍了Charles的HTTP/HTTPS抓包功能,其中包括模拟慢网速、断电功能、Compose功能、重写功能、映射功能、Repeat功能、以及Android7.0抓包问题

    2022年6月14日
    183
  • oracle数据库用户密码过期后怎么修改_oracle数据库密码过期怎么修改

    oracle数据库用户密码过期后怎么修改_oracle数据库密码过期怎么修改问题现象:今天在更改数据库数据的时候,程序报错了,如下:ORA-28001:thepasswordhasexpired问题分析:很显然,报错原因就是:密码已过期!所以现在需要做的事情只有两件:1.修改密码的过期时间2.修改/重置密码这里分析一下为什么要这样做:1.修改密码的过期时间:这是因为OracleDatabase11g版本的Oracle数据库有一项默认配置,就是密码过期时间默认为180天(6个月左右);通过sysdba身份可以登录..

    2022年7月28日
    19
  • 卡罗拉配置参数表_fr154参数

    卡罗拉配置参数表_fr154参数H.264VideoEncodingGuideContentsConstantRateFactor(CRF) Two-Pass LosslessH.264 Overwritingdefaultpresetsettings AdditionalInformation&Tips FAQ AdditionalResourcesThe…

    2022年9月24日
    0
  • vue中的懒加载和按需加载_vue 路由懒加载

    vue中的懒加载和按需加载_vue 路由懒加载有关Vue懒加载其实并不是想象的那么难和复杂:首先引入importVueLazyLoadfrom’vue-lazyload’;其次是使用Vue.use(VueLazyLoad,{error:require([‘./assets/404.jpg’]);loading:require([‘./assets/loading.jpg’]);});这里说下他的原理…

    2025年5月23日
    4
  • springBoot整合Mybatis-Plus需要的依赖_springboot中文手册

    springBoot整合Mybatis-Plus需要的依赖_springboot中文手册Springboot整合TKMapper使用TKMapper无需再创建mapper.xml文件首先基于springboot完成对MyBatis的整合,然后再对TKMapper进行整合1创建springboot项目勾选必要的依赖整合mybatis引入了mybatis的依赖,就需要配置数据库,创建application.yml文件spring:datasource:url:jdbc:mysql://192.168.1.2:3306/learn_tkmapper?serve

    2022年9月28日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号