网站建设网上商城,网站规划和建设的基本要求,公司网页制作设计,icp备案综合查询网站STM32中的看门狗(Watchdog)是一种用于监控系统运行状态并在系统故障或死锁时执行自动复位的硬件功能。在本文中#xff0c;我将介绍如何在STM32微控制器中使用看门狗来实现系统的自动复位。下面是详细的解释#xff1a;
一、看门狗原理简介 看门狗是一种独立的硬件计时器我将介绍如何在STM32微控制器中使用看门狗来实现系统的自动复位。下面是详细的解释
一、看门狗原理简介 看门狗是一种独立的硬件计时器在启动看门狗计时器之后系统需要在一定的时间内喂狗即清除计时器计数值否则看门狗将会超时触发系统自动复位。这是一种预防系统死锁或异常情况的安全机制。
二、看门狗的配置 在STM32中看门狗的配置主要涉及以下几个方面时钟源、预分频系数、重载值和使能位。
1. 时钟源通常可以选择LSI低速内部时钟或LSI的2倍作为看门狗的时钟源。
2. 预分频系数预分频系数用于控制看门狗计时器的时钟频率根据系统需求选择合适的预分频系数。
3. 重载值重载值决定了看门狗计时器的定时时长当看门狗计时器达到重载值时将会触发系统复位。
4. 使能位使能位用于启用或禁用看门狗功能。
下面是一个使用STM32Cube HAL库配置看门狗的示例代码 c
#include main.h
#include stm32f4xx_hal.hWWDG_HandleTypeDef hwwdg;void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_WWDG_Init(void);int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_WWDG_Init();while (1){// 喂狗HAL_WWDG_Refresh(hwwdg);}
}void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct {0};RCC_ClkInitTypeDef RCC_ClkInitStruct {0};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 25;RCC_OscInitStruct.PLL.PLLN 336;RCC_OscInitStruct.PLL.PLLP RCC_PLLP_DIV2;RCC_OscInitStruct.PLL.PLLQ 7;if (HAL_RCC_OscConfig(RCC_OscInitStruct) ! HAL_OK){Error_Handler();}RCC_ClkInitStruct.ClockType RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider RCC_HCLK_DIV4;RCC_ClkInitStruct.APB2CLKDivider RCC_HCLK_DIV2;if (HAL_RCC_ClockConfig(RCC_ClkInitStruct, FLASH_LATENCY_5) ! HAL_OK){Error_Handler();}HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / 1000);HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}static void MX_WWDG_Init(void)
{hwwdg.Instance WWDG;hwwdg.Init.Prescaler WWDG_PRESCALER_8;hwwdg.Init.Window 127;hwwdg.Init.Counter 127;if (HAL_WWDG_Init(hwwdg) ! HAL_OK){Error_Handler();}
}以上代码中我们首先初始化系统时钟System Clock然后初始化GPIO和看门狗计时器。在main函数中在一个无限循环中我们通过调
用HAL_WWDG_Refresh函数来喂狗确保看门狗计时器的计数值不会超时从而防止系统自动复位。
在以上代码中我们配置了一个预分频系数为8重载值为127的看门狗计时器并在无限循环中调用HAL_WWDG_Refresh函数来喂狗以保证系统的正常运行。如果系统中出现了死锁或其他异常情况导致程序未能及时喂狗导致计数器超时看门狗将会触发系统复位从而实现系统自动复位的功能。
三、注意事项 在使用STM32中的看门狗功能时需要注意以下几点
1. 重载值的选择重载值的选择需要根据系统运行时间和所需的复位间隔来确定。如果重载值太小可能会导致看门狗频繁触发复位影响系统的稳定性如果重载值太大可能会导致看门狗计数器无法及时超时从而无法实现自动复位的功能。
2. 喂狗的频率在使用看门狗功能时需要定时喂狗否则看门狗会在计时器超时时触发系统复位。喂狗的频率应该在重载值的一半以上以保证系统能够正常运行。
3. 系统的初始化时间看门狗计数器的启动时间需要一定的时间因此在初始化系统时需要保证计时器已经启动并工作正常。
4. 发生异常时的处理如果程序发生异常例如死锁或死循环等情况可能会导致看门狗计时器无法及时喂狗从而触发系统复位。因此需要注意程序的稳定性和安全性尽可能避免出现异常情况并进行针对性的处理。
总结 在STM32中使用看门狗实现系统自动复位需要进行时钟源、预分频系数、重载值和使能位的配置。通过定时喂狗可以保证看门狗计时器的正常工作防止系统出现异常情况实现系统的自动复位功能。
嵌入式物联网的学习之路非常漫长不少人因为学习路线不对或者学习内容不够专业而错失高薪offer。不过别担心我为大家整理了一份150多G的学习资源基本上涵盖了嵌入式物联网学习的所有内容。点击这里0元领取学习资源让你的学习之路更加顺畅记得点赞、关注、收藏、转发哦。
点击链接扫码进入嵌入式交流群 https://fss.mpay8.cn/article/dmrjinh2C6fjejm