1、CC2530和STM32嵌入式接口技术开发5.6 STM32看门狗应用开发EducationSolutions目录ContentsInternet+看门狗基本原理STM32看门狗STM32看门狗库函数的使用项目实践11:27/3看门狗IC的基本原理看门狗,是一个定时器电路,一般有一个输入,叫喂狗(kicking the dog or service the dog),一个输出到MCU的RST端,MCU正常工作的时候,每隔一段时间输出一个信号到喂狗端,给WDT清零。如果超过规定的时间不喂狗(一般在程序跑飞时),WDT定时超过,就会给出一个复位信号到MCU,使MCU复位以此防止MCU死机。看门狗的
2、作用就是防止程序发生死循环,或者说程序跑飞。11:27/4STM32看门狗介绍STM32F407有两个看门狗外设,一个是独立看门狗,另外一个是窗口看门狗,独立看门狗号称宠物狗,窗口看门狗号称警犬,两者在实际的工程应用中有所不同。独立看门狗独立看门狗的工作原理就是一个递减计数器不断的往下递减计数,当减到0之前若没有喂狗,产生复位。窗口看门狗窗口看门狗计数器的值必须在上窗口和下窗口之间才可以喂狗,在上窗口复位或下窗口不喂狗程序都会复位。11:27/5独立看门原理1.独立看门狗时钟2.计数器时钟3.递减计数器4.重装载寄存器5.键值寄存器6.状态寄存器11:27/6独立看门狗工作流程独立看门狗是一种
3、开放式的看门狗,只要在有效的喂狗时间内喂狗,系统都会重置看门狗计数器,同时不会触发复位。在喂狗时间之外如果没有喂狗操作,那么系统将会被重启。11:27/7窗口看门狗工作原理1.窗口看门狗时钟2.计数器时钟3.递减计数器4.窗口寄存器A.看门狗超时判断B.看门狗开启判断C.看门狗复位触发11:27/8窗口看门狗工作流程窗口看门狗是一种限制式的看门狗,在窗口期之前发送喂狗时系统会触发复位,在整个看门狗计时结束未喂狗,系统也会触发复位。只有在窗口期内喂狗,系统才会重置窗口看门狗计数器而不触发复位。11:27/9独立看门狗配置流程 IWDG_WriteAccessCmd(IWDG_WriteAcces
4、s_Enable);/开启看门狗写入功能1.取消寄存器写保护 void IWDG_SetPrescaler(uint8_t IWDG_Prescaler);/设置IWDG预分频值 void IWDG_SetReload(uint16_t Reload);/设置 IWDG 重装载值2.设置独立看门狗预分频系数和重装载值 IWDG_ReloadCounter();/按照IWDG重装载寄存器的值重装载IWDG计数器3.重载计数值喂狗 IWDG_Enable();/使能IWDG4.启动看门狗11:27/10窗口看门狗配置流程 RCC_APB1PeriphClockCmd(RCC_APB1Periph_
5、WWDG,ENABLE);/WWDG时钟使能1.使能WWDG时钟 void WWDG_SetWindowValue(uint8_tWindowValue);void WWDG_SetPrescaler(uint32_t WWDG_Prescaler);2.设置窗口值和分频数 WWDG_EnableIT();/开启窗口看门狗中断3.开启WWDG中断 void WWDG_Enable(uint8_t Counter);void WWDG_SetCounter(uint8_t Counter);4.设置计数器初始值并使能看门狗 void WWDG_IRQHandler(void);5.编写中断服务函
6、数11:27/11项目场景有大量的移动通信基站都是建立在偏远或人迹罕至的地区,维护起来十分不便。然而这些基站监控系统会因为环境或软件等原因引起系统宕机,这时需要系统支持自复位功能,通常采用的方法是使用处理器的看门狗功能,即程序跑飞后可使程序自动复位。11:27/12任务目标某监测设备生产企业,要设计一款无人值守,性能稳定的户外监测设备,要求设备具备自供电,监测数据定时发送,运行状态实时更新,其自复位功能要求使用STM32处理器的看门狗进行实现。11:27/13项目分析程序宕机后要让设备自动重启就需要用到STM32F407独立看门狗外设,通过配置独立看门狗外设,每隔一段时间喂狗以保持程序正常运行
7、,中断喂狗则程序复位重启。STM32F407独立看门狗喂狗操作比较简单,只需要执行“IWDG_ReloadCounter()“喂狗函数即可。11:27/14项目程序逻辑框图程序启动后首先初始化LED和按键,延时一段时间后初始化看门狗和设置LED灯状态。设置完成后程序进入主函数,在主函数中对K3进行检测,按下K3进行喂狗保持程序执行、否者程序复位重启。11:27/15项目实现void wdg_init(char prer,int rlr)IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);/使能pr、rlr寄存器写操作 IWDG_SetPrescaler(prer);/设置预分频值 IWDG_SetReload(rlr);/设置重载值 IWDG_ReloadCounter();/计数器重载 IWDG_Enable();/独立看门狗使能l看门狗初始化11:27/16项目实现void wdg_feed(void)IWDG_ReloadCounter();/计数器重载l喂狗程序11:27/17项目思考独立看门狗与窗口看门狗有哪些不同?独立看门狗的功能是什么?如何实现STM32 看门狗的喂狗?如何驱动STM32处理器的看门狗?思考看门狗外设还具有哪些应用场景。