STM32 Cubemx 同名外设中断及回调

文章目录

  • 前言
  • 示例工程
  • 个人理解

前言

最近在学习STM32,采用HAL库开发方式。记录一下同名外设中断及回调

这里提及的同名外设指USART1/2之类的相同外设,但不是同一个instance

示例工程

以使用cubemx配置两个同名外设EXTI0/EXT4为例。

在NVIC配置界面,勾选EXTI line0/4.
STM32 Cubemx 同名外设中断及回调_第1张图片

在Code Generation栏,勾选以下三项:

  1. Generate Enable in Init
  2. Generate IRQ handler
  3. call HAL handler

STM32 Cubemx 同名外设中断及回调_第2张图片

随后生成工程。

Cubemx生成的GPIO初始化函数中,有EXTI0/4的NVIC配置代码
STM32 Cubemx 同名外设中断及回调_第3张图片
在stm32f1xx_it.c文件中有EXTI0/4的IRQ handler。
STM32 Cubemx 同名外设中断及回调_第4张图片
并且这两个外设的中断处理函数中均调用了函数HAL_Handler。
其源码如下。
STM32 Cubemx 同名外设中断及回调_第5张图片

个人理解

当CPU接受到中断请求IRQ后,会进入中断服务函数IRQ Handler
因此在IRQ Handler函数中可以写上对应的功能。

而勾选Call HAL Handler之后在相应的IRQ Handler中生成了HAL_GPIO_EXTI_IRQHandler();

相当于回调函数是两个同名中断公有的服务函数,而IRQ Handler就是针对每个独立的IRQ的服务函数

因此回到最初的问题。如果我想要EXTI0翻转PB5电平EXTI4翻转PE5电平。函数如下:
STM32 Cubemx 同名外设中断及回调_第6张图片

而如果我想要两个EXTI0/4都有同一个功能,通过uart发送字符串。可以在各自的IRQ Handler中都加上该功能。或者改写他们公共的回调函数。这里以改写回调函数做示例。
STM32 Cubemx 同名外设中断及回调_第7张图片
STM32 Cubemx 同名外设中断及回调_第8张图片

你可能感兴趣的:(stm32,单片机,嵌入式硬件)