STM32F103窗口看门狗(学习笔记)

什么是窗口看门狗?

之所以称为窗口就是因为其喂狗时间是一个上下限的范围内(窗口),你可以通过设定相关寄存器,设定其上限时间(下限固定)。喂狗的时间不能过早也不能过晚。

独立看门狗限制喂狗时间在0~x内,x由相关寄存器决定。喂狗的时间不能过完。

STM32F103窗口看门狗(学习笔记)_第1张图片

CNT递减计数器在往下递减的过程中,在计数到W[6:0]的值(在寄存器中配置其值)之前是不能喂狗的,在W[6:0]和3Fh之间计数时可以去喂狗,如果到达3Fh时都没有喂狗,则会产生复位信号。

STM32F103窗口看门狗(学习笔记)_第2张图片

 

STM32F的窗口看门狗中有一个7位的递减计数器T[6:0],它会出现下述2种情况之一时产生看门狗复位。

1.当喂狗的时候如果计数器的值大于某一设定数值W[6:0]时,此设定数值在WWDG_CFR寄存器定义。

2.当计数器的数值从0x40减到0x3F时【T6位跳变到0】

如果启动了看门狗并且允许中断,当递减计数器等于0x40时产生早期唤醒中断(EWI),它可以用于喂狗避免WWDG复位。

窗口看门狗超时时间

STM32F103窗口看门狗(学习笔记)_第3张图片

 为什么要窗口看门狗?

对于一般的看门狗,程序可以在它产生复位前的任意时刻刷新看门狗,但这有一个隐患,有可能程序跑乱了有跑回到正常的地方,或者跑乱的程序正好执行了刷新看门狗操作,这样的情况下一般的看门狗就检测不出来了;如果使用窗口看门狗,程序员可以根据程序正常执行的时间设置刷新看门狗的一个时间窗口,保证不会提前刷新看门狗也不会滞后刷新看门狗,这样可以检测出程序没有按照正常的路径运行非正常地跳过了某些程序段的情况。

窗口看门狗其他注意事项:1.上窗口值W[6:0]必须大于下窗口值0x40.否则就无窗口了。2.窗口看门狗时钟来源PCLK1(APB1总线时钟)分频后。

窗口看门狗相关寄存器

1.控制寄存器WWDG_CR

STM32F103窗口看门狗(学习笔记)_第4张图片

 

 2.配置寄存器WWDG_CFR

STM32F103窗口看门狗(学习笔记)_第5张图片

 

 

 3.状态寄存器WWDG_SR

STM32F103窗口看门狗(学习笔记)_第6张图片 

 

 窗口看门狗相关库函数

void WWDG_DeInit(void);//复位寄存器
void WWDG_SetPrescaler(uint32_t WWDG_Prescaler);//设置预分频
void WWDG_SetWindowValue(uint8_t WindowValue);//设置窗口值
void WWDG_EnableIT(void);//使能中断
void WWDG_SetCounter(uint8_t Counter);//喂狗
void WWDG_Enable(uint8_t Counter);//启动看门狗并设置初值
FlagStatus WWDG_GetFlagStatus(void);//获取状态标志位
void WWDG_ClearFlag(void);//清楚标志位

窗口看看门狗配置过程

1.使能看门狗时钟:RCC_APB1PeriphClockCmd();

2.设置分频系数:WWDG_SetPrescaler();

3.设置上窗口值:WWDG_SetWindowValue();

4.开启提前唤醒中断并分组(可选):WWDG_EnableIT();  NVIC_Init();

5.使能看门狗:WWDG_Enable();

6.喂狗:WWDG_SetCounter();

7.编写中断服务函数:WWDG_IRQHandler();

你可能感兴趣的:(stm32,学习)