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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Cpu指令重排_cpu的指令集

    Cpu指令重排_cpu的指令集Cpu为了提高效率会对指令进行重排序,以适合cpu的顺序运行。但是指令重排会遵守As-if-serial的规则,就是所有的动作(Action)都可以为了优化而被重排序,但是必须保证它们重排序后的结果和程序代码本身的应有结果是一致的。所以这种情况在单线程中不会出现什么问题。而对于多线程,这个规则就失效了,所以可能会导致结果出现问题。解决办法就是内存屏障,也叫内存栅栏。是一种屏…

    2022年10月17日
    2
  • 安装linux对磁盘分区的要求_ubuntu磁盘分区教程

    安装linux对磁盘分区的要求_ubuntu磁盘分区教程Linux操作系统磁盘分区操作及原理,Linux系统网络环境的配置方法。

    2025年8月13日
    3
  • golang 时间轮_窗口时间

    golang 时间轮_窗口时间timewheelGolang实现的时间轮,项目地址安装goget-ugithub.com/ouqiang/timewheel使用packagemainimport(“github.com/ouqiang/timewheel””time””fmt”)funcmain(){//tick刻度为1秒,3600个槽,执行的jobtw

    2022年9月26日
    2
  • phpMyAdmin安装配置教程

    phpMyAdmin安装配置教程phpMyAdmin就是一种MySQL的管理工具,安装该工具后,即可以通过Web形式直接管理MySQL数据库,不需要通过执行系统命令来管理,非常适合对数据库操作命令不熟悉的数据库管理者。一、我们从phpMyAdmin官网上下载该软件,然后将该软件压缩放置xampp目录下。​二、复制PHP文件config.sample.inc文件并改名为config.inc,并做如下修改:​注意:因为XAMPP包含了Apache、MySQL、PHP、PERL,它在安装时

    2022年5月31日
    28
  • yii报错400

    yii报错400当你在使用yii2.0过程中程序出现400的错误可以在控制器内加入public$enableCsrfValidation=false;即可解决

    2022年6月3日
    36
  • 巴伦电路基础_巴伦变压器

    巴伦电路基础_巴伦变压器本文转自博文:http://whoshallwe.blog.163.com/blog/static/5074415520127723238151/需要巴伦的原因?   差分电路具有高增益、抗电磁干扰、抗电源噪声、抗地噪声能力很高、抑制偶次谐波等优点。如今,在RF电路和低频电路中,差分电路的使用越来越广泛。所以,巴伦的重要性也与日俱增。balun短语分析balun是由“balanc

    2025年6月10日
    3

发表回复

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

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