当前位置: 代码迷 >> 综合 >> 【STM32】(6) 独立看门狗实验
  详细解决方案

【STM32】(6) 独立看门狗实验

热度:38   发布时间:2024-02-07 19:19:47.0

一、实验目的

我们通过DS0和DS1来指示STM32F767的复位情况和窗口看门狗的喂狗情况。

二、代码及分析

WWDG_HandleTypeDef  wwdg_handler;void HAL_WWDG_MspInit(WWDG_HandleTypeDef *hwwdg)
{__HAL_RCC_WWDG_CLK_ENABLE();HAL_NVIC_EnableIRQ(WWDG_IRQn );				     //使能WWDG_IRQn 中断通道HAL_NVIC_SetPriority(WWDG_IRQn ,2,3);			//抢占优先级2,子优先级3}void WWDG_IRQHandler (void)
{HAL_WWDG_IRQHandler(&wwdg_handler);}void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef* hwwdg)
{// HAL_WWDG_Refresh(&wwdg_handler);LED1_Toggle; 
}int main(void)
{Cache_Enable();                 //打开L1-CacheHAL_Init();				        //初始化HAL库Stm32_Clock_Init(432,25,2,9);   //设置时钟,216Mhz delay_init(216);                //延时初始化uart_init(115200);		        //串口初始化LED_Init();                     //初始化LEDKEY_Init();   	                //按键初始化LED0(0);                        //点亮LED0delay_ms(300);                  //延时300ms再初始化看门狗,LED0的变化"可见"wwdg_handler.Instance = WWDG;wwdg_handler.Init.Prescaler = WWDG_PRESCALER_8;wwdg_handler.Init.Window = 0x5f;wwdg_handler.Init.Counter= 0x7f;wwdg_handler.Init.EWIMode=WWDG_EWI_ENABLE; //使能窗口看门狗提前唤醒中断 HAL_WWDG_Init(&wwdg_handler);while(1){LED0(1);                    //熄灭LED灯}
}

(1) 通过函数HAL_WWDG_Init( )来设置 窗口值、分频数和计数器初始值。

 (2) 在回调函数HAL_WWDG_MspInit( ) 中,使能看门狗时钟,设置看门狗提前唤醒中断的优先级。

(3)  在窗口看门狗中断服务函数 WWDG_IRQHandler ( ) 中调用 HAL_WWDG_IRQHandler( )。

(4)  HAL_WWDG_IRQHandler( ) 会调用提前唤醒回调函数 HAL_WWDG_EarlyWakeupCallback()在该函数内部编写喂狗操作和LED1翻转。