智能网站建设模板售后,用帝国做的网站只收录首页,网页制作考试素材,公司网站模板中英文文章目录 前言示例工程个人理解 前言
最近在学习STM32#xff0c;采用HAL库开发方式。记录一下同名外设中断及回调。
这里提及的同名外设指USART1/2之类的相同外设#xff0c;但不是同一个instance。
示例工程
以使用cubemx配置两个同名外设EXTI0/EXT4为例。
在NVIC配置… 文章目录 前言示例工程个人理解 前言
最近在学习STM32采用HAL库开发方式。记录一下同名外设中断及回调。
这里提及的同名外设指USART1/2之类的相同外设但不是同一个instance。
示例工程
以使用cubemx配置两个同名外设EXTI0/EXT4为例。
在NVIC配置界面勾选EXTI line0/4.
在Code Generation栏勾选以下三项
Generate Enable in InitGenerate IRQ handlercall HAL handler 随后生成工程。
Cubemx生成的GPIO初始化函数中有EXTI0/4的NVIC配置代码 在stm32f1xx_it.c文件中有EXTI0/4的IRQ handler。 并且这两个外设的中断处理函数中均调用了函数HAL_Handler。 其源码如下。
个人理解
当CPU接受到中断请求IRQ后会进入中断服务函数IRQ Handler。 因此在IRQ Handler函数中可以写上对应的功能。
而勾选Call HAL Handler之后在相应的IRQ Handler中生成了HAL_GPIO_EXTI_IRQHandler();
相当于回调函数是两个同名中断公有的服务函数而IRQ Handler就是针对每个独立的IRQ的服务函数。
因此回到最初的问题。如果我想要EXTI0翻转PB5电平EXTI4翻转PE5电平。函数如下
而如果我想要两个EXTI0/4都有同一个功能通过uart发送字符串。可以在各自的IRQ Handler中都加上该功能。或者改写他们公共的回调函数。这里以改写回调函数做示例。