本文主要是介绍STM32F10xxx——看门狗,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、介绍
狗,在生活中我们非常熟悉,常见的有,在田园里的土狗,生活中的累成狗;技术中的菜狗,爱情中的舔狗......那么在STM32中用来检测和解决由软件错误引起的故障的狗叫什么呢,是的叫看门狗。STM32F10xxx内置两个看门狗,独立看门狗和窗户看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看 门狗设备可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。
独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。窗口看门 狗由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟 或过早的操作。
IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精 度要求较低的场合。WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。
二、看门狗的主要性能
1、独立看门狗(IWDG)
三、看门狗的功能框图解说
1、独立看门狗(IWDG)
1)独立看门狗时钟
独立看门狗的时钟由独立的 RC 振荡器 LSI 提供,即使主时钟发生故障它仍然有效,非常独立。LSI 的频率一般在 30~60KHZ 之间,根据温度和工作场合会有一定的误差,所以一般取 40KHZ, 所以独立看门狗的定时时间并不一定非常精确,只适用于对时间精度要求比较低的场合。
2)递减计数器的时钟
递减计数器的时钟由 LSI 经过一个 8 位的预分频器得到,可以操作预分频器寄存器 IWDG_PR 来设置分频因子,分频因子可以是:[4,8,16,32,64,128,256,256],计数器时钟 CK_CNT= 40/ 4*2^PRV,一个计数器时钟计数器就减一。
3)计数器
独立看门狗的计数器是一个 12 位的递减计数器,最大值为 0XFFF,当计数器减到 0 时,会产生 一个复位信号:IWDG_RESET,让程序重新启动运行,如果在计数器减到 0 之前刷新了计数器的值的话,就不会产生复位信号,重新刷新计数器值的这个动作我们俗称喂狗。
4) 重装载寄存器
重装载寄存器是一个 12 位的寄存器,里面装着要刷新到计数器的值,这个值的大小决定着独立 看门狗的溢出时间。超时时间 Tout = (4*2^prv) / 40 * rlv (s) ,prv 是预分频器寄存器的值,rlv 是重装载寄存器的值。
5)键寄存器
软件必须以一定的间隔写入0xAAAA,否则,当计数器为0时,看门狗会产生复位。 写入0x5555表示允许访问IWDG_PR和IWDG_RLR寄存器。写入0xCCCC,启动看门狗工作(若选择了硬件看门狗则不受此命令字限制)。
6)状态寄存器
状态寄存器 SR 只有位 0:PVU 和位 1:RVU 有效,这两位只能由硬件操作,软件操作不了。RVU: 看门狗计数器重装载值更新,硬件置 1 表示重装载值的更新正在进行中,更新完毕之后由硬件清 零。PVU: 看门狗预分频值更新,硬件置’1’指示预分频值的更新正在进行中,当更新完成后,由 硬件清零。所以只有当 RVU/PVU 等于 0 的时候才可以更新重装载寄存器/预分频寄存器。
2、窗口看门狗(WWDG)
1)窗户看门狗时钟
窗口看门狗时钟来自 PCLK1,由 RCC 时钟控制器开启,PCLK1 最大是 36M。
2)计数器的时钟
计数器时钟由 CK 计时器时钟经过预分频器分频得到,分频系数由配置寄存器 CFR 的位 8:7 WDGTB[1:0] 配置,可以是 [0,1,2,3],其中 CK 计时器时钟 =PCLK1/4096。由计数器的时钟 CNT_CK=PCLK1/4096/(2^WDGTB),得T= 1/CNT_CK = Tpclk1 * 4096 * (2^WDGTB)。
3)计数器
窗口看门狗的计数器是一个递减计数器,共有 7 位,其值存在控制寄存器 CR 的位 6:0,即 T[6:0], 当 7 个位全部为 1 时是 0X7F,这个是最大值,当递减到 T6 位变成 0 时,即从 0X40 变为 0X3F时候,会产生看门狗复位。
4)计算窗户看门狗的超时时间
四、总结
通过以上的描述,原来狗也是让人有点头疼的。希望通过在一篇文章可以让你对看门狗更加的熟悉。需要更详细的解释,请查找权威资料,谢谢大家的阅读!
这篇关于STM32F10xxx——看门狗的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!