STM32中看门狗定时器代码及原理
时间: 2024-12-21 09:30:50 浏览: 18
STM32微控制器中的看门狗定时器(Watchdog Timer, WDT)是一种用于防止系统进入无限循环或死机状态的安全机制。其工作原理是,当系统运行正常时,WDT会被定期复位(停止计数),但如果程序出现故障导致WDT未被复位超过预设的时间,它会触发一个硬件中断,强制重启芯片到初始状态。
下面是一个简单的STM32F103C8T6(例如)使用IWDG(独立看门狗)的基本代码示例,假设我们正在初始化并开启一个基本的上电复位功能:
```c
#include "stm32f10x.h"
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
// 初始化时钟源
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 8; // 分频系数
RCC_OscInitStruct.PLL.PLLN = 336; // 主时钟频率 / HCLK (系统的最大值)
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; // PLL预分频
RCC_OscInitStruct.PLL.PLLQ = 7; // PLL后分频
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
while(1);
}
// 配置时钟选择
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
{
while(1);
}
// 开启独立看门狗,这里设置为上电复位
IWDG_WriteConfig(IWDG_WDTReloadValue, 0xFFFF); // 设置Reload计数值为最高,即每次复位
IWDG_Enable(); // 启动看门狗
}
阅读全文