开发者学堂课程【嵌入式之RFID开发与应用2020版:独立看门狗应用实例】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/665/detail/11164
独立看门狗应用实例
一、独立看门狗应用实例
将基础代码有关看门狗的代码复制在app文件夹下
然后在source insight-reload file 中打开,在key.h中选择Add and Remove project Files 中添加app中的文件。
在工程里面,除了需要添加app里面看门狗的应用程序wgd.c,还需要在lib中找到有关独立看门狗的库的支持。Iwdg就可以,wwdg属于窗口看门狗,本节课主要介绍独立看门狗。(lib-libraries-stm32f10x_stdperiph_driver-src-stm32f10x_iwdg.c )
对于看门狗只添加了iwdg_init 并且是放在初始化的最前面。
如果放在后面,问题出在前面就无法解决,所以看门狗越早初始化越好。
接下来结合公式分析函数
这个函数iwdg_init 是官方提供的库,Prer代表分频系数,r1r代表计数周期。
对于分频系数,下图中iwdg_init(4,625)的4不是计数频率,而是代码预分频的设定值为4,分频为4*24 ,代表64分频。以
40khz除以64得到的频率计数,计625个数,得到1000ms,表示看门狗1s之内必须喂一次,若没有喂,则会复位。
可以看到,在while循环里面,每次循环都需要喂狗,喂狗调用iweg_feed 。
观察它超时的情况需要在在按键里面添加循环while(1); ,只要按键不会退出,不退出主事件循环就没有继续执行,因为它是单任务事件。当主事件不执行,喂狗动作就无法执行,系统就会复位,所以通过这个来观察情况。
其中存在问题就是按键蜂鸣器它会不会响,需要看定时器的优先级高不高,如果基数低则不会响,因为处于同一个优先级的话,定时器无法打断按键的中断。
按键执行后发现时间停了但并未复位,说明刚才的操作看不到这个现象,复位的优先级比中断低。
所以我们需要在主程序里面添加while(1),一旦检测到按键就让它停留在此
接下来按键就发现会复位,出现了booting,它只有开机时出现。
看门狗计数是正常的计数,看门狗正常运行时需要有计数值,进入中断时无法减数,退出中断又会继续减数,所以不要把阻塞的事情放在中断上,因为会阻塞看门狗定时器计数工作,所以放在外面。放在外面中断后就会重新开始。
以上就是看门狗在产品里面发挥的真正价值,所以把看门狗事情放在基础课程,它是保障正常运行的重要手段。