《嵌入式物联网应用技术实践教程》_第 8 章 看门狗.pptVIP

  • 1
  • 0
  • 约5.51千字
  • 约 20页
  • 2026-02-13 发布于广东
  • 举报

《嵌入式物联网应用技术实践教程》_第 8 章 看门狗.ppt

8.1独立看门狗独立看门狗(IWDG)用来解决由软件或者硬件引起的处理器故障。它也可以在停止(Stop)模式和待命(Standby)模式下工作,通过对LSI进行校准可获得相对精确的看门狗超时时间。IWDG最适合应用于那些需要看门狗在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。8.1.1IWDG功能描述在键值寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗,此时计数器开始从其复位值0xFFF递减计数。当计数器计数到末尾0x000时,会产生一个复位信号(IWDG_RESET)。无论何时,只要键值寄存器IWDG_KR中被写入0xAAAA,IWDG_RLR中的值就会被重新加载到计数器中,从而避免产生看门狗复位。下一页返回8.1独立看门狗IWDG_PR和IWDG_RLR具有写保护功能。要修改这两个寄存器的值,必须先向IWDG_KR中写入0x5555。将其他值写入这个寄存器将会打乱操作顺序,寄存器将重新被保护。重装载操作(即写入0xAAAA)也会启动写保护功能。8.1.2IWDG寄存器与库函数IWDG通过4个寄存器进行操作:键寄存器(IWDG_KR)、预分频寄存器(IWDG_PR)、重装载寄存器(IWDG_RLR)和状态寄存器(IWDG_SR)等。可以用半字(16位)或字(32位)的方式操作这些外设寄存器。IWDG寄存器结构(IWDG_TypeDeff)在文件stm32f10x_map.h中定义如下:typedefstruct{vu32KR;vu32PR;vu32RLR;vu32SR;}IWDG_TypeDef;上一页下一页返回8.1独立看门狗其相关的库函数有:(1)IWDG_WriteAccessCmd:使能或者失能对寄存器IWDG_PR和IWDG_RLR的写操作;(2)IWDG_SetPrescaler:设置IWDG预分频值;(3)IWDG_SetReload:设置IWDG重装载值;(4)IWDG_ReloadCounter:按照IWDG重装载寄存器的值重装载IWDG计数器;(5)IWDG_Enable:使能IWDG;(6)IWDG_GetFlagStatus:检查指定的IWDG标志位被设置与否。上一页下一页返回8.1独立看门狗8.1.3IWDG应用实例1.实例要求主函数开始的时候,向串口输出“Stm32examplestart!”,然后启动看门狗(溢出时间设定为1秒)。在启动看门狗1秒内“喂狗”,同时串口打印“DelayXXXms”。预期结果:如果不“喂狗”,则约每1秒重启一次,现象是串口隔1秒就会打印“Stm32examplestart!”;如果在启动后1秒内喂狗,则显示“DelayXXXms”,再在1秒内按键……这样保证不重启。2.硬件基础看门狗功能处于VDD供电区,即在停机和待机模式时仍能正常工作。其框图如图8-1所示。上一页下一页返回8.1独立看门狗3.软件结构在实例中分频因子设置为32,重载值为0x4DC,经公式Tout=40kHz/((分频因子)×重载值)计算,结果值约为1秒,也就是说STM32运行大约1秒后就需要“喂狗”,否则STM32会重启,其流程如图8-2所示。4.实例代码根据STM32开发板和实例要求得知,独立看门狗的主要配置过程如下:/*独立看门狗初始化,设置时间间隔*/voidiwdg_init(void){IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//使能写IWDG_PR和IWDG_RLR寄存器上一页下一页返回8.1独立看门狗IWDG_SetPrescaler(IWDG_Prescaler_32);//设置分频因子IWDG_SetReload(0x4DC);//设定重载值0x4dc,大约1s需要重载一次IWDG_ReloadCounter();//重载IWDGIWDG_Enable();//使能IWDG(LSI时钟自动被硬件使能)}上述过程中实现了独立看门狗的初始化,其中最关键的是设置了分频因子和重载值,因为这两个参数和低速时钟频率决定了隔多长时间需要喂狗,下面是喂狗的时间计算公式:Tout=40kHz/((分频因子)×重载值)上一页返回8.2窗口看门狗窗口看门狗(WWDG)通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档