stm32看门狗复位技巧编辑

一、看门狗复位的应用技巧包括三个方面: 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();
}
2、窗口看门狗wwdg: 1)wwdg主要特性
可编程的自由运行递减计数器
条件复位
─当递减计数器的值小于0x40,(若看门狗被启动)则产生复位。
─当递减计数器在窗口外被重新装载,(若看门狗被启动)则产生复位。见图155。
如果启动了看门狗并且允许中断,当递减计数器等于0x40时产生早期唤醒中断(ewi),它可以被用于重装载计数器以避免wwdg复位。
如果看门狗被启动(wwdg_cr寄存器中的wdga位被置’1’),并且当7位(t[6:0])递减计数器从0x40翻转到0x3f(t6位清零)时,则产生一个复位。如果软件在计数器值大于窗口寄存器中的数值时重新装载计数器,也将产生一个复位。应用程序在正常运行过程中必须定期地写入wwdg_cr寄存器以防止mcu发生复位。只有当计数器值小于窗口寄存器的值时,才能进行写操作。储存在wwdg_cr寄存器中的数值必须在0xff和0xc0之间:
启动看门狗在系统复位后,看门狗总是处于关闭状态,设置wwdg_cr寄存器的wdga位能够开启看门狗,随后它不能再被关闭,除非发生复位。
控制递减计数器递减计数器处于自由运行状态,即使看门狗被禁止,递减计数器仍继续递减计数。当看门狗被启用时,t6位必须被设置,以防止立即产生一个复位。t[5:0]位包含了看门狗产生复位之前的计时数目;复位前的延时时间在一个最小值和一个最大值之间变化,这是因为写入wwdg_cr寄存器时,预分频值是未知的。配置寄存器(wwdg_cfr)中包含窗口的上限值:要避免产生复位,递减计数器必须在其值小于窗口寄存器的数值并且大于0x3f时被重新装载,图155描述了窗口寄存器的工作过程。另一个重装载计数器的方法是利用早期唤醒中断(ewi)。设置wwdg_cfr寄存器中的wei位开启该中断。当递减计数器到达0x40时,则产生此中断,相应的中断服务程序(isr)可以用来加载计数器以防止wwdg复位。在wwdg_sr寄存器中写’0’可以清除该中断。
voidwwdg_configuration(void)
{
窗口看门狗时钟允许
rcc_apb1periphclockcmd(rcc_apb1periph_wwdg,enable);
看门狗节拍=(36m/4096)/8=1098hz就是说一秒钟计数器减1098下
wwdg_setprescaler(wwdg_prescaler_8);
窗口值用0x42就是说计数器满是0x7f在减到0x42之前喂狗了就算喂早了-复位
wwdg_setwindowvalue(0x42);
看门狗使能并初始化定时器为0x7f最大就是0x7f计数器减到到0x3f(t6位清零)时,则产生一个复位
wwdg_enable(0x7f);
clearewiflag清中断标记
wwdg_clearflag();
使能ewinterrupt这个会在计数器减到0x40的时候产生一个“死前”中断当然你也可以在这个中断里赶紧
喂狗-省的狗咬你(复位)
wwdg_enableit();
}

智能家居没有爆款,也不需要爆款
金升阳推出10-25W小功率AC/DC模块电源产品LHxx-23BxxR2系列
华为各BG的业务目标相应公布,冲击千亿美元大关
深度测评福特翼虎1.5 GTDi
晶体滤波器四极点是什么_晶体滤波器四极点怎么调
stm32看门狗复位技巧编辑
车载电源逆变器电路原理图
关于电机芯片设计,需早日实现国产替代化
车规芯片都用在车的什么部位呢?
工控机在服务机器人交互领域的应用
澳洲ACCC即将强制实施纽扣电池安全要求及指南 2022年6月22日强制实施
笔记本维护透视——外壳篇
iphone8什么时候上市?iphone8最新消息:万众期待的iPhone8将有哪些黑科技?iphone8还未上市就已在中国山寨横行?
盘点关于纯电动汽车的一些不足之处
安培显卡对比新主机,哪款成本更低?
c语言中结构体有联合体的区别
远程控制:智慧煤矿Web 2D可视化组态系统
静脉识别到底是怎样的情况
科学家通过脑机接口读取大脑特定神经信号实现“意念操作”
关于基于模型的设计开发月球探测器的机载飞行软件分析和介绍