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


相关推荐

  • android registerreceiver() 参数,android – 如何使用registerReceiver方法?

    android registerreceiver() 参数,android – 如何使用registerReceiver方法?我想使用动态注册的BroadcastReceiver有一个Activity的引用,所以它可以修改其UI。我使用Context.registerReceiver()方法,但接收器的onReceive()方法从未调用。这里是显示问题的示例代码:packagecom.example;importandroid.app.Activity;importandroid.app.IntentService…

    2022年9月12日
    0
  • 用 Flask 来写个轻博客 (19) — 以 Bcrypt 密文存储账户信息与实现用户登陆表单

    用 Flask 来写个轻博客 (19) — 以 Bcrypt 密文存储账户信息与实现用户登陆表单

    2022年2月22日
    49
  • Android studio 入门教程(案例)

    Android studio 入门教程(案例) 1.创建一个Android项目,点击File->New->NewProject,其中的open是打开一个Android项目2.输入项目的名称test,此项目放在E盘下,然后点击Finish3.选择Android虚拟机的版本,版本越低运行起来越快,其他的无需勾选。 4.选择Android的模板,选择基础类android的空模板Empty…

    2022年6月7日
    33
  • arduino小车速度调节_智能小车pwm调速程序及原理图

    arduino小车速度调节_智能小车pwm调速程序及原理图Arduino小车——调速篇  在这一篇我们将对小车的行进速度进行调整,将驱动模块的作用发挥出来。首先大家要了解PWM这个概念。PWM  脉宽调制(PWM)基本原理:控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。按一定的规则对各

    2022年10月7日
    0
  • 连接共享打印机显示0x000bcb_0x00004005打印机连接

    连接共享打印机显示0x000bcb_0x00004005打印机连接以win7为例,在局域网中,安装共享打印机时,会出现安装失败,打开详细信息显示为0x000000bcb,重新安装也不行,具体操作如下:连接共享打印机出现0x000000bcb问题的解决方法1打开控制面板,点击卸载程序,如下:2点击”查看已安装的更新“如下:3点击右上角“搜索已安装更新”,输入:”KB4022722“,点击搜索,会在下面的找到”KB4022722“的更新,点击卸载就…

    2022年10月7日
    0
  • 软件著作权的代码要求_软件著作权 源代码

    软件著作权的代码要求_软件著作权 源代码软件著作权源代码文档格式要求分类:专利申请常见问题发表时间:2020-10-27软件著作权源代码文档格式要求是什么?软件著作是计算机软件,在申请保护时需要提交软件的源代码。源代码是有格式要求的,以文档形势提交,那么这份源代码文档格式要求是什么呢?需要注意哪些问题呢?本文你详细介绍。常见的源代码包含:C语言,VB,C++,JAVA,.NET等。提交的代码必须是源代码的开头载入程序,第30页必…

    2022年9月16日
    0

发表回复

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

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