以窗口看门狗为例
STM32的中断配置流程通常为
先创建句柄
WWDG_HandleTypeDef WWDG_Handler;
WWDG_Handler通常有几个成员,其中包括instance成员表示配置的对象
WWDG_Hadler.init成员也是一个结构体变量,其成员包括需要设置的参数,以看门狗为例
包含
WWDG_Handler.init.Prescaler 设置分频系数
WWDG_Handler.init.Window 设置窗口值
WWDG_Handler.init.Counter 设置计数器值
编写WWDG_Init函数,在其中配置好参数,并调用HAL_WWDG_Init(&WWDG_Handler)完成对看门狗的参数设置初始化。
前面调用的HAL_WWDG_Init(&WWDG_Handler)函数其内部调用了MSP回调函数,其功能类似同样是进行初始化配置,对时钟使能,设置优先级,使能中断。重写MSP函数后不需要再运行MSP函数,调用HAL_WWDG_Init(&WWDG_Handler)时其内部就调用了MSP函数。
以上完成了中断配置。
当中断触发后,会进入中断服务函数void WWDG_IRQHandler(),我们通常在中断服务函数中调用中断处理共用函数HAL_WWDG_IRQHandler(&WWDG_Handler),经过中断共用函数的判断后,将会调用相应的回调函数void HAL_WWDG_EarlyWakeupCalback(WWDG_HandlerTypeDef *hwwdg),中断时的我们希望实现的功能最终在回调函数中实现,以看门狗为例,我们希望程序正常运行时看门狗不会导致程序重启,因此我们加入看门狗刷新函数HAL_WWDG_Refresh(&WWDG_Handler);
再加入LED灯状态以观察看门狗运行是否正常
LED1=!LED1;