STM32HAL库-WWDG窗口看门狗

目录

WWDG简介

WWDG介绍

WWDG有什么作用

WWDG工作原理

WWDG框图

WWDG寄存器

控制寄存器WWDG_  CR

配置寄存器WWDG_CFR

状态寄存器WWDG_SR

​编辑

WWDG超时时间计算

WWDG配置步骤

WWDG配置步骤介绍

相关HAL库函数介绍

IWDG和WWDG的主要区别


WWDG简介

WWDG介绍

Window Watch Dog,窗口看门狗

WWDG是一个能产生 系统复位信号 和 提前唤醒中断 的计数器

WWDG的特性

递减的计数器

1、当递减计数器的值从0x40减到0x3F时复位(即T6位跳变到0)  0x40=64  0x3f=63

2、计数器的值大于W[6:0]值时喂狗仍会复位  W[6:0]是窗口的上限值

3、当递减计数器等于0x40时可产生提前唤醒中断(EWI)

4、WWDG防止复位要在窗口期内喂狗

WWDG有什么作用

WWDG可用于监测单片机程序运行时效是否精准,主要检测软件异常

WWDG的时钟是来自于系统总线的时钟,与IWDG的LSI内部低速时钟信号相比更精确,适用于需要精确检测程序运行时间的场合

WWDG工作原理

WWDG其实就是可以设定一个窗口值,

这个窗口值范围在计数器初始值和约定的0x3F(=63)之间,0x3F又被称为窗口下限值

计数值在窗口值和窗口下限值之间喂狗才能防止复位,在窗口值之前喂狗就会导致立即复位

计数值减到0x40时可以产生提前唤醒EWI中断,减到0x3F时可产生复位

WWDG框图

WWDG的时钟源来自PCLK,PCLK全称Peripheral Clock,外设时钟,其实就是指APB时钟,CPLK1就是指APB1,其实也就是低速总线时钟,与HCLK:AHB高速总线时钟相区别

42MHz的总线时钟经过固定为4096的分频系数后,再根据用户设定的预分频器值再次分频,之后信号到达6位递减计数器,WWDG被称为激活位,用来使能WWDG工作。

WWDG位是1经过与门后才能与其他信号输出1

 关于6位递减计数器的解释

0x40是0x0100 0000

0x3F是0x0011 1111

当从0x40减到0x3F时,对应的就是T6位跳变到0,信号取反后输入或门

WWDG寄存器

窗口看门狗WWDG一共有3个寄存器,

控制寄存器WWDG_CR

配置寄存器WWDG_CFR

状态寄存器WWDG_SR

控制寄存器WWDG_  CR

WWDG_CR是16位寄存器,低8位有效,包括 1bit 的看门狗使能位WDGA 和T[6:0]这7位计数器

控制寄存器WWDG_CR用于

使能窗口看门狗,

设置重载计数器值

不管是给计数器初始值还是重装载值,直接对WWDG_CR的T[6:0]进行写操作就行

当计数器值从0x40减到0x3F,也就是T6位从1变到0时会产生复位

配置寄存器WWDG_CFR

配置寄存器WWDG_CFR是16位寄存器,低10位有效

WWDG_CFR配置寄存器用于

使能EWI提前唤醒中断

设置预分频系数

设置窗口上限值

位9是 EWI提前唤醒中断使能位。使能后WWDG计数到0x40就会产生EWI提前唤醒中断

位 8 : 7 是分频系数 对应1、2、4、8倍分频

位 [6:0] 是7位窗口值

注意"此中断只有在复位后才由硬件清零"是指EWI中断标志位只有复位后才能硬件清零,否则只能软件清零

状态寄存器WWDG_SR

WWDG_SR是16位寄存器,1个有效位,就是EWI提前唤醒中断的中断标志位

WWDG_SR寄存器用于判断是否发生了WWDG_EWI提前唤醒中断

如果发生了EWI提前唤醒中断,WWDG_SR的EWI中断标志位就会置1,除非复位,否则只能软件清零。不清零就不会产生该中断。

WWDG超时时间计算

WWDG溢出时间 = (4096*预分频系数*计数个数)/时钟源频率   

4096*预分频系数/时钟源频率=1/WWDG工作频率 = 一个数的时间

T[5:0]代表一个范围,最大值是0x0011 1111 ,也就是63  ,+1就是64

由于WWDG_CR控制寄存器有7位用于装载计数值,

计数最大值就是0x7F,也就是127

而最小值是0x3F,也就是63

127-63=可用于计数的最大值=64

因此公式中T[5:0]+1其实代表了计数的个数

F4系列WWDG最短/最长超时时间

WWDG配置步骤

WWDG配置步骤介绍

/*******************************WWDG初始化*************************************/

1、工作参数初始化                   HAL_WWDG_Init()

/*******************************WWDG中断函数初始化**************************/

2、WWDG Msp初始化             HAL_WWDG_MspInit()    配置NVIC、CLOCK等

3、设置优先级,使能中断        HAL_NVIC_SetPriority()、HAL_NVIC_EnableIRQ()

4、编写中断服务函数               WWDG_IRQHandler() --- HAL_WWDG_IRQHandler()

5、重写提前唤醒回调函数        HAL_WWDG_EarlyWakeupCallback()

/********************************喂狗***************************************************/

6、在窗口期内喂狗                   HAL_WWDG_Refresh()   

相关HAL库函数介绍

HAL_WWDG_Init()   

主要操作CR来使能WWDG并预设计数值,操作CFG来寄存器使能EWI中断,预设分频系数和窗口值

HAL_WWDG_Refresh()   

主要操作WWDG_CR来重装载计数器

IWDG和WWDG的主要区别

IWDG

键值寄存器IWDG_KR、

重装载寄存器IWDG_RLR、

预分频寄存器IWDG_PR、

状态寄存器IWDG_SR

键值寄存器写入0x5555来使能重装载寄存器RLR和预分频寄存器PR的写权限,写入时要求状态寄存器SR的相应状态位为0;

键值寄存器KR写入0xcccc来使能IWDG;键值寄存器KR写入0xaaaa来执行喂狗操作

WWDG

控制寄存器WWDG_CR

配置寄存器WWDG_CFR

状态寄存器WWDG_SR

控制寄存器CR用来使能WWDG并装载计数值

配置寄存器设定预分频系数和窗口值

状态寄存器只有一位有效作为EWI中断的标志位

WWDG可以在计数到0x3F时触发EWI提前唤醒中断,中断回调函数里面可以写喂狗函数

IWDG就得自己找法子看喂狗函数放哪儿了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大象荒野

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值