概述
窗口看门狗:
之所以称为窗口是因为其喂狗时间是一个有上下限的范围内(窗口),你可以通过设定相关寄存器,设定其上限时间(下限固定)。喂狗的时间不能过早也不能过晚。
而独立看门狗限制喂狗时间在0-x内,x由相关寄存器决定。喂狗的时间不能过晚。
窗口看门狗框图:
在图中,我们可以观察到,有两种情况可以导致系统复位。第一种情况就是,当计数器的值大于配置寄存器设置的窗口上限值时进行了喂狗操作;第二种情况就是,看门狗控制寄存器的T6位变成了低电平(也就是计数值由0x40变为了0x3F)
窗口看门狗工作示意图:
另外,如果开启了看门狗并且允许了中断,当计数器等于0x40时产生早起唤醒中断EWI,它可以用于喂狗以避免WWDG复位。
窗口看门狗超时时间的计算:
(窗口看门狗其他注意事项:)
1. 上窗口值W[6:0]必须大于下窗口值0x40。否则就无窗口了。
2. 窗口看门狗时钟来源PCLK1(APB1总线时钟)分频后。
接下来介绍对应的寄存器:
1.控制寄存器WWDG_CR
2.配置寄存器WWDG_CFR
3.状态寄存器WWDG_SR
WWDG操作的HAL库函数:
1. HAL_StatusTypeDef HAL_WWDG_Init(WWDG_HandleTypeDef *hwwdg);
2. void HAL_WWDG_MspInit(WWDG_HandleTypeDef *hwwdg);
3. HAL_StatusTypeDef HAL_WWDG_Start(WWDG_HandleTypeDef *hwwdg);
4. HAL_StatusTypeDef HAL_WWDG_Start_IT(WWDG_HandleTypeDef *hwwdg);
5. HAL_StatusTypeDef HAL_WWDG_Refresh(WWDG_HandleTypeDef *hwwdg);
6. void HAL_WWDG_IRQHandler(WWDG_HandleTypeDef *hwwdg);
7. void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef* hwwdg);
窗口看门狗配置过程:
1.使能窗口看门狗时钟:在HAL_WWDG_MspInit函数中。
2.初始化窗口看门狗:设置分频系数,窗口值,计数值等。
HAL_WWDG_Init(); 该函数还可以使能窗口看门狗提前唤醒中断 。
3.设置提前唤醒中断优先级:HAL_WWDG_MspInit
4.编写提前唤醒中断处理函数: HAL_WWDG_EarlyWakeupCallback();
喂狗: HAL_WWDG_Refresh();
例程:
WWDG_HandleTypeDef WWDG_Handler;
void WWDG_Init(u8 tr,u8 wr,u32 fprer)
{
WWDG_Handler.Instance=WWDG;
WWDG_Handler.Init.Prescaler=fprer;
WWDG_Handler.Init.Window=wr;
WWDG_Handler.Init.Counter=tr;
WWDG_Handler.Init.EWIMode=WWDG_EWI_ENABLE ;
HAL_WWDG_Init(&WWDG_Handler);
}
void HAL_WWDG_MspInit(WWDG_HandleTypeDef *hwwdg)
{
HAL_RCC_WWDG_CLK_ENABLE();
HAL_NVIC_SetPriority(WWDG_IRQn,2,3);
HAL_NVIC_EnableIRQ(WWDG_IRQn);
}
void WWDG_IRQHandler(void)
{
HAL_WWDG_IRQHandler(&WWDG_Handler);
}
void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef* hwwdg)
{
HAL_WWDG_Refresh(&WWDG_Handler);
LED1_Toggle;
}
最后
以上就是热心鞋垫为你收集整理的STM 32 窗口看门狗的全部内容,希望文章能够帮你解决STM 32 窗口看门狗所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复