当前位置: 首页 > news >正文

HAL 中断

三明治

不是 所有 HAL 库外设中断都 100 % 遵循同一套“三明治”模板,但 90 % 以上 都符合下面这套 “3 层套路” 的变体:

  1. 向量入口(IRQHandler)
  2. HAL 通用处理函数(HAL_XXX_IRQHandler)
  3. 用户弱定义回调函数(HAL_XXX_Callback)

只要记住 “先看 stm32f1xx_it.c 模板,再查 HAL 手册有无 *_IRQHandler 和 *_Callback”,基本不会踩坑。


典型“三明治”成员(完全一致)

外设IRQHandler通用处理常用回调
TIMxTIMx_IRQHandlerHAL_TIM_IRQHandlerHAL_TIM_PeriodElapsedCallback
USARTxUSARTx_IRQHandlerHAL_UART_IRQHandlerHAL_UART_RxCpltCallback / TxCpltCallback
SPIxSPIx_IRQHandlerHAL_SPI_IRQHandlerHAL_SPI_TxRxCpltCallback
ADCADCx_IRQHandlerHAL_ADC_IRQHandlerHAL_ADC_ConvCpltCallback
DMADMAx_Streamx_IRQHandlerHAL_DMA_IRQHandlerHAL_DMA_XferCpltCallback

稍微不同但仍“三件套”

  • EXTI
    EXTIx_IRQHandlerHAL_GPIO_EXTI_IRQHandlerHAL_GPIO_EXTI_Callback
  • RTC Alarm
    RTC_IRQHandlerHAL_RTC_AlarmIRQHandlerHAL_RTC_AlarmAEventCallback

例外情况(不按套路)

外设/场景为什么不一样
SysTick直接进 SysTick_Handler(),没有 HAL_SysTick_IRQHandler,回调是 HAL_IncTick()
独立看门狗 IWDG只有 IWDG_IRQHandler,HAL 没有专门处理函数,需要自己清 SR
部分外设早期库如 USB FS Device 旧库使用 USB_LP_CAN1_RX0_IRQHandler,但新版 HAL 统一为 HAL_PCD_IRQHandler

示例


1️⃣ 第 1 层:中断向量入口
stm32f1xx_it.c 里添加(CubeMX 已生成框架,只需填一行):

void TIM6_IRQHandler(void)
{HAL_TIM_IRQHandler(&htim6);   /* ← 把中断交给 HAL 处理 */
}

2️⃣ 第 2 层:HAL 的通用处理
HAL_TIM_IRQHandler(&htim6) 会自动:

  • 判断是哪一个中断源(Update、Capture、Compare…)
  • 清掉对应的中断标志位
  • 调用对应的 用户回调函数

3️⃣ 第 3 层:用户回调函数
在任意 .c 文件里实现(名字必须一模一样):

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if (htim->Instance == TIM6)      /* 确认是 TIM6 产生的中断 */{/* 这里写你的业务代码 */HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);   /* 例如翻转 LED */}
}
http://www.dtcms.com/a/297524.html

相关文章:

  • Python 数据分析(一):NumPy 基础知识
  • Kubernetes资源优化完整指南:从理论到实践的全面解决方案
  • Python之JSON:数据交换的轻量级桥梁
  • 【Unity笔记】OpenXR 之VR串流开发笔记:通过RenderTexture实现仅在PC端展示UI,在VR眼镜端隐藏UI
  • C语言|指针的应用
  • 算法:最长递增子序列解法记录
  • 【RDMA】Adapters PRM Mellanox Adapters Programmer’s Reference mellanox网卡编程手册0.52
  • C 语言输入输出 (I/O)
  • 数据结构学习之堆
  • 【C语言进阶】一篇文章教会你文件的读写
  • 基于GeoTools和SpringBoot的省域驾车最快路线生成实践
  • 金仓数据库:融合与智能驱动下的革新与未来
  • SpringBoot实战指南:从快速入门到生产级部署(2025最新版)
  • 通用CI/CD软件平台TeamCity v2025.3全新发布——主要界面交互体验升级
  • SqlRest让SQL秒变Http API,还支持20+数据库(含国产数据库)
  • S7-1500 与 ET200MP 的组态控制通信(Configuration Control)功能实现详解(下)
  • STM32基础知识学习笔记:ICODE、DCODE、DMA等常见名词的解释
  • c语言-数据结构-沿顺相同树解决对称二叉树问题的两种思路
  • Canal 1.1.7的安装
  • 京东获得JD商品详情 API 返回值说明||京东API接入文档
  • 二开----02
  • (2023AAAI)T2I-Adapter:学习挖掘文本到图像扩散模型的更可控能力
  • linux系统底层逻辑 开机顺序 ubuntu22.04系统
  • ubuntu中有不同版本的pcl时的使用策略
  • Redis替代方案:腾讯云TDSQL-C内存优化实战,TPS秒上涨
  • [特殊字符] VLA 如何“绕过”手眼标定?—— 当机器人学会了“看一眼就动手”
  • 技术笔记 | RK3588 X11 桌面 GPU 性能实测
  • LIMA:大语言模型对齐的“少即是多”革命——原理、实验与范式重构
  • webRTC合并本地源码修改和官方更新
  • Python之--集合