一、看门狗介绍
窗口看门狗(WWDG)也是程序中用的比较多的,通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。
窗口看门狗相对独立看门狗对计数器的刷新时间要求更加严格。必须在限定的时间窗口内刷新计数器。。
窗口看门狗(WWDG)激活后,满足以下条件会产生复位。
1.递减计数器的值小于0x40时(即从0x40滚到0x3F)会产生复位。
2.计数器值大于窗口寄存器的值时,如果软件重载计数器,则会产生复位。
3.从上面的时序图中可以看到,如果递减计数器的值(T[6:0])大于窗口寄存器(W[6:0])的值,重载计数器会产生复位。当递减计时器的值小于0x40时,也会产生复位。所以只能在W[6:0] ~ 0x3F之间刷新,在窗口之外重载递减计数器时复位。存储在窗口寄存器(WWDG_CR)中的值必须介于0xFF和0xC0之间。开启窗口看门狗中断时,当递减计数器的值等于0x40时触发中断
二、STM32CubeMX配置(本文使用的STM32CubeMX版本为5.6.0)
思路:每进入喂狗一次,串口打印输出一次喂狗成功
1.MCU选型
本例程使用的为STM32L051C8T6型号
2.使能时钟
3.设置GPIO口
4.开启独立看门狗
①配置状态
计算方式如下:
窗口看门狗定时器基于APB1频率,这里的频率为32MHZ,如定义65ms周期的窗口看门狗定时器计算方式如下:
最小允许刷新时间
t(ms)= 1÷(32000÷4096÷8)*(127-64)= 64.512ms
最晚刷新时间
t(ms)= 1÷(32000÷4096÷8)*(127-63)= 65.536ms
也就是程序不得早于64.512ms进行刷新,不得晚于65.536ms进行刷新。否则系统将会产生复位
②串口打印部分的配置可参看前面的文章(4)串口实验配置
5.配置STM32CubeMX生成工程文件
6.点击GENERATE CODE生成工程文件
二、KEIL程序
1.相关函数:
独立看门狗初始化函数,此函数初始化了在STM32CubeMX内设置的参数,系统已经处理好了,并已经添加在了main函数内;
MX_WWDG_Init(); //窗口看门狗初始化
void MX_WWDG_Init(void)
{
hwwdg.Instance = WWDG;
hwwdg.Init.Prescaler = WWDG_PRESCALER_8;
hwwdg.Init.Window = 64;
hwwdg.Init.Counter = 64;
hwwdg.Init.EWIMode = WWDG_EWI_DISABLE;
if (HAL_WWDG_Init(&hwwdg) != HAL_OK)
{
Error_Handler();
}
}
喂狗调用函数,这个需要我们自行添加到main函数的while内;
HAL_WWDG_Refresh(hwwdg); 本例程采用EWI功能函数HAL_WWDG_EarlyWakeupCallback()。这个中断函数在当向下计数器记到0X40时将会生效(产生复位0x3F的上一个状态),我们在此函数中进行喂狗即可。
void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef* hwwdg)
{
HAL_WWDG_Refresh(hwwdg);
printf(“nr 喂狗成功 !!!nr”);
}
2.编译文件,下载。即可。
一、看门狗介绍
窗口看门狗(WWDG)也是程序中用的比较多的,通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。
窗口看门狗相对独立看门狗对计数器的刷新时间要求更加严格。必须在限定的时间窗口内刷新计数器。。
窗口看门狗(WWDG)激活后,满足以下条件会产生复位。
1.递减计数器的值小于0x40时(即从0x40滚到0x3F)会产生复位。
2.计数器值大于窗口寄存器的值时,如果软件重载计数器,则会产生复位。
3.从上面的时序图中可以看到,如果递减计数器的值(T[6:0])大于窗口寄存器(W[6:0])的值,重载计数器会产生复位。当递减计时器的值小于0x40时,也会产生复位。所以只能在W[6:0] ~ 0x3F之间刷新,在窗口之外重载递减计数器时复位。存储在窗口寄存器(WWDG_CR)中的值必须介于0xFF和0xC0之间。开启窗口看门狗中断时,当递减计数器的值等于0x40时触发中断
二、STM32CubeMX配置(本文使用的STM32CubeMX版本为5.6.0)
思路:每进入喂狗一次,串口打印输出一次喂狗成功
1.MCU选型
本例程使用的为STM32L051C8T6型号
2.使能时钟
3.设置GPIO口
4.开启独立看门狗
①配置状态
计算方式如下:
窗口看门狗定时器基于APB1频率,这里的频率为32MHZ,如定义65ms周期的窗口看门狗定时器计算方式如下:
最小允许刷新时间
t(ms)= 1÷(32000÷4096÷8)*(127-64)= 64.512ms
最晚刷新时间
t(ms)= 1÷(32000÷4096÷8)*(127-63)= 65.536ms
也就是程序不得早于64.512ms进行刷新,不得晚于65.536ms进行刷新。否则系统将会产生复位
②串口打印部分的配置可参看前面的文章(4)串口实验配置
5.配置STM32CubeMX生成工程文件
6.点击GENERATE CODE生成工程文件
二、KEIL程序
1.相关函数:
独立看门狗初始化函数,此函数初始化了在STM32CubeMX内设置的参数,系统已经处理好了,并已经添加在了main函数内;
MX_WWDG_Init(); //窗口看门狗初始化
void MX_WWDG_Init(void)
{
hwwdg.Instance = WWDG;
hwwdg.Init.Prescaler = WWDG_PRESCALER_8;
hwwdg.Init.Window = 64;
hwwdg.Init.Counter = 64;
hwwdg.Init.EWIMode = WWDG_EWI_DISABLE;
if (HAL_WWDG_Init(&hwwdg) != HAL_OK)
{
Error_Handler();
}
}
喂狗调用函数,这个需要我们自行添加到main函数的while内;
HAL_WWDG_Refresh(hwwdg); 本例程采用EWI功能函数HAL_WWDG_EarlyWakeupCallback()。这个中断函数在当向下计数器记到0X40时将会生效(产生复位0x3F的上一个状态),我们在此函数中进行喂狗即可。
void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef* hwwdg)
{
HAL_WWDG_Refresh(hwwdg);
printf(“nr 喂狗成功 !!!nr”);
}
2.编译文件,下载。即可。
举报