一、看门狗复位的应用技巧包括三个方面:
1:判断是否需要使用。如果要使用看门狗的话,需要做一些寄存器的配置,在程序区的某些地方也要加入喂狗指令来防止看门狗复位,有一定的工作量,所以用与不用需要考虑一下。能不使用看门狗的场合,要求是系统即使死机也问题不大,等待人过来断电复位即可的情况。但是这种情况已经很少了,所以绝大多数情况下看门狗都要加上。比如有温控功能的电热水器,假如电加热已经启动,但是系统死机了,温控失效,电加热也不会关闭,这时水温就会一直升高,直到水被蒸干,然后电加热损坏或引发火灾,或者人被开水烫伤。这时有看门狗复位,系统就会恢复正常,检测到温度够了,就会关闭电加热的。
2、保证看门狗工作正常。看门狗除了进行寄存器配置之外,喂狗函数的位置也很重要,没处理好就会发生不该复位时复位了,或改复位的时候没有复位,可能的原因是在可能出现的死循环里喂狗了。
3、保证看门狗复位时不会引起系统异常。能否做到这一点,是工程师水平高低的重要体现。单片机系统一般都是和某个外在的系统连接的,可以是机械系统,水系统,电气系统等,要保证单片机系统的复位不会造成这些外接系统的异常。主要的问题点在于单片机复位时IO口状态会改变为初始值,寄存器会复位,内存会清空。比如电梯,单片机发出一个向上的信号,于是轿厢开始向上,但是这时因为某种干扰,单片机死机触发看门狗复位,IO初始化为关闭,轿厢失去了向上信号,这时是让轿厢迅速下坠?还是单片机反应过来之后重新输出向上信号,又拉住了轿厢?工程师需要去思考并解决这些问题,做控制的人需要对安全性有充足的认识。
二、stm32的看门狗使用方法
stm32自带两个看门狗模块,独立看门狗IWDG和窗口看门狗WWDG。主要作用是——可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。
具体的实现步骤:开启看门狗,设置减计数的初始值,当计数值达到超时值时,产生MCU复位,此时本来运行的程序终止重新启动单片机(发生了故障)。在使用了看门狗之后,在正常运行的程序中加入喂狗的程序,即采用定时器的方式每隔一段时间进行一次喂狗重置计数装载值,这样,只要程序正常运行,没有出现故障或软件错误,就会不断的定时喂狗,从而不会使计数值达到超时值产生复位。
1、独立看门狗IWDG:
1)IWDG主要性能
自由运行的递减计数器
时钟由独立的RC振荡器提供(可在停止和待机模式下工作)
看门狗被激活后,则在计数器计数至0x000时产生复位
2)IWDG功能描述
图 为独立看门狗模块的功能框图。
在键寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值0xFFF递减计数。当计数器计数到末尾0x000时,会产生一个复位信号(IWDG_RESET)。
无论何时,只要键寄存器IWDG_KR中被写入0xAAAA,IWDG_RLR中的值就会被重新加载到计数器中从而避免产生看门狗复位。
voidIWDG_ConfiguraTIon(void)
{
写入0x5555,用于允许狗狗寄存器写入功能
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
狗狗时钟分频,40K/256=156HZ(6.4ms)
IWDG_SetPrescaler(IWDG_Prescaler_256);
喂狗时间5s/6.4MS=781。注意不能大于0xfff
IWDG_SetReload(781);
喂狗
IWDG_ReloadCounter();
使能狗狗
IWDG_Enable();
}
技术专区
- mybatis动态sql详解
- 用VHDL语言设计数据传输系统中的HDB3编码器
- 裸机程序如何驱动硬件?看前辈是怎么说的
- 应用面向对象编程SoC原则的典型示例
- 嵌入式开发之java常用开发工具介绍