stm32f103c8t6hal库看门狗
时间: 2025-02-14 18:14:12 浏览: 56
### STM32F103C8T6 HAL 库实现看门狗功能
#### 独立看门狗 (Independent Watchdog, IWDG)
独立看门狗是一种硬件定时器,当程序运行异常时可以自动重启系统。通过定期刷新计数器来防止其溢出,如果发生未预期的行为导致无法及时刷新,则会触发复位。
为了初始化并启动独立看门狗,在 `main.c` 文件中编写如下代码:
```c
#include "stm32f1xx_hal.h"
IWDG_HandleTypeDef hiwdg;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
// 初始化独立看门狗
hiwdg.Instance = IWDG;
hiwdg.Init.Prescaler = IWDG_PRESCALER_32; // 设置预分频系数为32
hiwdg.Init.Reload = 4095; // 刷新值设置为最大
if(HAL_IWDG_Init(&hiwdg) != HAL_OK){
Error_Handler(); // 错误处理函数
}
while(1){
/* 用户应用程序 */
// 定期喂狗操作
__HAL_IWDG_RELOAD_COUNTER(&hiwdg); // 刷新计数器
HAL_Delay(1000); // 延迟一段时间再继续循环
}
}
```
此段代码展示了如何利用 HAL 函数完成对独立看门狗模块的基本配置与激活过程[^1]。
#### 窗口看门狗 (Window WatchDog, WWDG)
窗口看门狗相比独立版本增加了更多灵活性,允许设定一个时间窗范围内的合法重装载周期。一旦超出这个区间就会引发中断或复位事件。下面是一个简单的例子说明怎样启用窗口看门狗服务:
```c
#include "stm32f1xx_hal.h"
WWDG_HandleTypeDef hwwdg;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
// 配置窗口看门哥
hwwdg.Instance = WWDG;
hwwdg.Init.Window = 60; // 时间窗口上限
hwwdg.Init.Counter = 70; // 起始计数值
hwwdg.Init.EWSRPosition = WWDG_EWCR_WDGTB_0; // 设定早期唤醒间隔
if(HAL_WWDG_Init(&hwwdg)!= HAL_OK){
Error_Handler(); // 错误处理函数
}
while(1){
/* 用户应用程序 */
// 在指定的时间内重新加载计数寄存器
if(__HAL_WWDG_GET_FLAG(&hwwdg,WWDG_FLAG_EWKUP)){
__HAL_WWDG_CLEAR_FLAG(&hwwdg,WWDG_FLAG_EWKUP);
// 执行必要的恢复措施
HAL_WWDG_Refresh(&hwwdg,hwwdg.Init.Counter); // 更新计数器
}else {
// 如果错过了正确的时间窗口则会发生复位
}
HAL_Delay(1000); // 延迟一段时间再继续循环
}
}
```
这段代码实现了窗口看门狗的初始化以及在主循环中的管理逻辑。
阅读全文
相关推荐


















