电控统一培训 嵌软第二次培训任务:中断
知识学习
中断
1.中断的概念?
中断是意思为在keil5主程序运行当中,出现某些意外情况需主机干预时,机器能自动停止正在运行
的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。有多种中断,一旦触发
中断,中断程序检测到中断标志,开始调用中断相应服务程序,中断服务程序开始调用通用中断调用函
数void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin),再通过此函数调用回调函数__weak void
HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)来执行相应的中断程序具体操作。
2.为什么要有中断?
中断可以在处理一些系统的触发错误或者突发意外情况下 ,跳出程序并且对相应情况进行处理,可
以避免程序卡死等情况,是非常必要的。
3.中断的处理流程
其中总共分为四步:
(1)中断跳转:跳转到中断对应的中断服务程序(取决于gpio串口具体本身)
(2)执行中断服务程序:执行在stm32f4xx_it.c文件中对应的中断服务程序
(3)执行外部中断通用处理函数:判断中断标志并且清除,调用外部中断回调函数
(4)执行用户编写的回调函数:完成具体中断任务处理
4.HAL库中中断的调用流程
在主程序中首先进行外部中断初始化并且等待中断的触发,当相应的引脚上为设定的mode如上升
沿下降沿等触发时,调用对应的中断服务程序(EXTI0_IRQHandler),下一步调用外部中断通用处理函
数(HAL_GPIO_EXTI_IRQHandler),在此在调用外部中断回调函数(HAL_GPIO_EXTI_Callback)
实验内容
主函数模块
while (1)
{
if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin) == GPIO_PIN_SET)
{
HAL_GPIO_TogglePin(LED_RED_GPIO_Port, LED_RED_Pin);
HAL_Delay(1000);
}
if(HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin) == GPIO_PIN_RESET)
{
HAL_GPIO_TogglePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin);
HAL_Delay(1000);
}
评论0