仅做参考 步骤 1:启用 IWDG4 时钟 IWDG4 使用低速时钟源(LSE 或 LSI)。首先需要启用和配置低速时钟源。 #include "stm32mp1xx_hal.h" void SystemClock_Config(void); int main(void) { HAL_Init(); // 初始化 HAL 库 SystemClock_Config(); // 配置系统时钟 // 启用 LSE 作为 IWDG 时钟源 __HAL_RCC_LSE_CONFIG(RCC_LSE_ON); if (HAL_IS_BIT_SET(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY))) { // LSE 已就绪 __HAL_RCC_IWDG4_CLK_ENABLE(); // 启用 IWDG4 时钟 } else { // LSE 未就绪,可以切换到 LSI __HAL_RCC_LSI_ENABLE(); while (!__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY)); __HAL_RCC_IWDG4_CLK_ENABLE(); } while (1) { // 主循环 } }复制代码 步骤 2:初始化 IWDG4 配置 IWDG4 的计时器参数,包括预分频器和计时周期。 #include "stm32mp1xx_hal_iwdg.h" void IWDG4_Init(void) { IWDG_HandleTypeDef hiwdg4; // 初始化 IWDG4 hiwdg4.Instance = IWDG4; hiwdg4.Init.Prescaler = 32; // 预分频器 hiwdg4.Init.Reload = 1000; // 自动重装载值 hiwdg4.Init.Window = 0xFFFF; // 窗口值(可选) hiwdg4.Init.Counter = 0x0; // 初始计数值 hiwdg4.Init.ClockSource = IWDG_CLOCKSOURCE_LSI; // 时钟源为 LSI hiwdg4.Init.EWIV = IWDG_EWIV_ENABLE; // 使能早期唤醒中断(可选) HAL_IWDG_Init(&hiwdg4); } int main(void) { HAL_Init(); SystemClock_Config(); IWDG4_Init(); // 初始化 IWDG4 while (1) { // 主循环 } }复制代码 步骤 3:触发复位 当 IWDG4 的计时器溢出时,会触发系统复位。为了测试复位功能,可以手动触发 IWDG4 的溢出: void HAL_IWDG_RefreshCallback(IWDG_HandleTypeDef *hiwdg) { // 处理 IWDG 溢出事件 HAL_NVIC_SystemReset(); // 触发系统复位 } int main(void) { HAL_Init(); SystemClock_Config(); IWDG4_Init(); while (1) { HAL_Delay(5000); // 延时 5 秒 HAL_IWDG_Refresh(&hiwdg4); // 刷新 IWDG4 计时器 } }复制代码
所在话题
参与活动
-
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
线下 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
网络 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
网络 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
网络 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
线下 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
线下 2020-10-16