STM32F030教程:独立看门狗IWDG实战

版权申诉
0 下载量 37 浏览量 更新于2024-09-09 收藏 642KB PDF 举报
"第五节:开门狗WDT.pdf - STM32F030教程 - 青风电子社区" 在嵌入式系统中,看门狗定时器(Watchdog Timer,简称WDT)是一种重要的安全机制,用于检测和恢复系统中的软件错误。STM32F030系列微控制器内置了两种类型的看门狗:独立看门狗(Independent Watchdog, IWDG)和窗口看门狗(Window Watchdog, WWDG)。这两个定时器在系统运行时监控软件执行,如果超过预设的时间间隔没有“喂狗”(即重置计数器),它们会触发中断或系统复位,从而防止系统陷入无法预测的状态。 独立看门狗IWDG由一个独立的低速内部时钟LSI驱动,即使主系统时钟失效,IWDG也能继续工作。它的计数器由用户设置的预分频器和重载值决定,提供了一个灵活的超时范围。在IWDG的例子中,教程展示了如何设置计数器,在一个常规周期内自动升级,并在达到预设时间后,通过模拟软件错误来触发MCU的独立看门狗复位。这在需要看门狗完全独立于主程序运行,对时间精度要求不高的应用中非常适用。 窗口看门狗WWDG则使用从APB1时钟分频得到的时钟源,允许用户定义一个时间窗口,在这个窗口内,如果喂狗操作未在指定时间内完成,就会触发中断或系统复位。WWDG提供了更精确的计时控制,适合那些要求在严格时间窗口内检测异常的应用。 在软件准备阶段,开发者需要在Keil编译环境中配置工程,包含所需的库文件`stm32f0xx_iwdg.c`,并编写中断服务函数在`stm32f0xx_it.c`中。IWDG的系统结构包括预分频器配置、重载值设置以及中断处理等部分。例如,教程中提到了利用TIM14定时器测量LSI振荡频率,以确保对IWDG的精确控制。 在实际操作中,开发者需要初始化IWDG,设置预分频因子和重载值,然后在主程序或中断服务例程中定期调用喂狗函数。当模拟软件错误时,中断会被触发,如果没有在规定时间内执行喂狗操作,系统将被复位。通过这种方式,看门狗可以有效地提高系统的稳定性和可靠性。 STM32F030的看门狗功能是系统安全的重要保障,通过正确的配置和使用,可以在软件故障发生时及时恢复系统,避免长时间的无响应或异常状态。对于开发者来说,理解和掌握这两种看门狗的工作原理和配置方法是必不可少的技能。

15:23:44.436 -> --------------- CUT HERE FOR EXCEPTION DECODER --------------- 15:23:44.532 -> 15:23:44.532 -> Soft WDT reset 15:23:44.532 -> 15:23:44.532 -> Exception (4): 15:23:44.532 -> epc1=0x40106871 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000 15:23:44.628 -> 15:23:44.628 -> >>>stack>>> 15:23:44.628 -> 15:23:44.628 -> ctx: cont 15:23:44.628 -> sp: 3ffffd30 end: 3fffffd0 offset: 0160 15:23:44.676 -> 3ffffe90: 60000314 00000006 00000044 40202e23 15:23:44.724 -> 3ffffea0: 00000002 3ffee608 3ffee774 40202f11 15:23:44.820 -> 3ffffeb0: 00000048 3ffee774 00000001 3ffee57d 15:23:44.820 -> 3ffffec0: 60000314 00000001 3ffee774 00000002 15:23:44.916 -> 3ffffed0: 3ffef5c4 3ffee556 00000002 402013c0 15:23:44.965 -> 3ffffee0: 00000001 00000048 00000000 402013f4 15:23:45.012 -> 3ffffef0: 3ffee774 3ffee57c 00000002 402017e4 15:23:45.060 -> 3fffff00: 00000000 00000001 3ffee574 3ffef5c4 15:23:45.108 -> 3fffff10: 00000002 00000002 00000000 40201860 15:23:45.156 -> 3fffff20: 3ffee556 00000001 00000001 00000000 15:23:45.204 -> 3fffff30: 00000000 00000003 3ffef5c4 3ffee72c 15:23:45.252 -> 3fffff40: 3fffdad0 3ffee556 3ffee548 402015bc 15:23:45.300 -> 3fffff50: 60000314 00000000 3ffee548 402015e4 15:23:45.396 -> 3fffff60: 3fffdad0 00000000 3ffee548 40201692 15:23:45.396 -> 3fffff70: 00000001 00000048 3ffee548 402010a3 15:23:45.492 -> 3fffff80: 00000000 feefeffe 3ffee774 3ffee72c 15:23:45.492 -> 3fffff90: 3fffdad0 00000000 3ffee574 4020143c 15:23:45.588 -> 3fffffa0: 3ffee55c 00000000 3ffef5c4 3ffee72c 15:23:45.636 -> 3fffffb0: 3fffdad0 00000000 3ffee700 40202300 15:23:45.685 -> 3fffffc0: feefeffe feefeffe 3fffdab0 40100eb1 15:23:45.733 -> <<<stack<<< 15:23:45.733 -> 15:23:45.733 -> --------------- CUT HERE FOR EXCEPTION DECODER --------------- 15:23:45.828 -> H!⸮⸮L^⸮ ⸮⸮@H⸮JG⸮⸮⸮E

2023-07-14 上传