• STM32独立看门狗(IWDG)


    造成程序跑飞,只是程序的正常运行状态被打断而进入死循环,从而使单片机控制的系统无法正常工作。看门狗就是一种专门用于检测单片机程序运行状态的硬件结构。

    STM32内部自带了两个看门狗,独立看门狗(IWDG)窗口看门狗(WWDG),这一节我们看一下独立看门狗的工作原理相关寄存器操作。

    1. 独立看门狗(IWDG)

    STM32的独立看门狗由内部专门的40Khz低速时钟驱动,即主时钟发生故障,它也仍然有效,这里我们需要注意独立看门狗的时钟不是准确的40Khz,二是在30~60Khz之间变化的一个时钟,只是我们估算以40Khz来计算,看门狗对时间要求不是很青雀,时钟有点偏差还是可以接受的。

    独立看门狗相关的几个寄存器

    1.1. 键值寄存器(IWDG_KR)

    寄存器各位描述如下:

    独立看门狗工作原理:在键值寄存器(IWDG_KR)中写入0XCCCC,开始启用独立看门狗,此时计数器开始从其复位值OXFFF递减计数,当计数器计数到末尾0X000的时候,会产生一个复位信号(IWDG_RESET),无论何时,只要寄存器IWDG_KR中被写入0XAAAA,IWDG_RLR中的值就会被重新加载到计数器中从而避免产生看门狗复位。

    预分频寄存器(IWDG_PR)和重载寄存器(IWDG_RLR)的写保护  :IWDG_PR和IWDG_RLR寄存器具有写保护功能,要想修改这两个寄存器的值,首先要向IWDG_KR中写入0X5555。以不同的值写入这个寄存器或者重装载(写入0XAAAA)都会重新启动写保护。

    1.2. 预分频寄存器(IWDG_PR)

    该寄存器是用来设置看门狗的时钟分频系数,最低为4,最高位256,虽然是32位寄存器,我们只使用了最低3位,其他保留,预分频寄存器各位定义如下:

    1.3. 计数重装载寄存器(IWDG_RLR)

    该寄存器保存重装载计数器中的值,32位寄存器,我们只使用了低12位有效,寄存器描述如下:

    2. 独立看门狗启动过程

    这样,只要我们对以上三个寄存器进行相应设置,我们就可以启动STM32独立看门狗了,启动过程如下:

    2.1. 1、向IWDG_KR中吸入0X5555

    通过这一步我们取消了IWDG_PR和IWDG_RLR的写保护,下一步我们设置他们初值。

    设置IWDG_PR和IWDG_RLR的初值。

    我们计算一下看门狗的喂狗时间(看门狗溢出时间)计算公式

    Tout=((4*2^prer)*rlr)/40

     其中Tout就是看门狗溢出时间(单位ms),prer是看门狗时钟预分频值(IWDG_PR值),范围为0~7,rlr位看门狗重载值(IWDG_RLR)。比如我们设置prer为4,rlr的值为625,我们就可以计算得到Tout=64*625/40=1000ms,这样,看门狗的溢出时间就是1S,只要在这一秒钟内,有一次吸入0XAAAA到IWDG_KR,就不会导致看门狗复位(写入多次也是可以的)(由于看门狗的时钟不是准确40Khz,所以喂狗不要太晚,以免发生看门狗复位)。

    2.2. 2、向IWDG_KR中写入0XAAAA

    通过这句可以将重载寄存器(IWDG_RLR)中的计数初值载入到看门狗计数器中(也可以时钟该命令喂狗)。

    2.3. 3、向IWDG_KR中写入0XCCCC

    通过这句我们就启动了STM32的看门狗了,使能了看门狗,在程序里面我们就必须间隔一定的时间就喂狗,否则导致程序复位,利用这一点,我们通过一个LED来指示是否复位,验证独立看门狗。

    STM32中看门狗核心在芯片内部,不需要外部电路,这里我们使用到了外部电路中的2个IO口,一个用来输入喂狗信号,一个用来指示程序是否复位,喂狗使用WK_UP按键,程序重启指示使用DS0。

  • 相关阅读:
    向量、矩阵常用范数
    关于HP M451网络连接的资料
    pyqt程序最小化到系统托盘(未测试)
    博客园美化大集合2020最新!不用担心失效问题!
    添加QQ聊天
    关于加密
    python抓取谷歌学术关键词下文章题目
    如何确定网站可否可爬取
    灵狐浏览器
    利用beautifulsoup进行对标签的二次查找-以打印网易云歌单内容为例
  • 原文地址:https://www.cnblogs.com/-colin/p/9287672.html
Copyright © 2020-2023  润新知