关于stm32f4家的两只看门狗WWDG和IWDG剖析

独立看门狗IWDG
    stm32f4的独立看门狗IWDG,是一个拥有独立时钟驱动、自由运行递减计数器的外设,用于检测并解决由软件错误导致的故障。
    IWDG被开启后IWWDG_RLR寄存器中的值写入计数器并会自动从0xFFF开始递减计时,当递减到0x000时产生一个复位信号并自动复位,复位处理器啊兄die。(将0xCCCC写入关键字寄存器IWDG_KR开启独立看门狗/硬件看门狗使能后会上电会自动开启看门狗)
    程序中所要做的就是按时将关键字0xAAAA写到IWDG_KR寄存器中,这时IWDG_RLR寄存器中的值会立即重载到计数器中,从而避免产生看门狗复位(喂狗)。
    关键字寄存器IWDG_KR:高16位保留,低16位用于关键字写入。三个关键字0xAAAA表示重置计数器,0xCCCC启动看门狗,0x5555失能IWDG_PR、IWDG_RLR寄存器的写保护。
    预分频寄存器IWDG_PR:低三位有效,用于设置预分频器的分频倍数。
    重载寄存器IWDG_RLR:设置计数器重载值,低十二位有效。
    状态寄存器IWDG_SR:只有0、1两位有效,1位是RVU用于使能对重载寄存器的写操作哦,0位是PVU用于使能对预分频寄存器的写操作。

    递减计数器是16位的:0xFFF~0x000


窗口看门狗WWDG
    stm32f4的窗口看门狗WWDG,是一个由APB1总线提供时钟的看门狗外设,其主要特色是程序必须要在限定的时间窗口内喂狗,早了不行,晚了也不行。
    窗口看门狗复位之后默认关闭,在程序中开启之后除非复位,否则无法再关闭WWDG。
    WWDG的递减计数器即使WWDG关闭状态也依然在递减计数。所以在使能WWDG时,必须先将WWDG_CR寄存器的T6位置1,不然可能立即产生复位。同样如果想要软件复位的话,可以利用这一特性。  (T[5:0]保存了上一次复位之前的计时数值)

    激活WWDG,将WWDG_CR寄存器WDGA位置1。

    WWDG_CR是一个低8位有效的寄存器。

    位 7 WDGA:激活位 (Activation bit),此位由软件置 1,只有复位后才由硬件清零。
    位 6:0 T[6:0]:7 位计数器 (MSB 到 LSB),这些位用来存储看门狗计数器的值。
    递减计数器每隔 (4096 x 2WDGTB) PCLK1 个周期递减一次。当它从 0x40 滚动到 0x3F(T6 清零)时会产生复位。
    这里有个重点是,在程序正常运行过程中,必须定期将值写入WWDG_CR中,这个值介于0xFF~0xC0之间。
    WWDG的窗口上限值是存在WWDG_CFR配置寄存器的T[5:0]的,下限值固定为0x3F,当计数器的值(即WWDG_CR中的T[5:0]中的值)低于上限值高于下限值时,必须重载计数器的值,在这个区间之外重载或超时都会产生复位信号。
    WWDG有个高级中断,即提前唤醒中断EWI,由WWDG_CFR寄存器中的EWI位置1使能控制。这个中断顾名思义就是在复位之前会产生一个中断信号,产生中断信号的时间点是当递减计数器的值为0x40时。这个中断可以用于做数据记录、WWDG计数器重载避免复位、通信操作等等。
    依赖EWI中断重载WWDG计数器时,需要特别注意中断优先级的问题,当在更高优先级日任务中时,EWI中断函数很可能无法进入执行,从而导致系统复位。
    WWDG_SR状态寄存器,只有最低位0位有效,是EWI中断的中断标志位EWIF位。这个标志位在计数器值为0x40时,会被硬件置1,在中断函数中由软件清0。

    配置寄存器WWDG_CFR,低十位有效,位9就是EWI提前唤醒中断使能位,置1有效。位8位7决定了计数器的时钟分频,1/2/4/8四种分频方式。位6~位0用于保存WWDG的上限值。

本文基于阅读STM32F4XX中文参考手册所得,加了一些自己的理解,更详细的内容可以阅读原著第18、19章。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值