STM32 HAL库学习 (3) 中断!

    中断在单片机开发中有着重中之重的地位。
   中断即打断,实至CPU再执行当前程序时,由于系统出现了某种需要处理的紧急情况,CPU暂停正在执行的程序,转而去执行另一段特殊程序来处理的出现的紧急事务,处理结束后CPU自动返回到原先暂停的程序中去继续执行,这种执行过程由于外界的的原因被中间打断的情况成为中断。
中断的作用:
   中断使得计算机系统具备应对对处理突发事件的能力,提高了CPU的工作效率,如果没有中断系统,CPU就只能按照原来的程序编写的先后顺序,对各个外设进行查询和处理,即轮询工作方式,轮询方法貌似公平,但实际工作效率却很低,却不能及时响应紧急事件。
————————————————
原文链接:https://blog.csdn.net/qq_50712601/article/details/111667407

一、EXTI 的 HAL 库驱动


    前面讲解 HAL_GPIO_Init 函数的时候有提到过:HAL 库的 EXTI 外部中断的设置功能整合到 HAL_GPIO_Init 函数里面,而不是单独独立一个文件。所以我们的外部中断的初始化函数也是用 HAL_GPIO_Init 函数。
    既然是要用到外部中断,所以我们的 GPIO 的模式要从下面的三个模式中选中一个:
image


EXTI 外部中断配置步骤


1) 使能 IO 口时钟。
    本实验用到的 GPIO 和按键输入实验是一样的,因此 GPIO 时钟使能也是一样的,请参考
上一章代码。
2) 设置 IO 口模式,触发条件,开启 SYSCFG 时钟,设置 IO 口与中断线的映射关系。
    这些步骤 HAL 库全部封装在 HAL_GPIO_Init 函数里面,我们只需要设置好对应的参数,
再调用 HAL_GPIO_Init 函数即可完成配置。
3)配置中断优先级(NVIC),并使能中断。
    配置好 GPIO 模式以后,我们需要设置中断优先级和使能中断,中断优先级我们使用HAL_NVIC_SetPriority 函数设置,中断使能我们使用 HAL_NVIC_EnableIRQ 函数设置。
4) 编写中断服务函数。
    每开启一个中断,就必须编写其对应的中断服务函数,否则将导致死机(CPU 将找不到中断服务函数)。中断服务函数接口厂家已经在 startup_stm32f407xx.s 中写好了。
5)编写中断处理回调函数 HAL_GPIO_EXTI_Callback
    HAL 库为了用户使用方便,提供了一个中断通用入口函数HAL_GPIO_EXTI_IRQHandler,在该函数内部直接调用回调函数 HAL_GPIO_EXTI_Callback。
    我们先来看一下 HAL_GPIO_EXTI_IRQHandler 函数定义:
image
    该函数实现的作用非常简单,通过入口参数 GPIO_Pin 判断中断来自哪个 IO 口,然后清除相应的中断标志位,最后调用回调函数 HAL_GPIO_EXTI_Callback()实现控制逻辑。在所有的外部中断服务函数中直接调用外部中断共用处理函数 HAL_GPIO_EXTI_IRQHandler,然后在回调函数 HAL_GPIO_EXTI_Callback 中通过判断中断是来自哪个 IO 口编写相应的中断服务控制逻辑。
    因此我们可以在 HAL_GPIO_EXTI_Callback 里面实现控制逻辑编写。

posted @ 2023-03-18 22:17  Charaine  阅读(311)  评论(0编辑  收藏  举报