写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做!
本文写于:2025.04.23
STM32开发板学习——第46节: [14-1] WDG看门狗
- 前言
- 开发板说明
- 引用
- 解答和科普
- 一、WGD看门狗
- 问题
- 总结
前言
本次笔记是用来记录我的学习过程,同时把我需要的困难和思考记下来,有助于我的学习,同时也作为一种习惯,可以督促我学习,是一个激励自己的过程,让我们开始32单片机的学习之路。
欢迎大家给我提意见,能给我的嵌入式之旅提供方向和路线,现在作为小白,我就先学习32单片机了,就跟着B站上的江协科技开始学习了.
在这里会记录下江协科技32单片机开发板的配套视频教程所作的实验和学习笔记内容,因为我之前有一个开发板,我大概率会用我的板子模仿着来做.让我们一起加油!
另外为了增强我的学习效果:每次笔记把我不知道或者问题在后面提出来,再下一篇开头作为解答!
开发板说明
本人采用的是慧净的开发板,因为这个板子是我N年前就买的板子,索性就拿来用了。另外我也购买了江科大的学习套间。
原理图如下
1、开发板原理图
2、STM32F103C6和51对比
3、STM32F103C6核心板
视频中的都用这个开发板来实现,如果有资源就利用起来。另外也计划实现江协科技的套件。
下图是实物图
引用
【STM32入门教程-2023版 细致讲解 中文字幕】
还参考了下图中的书籍:
STM32库开发实战指南:基于STM32F103(第2版)
数据手册
解答和科普
一、WGD看门狗
在程序卡死的情况下,自动帮我们复位一下。
独立看门狗:看一下这个程序,是因为看门狗复位,而从头执行的,还是因为刚上电或者复位键,而从头执行的。按键是阻塞式,进行模拟卡死,不能喂狗,则看门狗复位。
窗口看门狗:对喂狗时间更严格,喂狗 早了和晚了都复位。
看门狗可以监控程序的运行状态,当程序因为设计漏洞、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能及时复位程序,避免程序陷入长时间的罢工状态,保证系统的可靠性和安全性。
• 看门狗本质上是一个定时器,当指定时间范围内,程序没有执行喂狗(重置计数器)操作时,看门狗硬件电路就自动产生复位信号
独立运行:独立看门狗的时钟是专用的LSI,内部低速时钟。只有一个最晚界限,喂狗不超过这个界限就行了。
窗口看门狗:要求看门狗在精确计时窗口起作用,有个最早的界限和最晚的界限。使用的时钟是APB1的时钟。
类比于时基单元,输入时钟是LSI,内部低速时钟,时钟频率为40Khz之后时钟进入预分频器进行分频,只有8位,最大只能进行256分频,上面这个预分频器寄存器IWDG_PR可以配置分频系数,时钟驱动递减寄存器,每来一个时钟,自减一个数,计数器是12位,最大值是2^12-1=4095,然后,当自减到0之后,产生IWDG复位,正常运行时,为了避免复位呢,可以提前在重装值寄存器写一个值,IWDG_RLR,和定时器的ARR是一样的,在运行中,我们在这个键寄存器里,写一个特定数据,控制电路,进行喂狗,这时重装值,就会复制到当前的计数器中,这样计数器就会回到重装值,重新自减运行了,还有个状态寄存器,标志电路运行的状态了。上面这些寄存器,位于1.8V供电区,下面的主要工作电路,都位于VDD供电区。
只设置一个位就有可能会在误操作中,变成 1或者变成0,这个概率是比较大的,所以单独设置1位就来执行控制,是比较危险的。通过在整个键寄存器写入特定值来代替控制寄存器写入一位的功能,以降低硬件电路受到干扰的概率。
可以对寄存器写保护,防止误操作,写入指令,才能执行相应的操作。
LSI是输入时钟,40KHz,FLSI是40K, TLSI就是周期=0.025ms,之后输入时钟进行分频,相当于计数时间加倍,RL+1就是技术目标的计数个数。RL(0-4095).
大体上看比独立看门狗多了个早喂狗时间的限制,和独立看门狗不是一个思路。
如何进行重装计数器进行喂狗:这个直接在CNT写入数据就行了。
时钟来源是PCLK1,也就是APB1的时钟,这个时钟默认是36Mhz,进来之后,还是先经过一个预分频器进行分频,分配之后的时钟,驱动这个计数器进行计数,T6是溢出标志位,0x40,下一个值变为0111 1111,标志位变为0,表示发生溢出;通过线路产生复位信号。
首先,WDGA,是窗口看门狗的激活位,也就是使能,WDGA写入1,启动窗口看门狗,作用与门,两个来源任意一个,都可以复位,T6=0,溢出,非门后为1,经过或门产生复位信号。
最早界限:首先把计算好的写入到W6~W0中,写入CR,这个与门会打开,也就是写入计数器,也就是喂狗。一但比较,当前的计数器T6:0>窗口值W6:0比较结果就为1,也可以申请复位。喂狗太晚计数器减到0了。喂狗太早,计数器的值超过窗口值了,复位。
T6:0=W6:0就已经可以开始喂狗了,所以没有+1了。
如果用户在选择字节中启用了“硬件看门狗”功能,在系统上电复位后,看门狗会自动开始运行;如果在计数器计数结束前,若软件没有向键寄存器写入相应的值,则系统会产生复位。
IWDG_PR和IWDG_RLR寄存器具有写保护功能。要修改这两个寄存器的值,必须先向IWDG_KR寄存器中写入0x5555。以不同的值写入这个寄存器将会打乱操作顺序,寄存器将重新被保护。重装载操作(即写入0xAAAA)也会启动写保护功能。
看门狗计数到那个值没有库函数可以查看。
窗口看门狗:
启动看门狗 在系统复位后,看门狗总是处于关闭状态,设置WWDG_CR寄存器的WDGA位能够开启看门狗,随后它不能再被关闭,除非发生复位;
递减计数器处于自由运行状态,即使看门狗被禁止,递减计数器仍继续递减计数。当看门狗被启用时,T6位必须被设置,以防止立即产生一个复位。
问题
总结
本节课主要是了看门狗,其中有独立看门狗,窗口看门狗。其中独立看门狗和窗口看门狗的原理,实现方式不同。