news 2026/4/4 16:47:10

STM32HAL库中断教程以及分装中断工具函数(附下载地址)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STM32HAL库中断教程以及分装中断工具函数(附下载地址)

文章内容

  1. 使用HAL库实现引脚外部中断
  2. 封装中断工具函数

快速入门

  1. 访问git仓库: Guardian-Elf/Guardian-Elf-Embedded
  2. 找到并下载中断工具文件(2个文件:Interrupt.h/.c)
  3. 由于我的项目中使用了串口来调试中断函数,所以如果报错就把无关的代码删除
  4. 代码示例
/* by 01130.hk - online tools website : 01130.hk/zh/jsonzip.html */ // 配置GPIOB的1,0引脚 void Interrupt_Service_Init(void) { Interrupt_Init(GPIOB, GPIO_PIN_0, 1, 3); Interrupt_Init(GPIOB, GPIO_PIN_1, 1, 3); } // 中断触发时会执行这两个函数 void Interrupt_0(void) { OLED_NextPage(); // 这个OLED的驱动函数,你可以改成LED点灯来判断是否成功 } void Interrupt_1(void) { OLED_PrevPage(); }

HAL库实现串口中断

初始化引脚

/* by 01130.hk - online tools website : 01130.hk/zh/jsonzip.html */ __HAL_RCC_GPIOB_CLK_ENABLE() // 开启引脚使能 GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_0; // GPIOB 0引脚 GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; // 下降沿触发(按键按下为低) GPIO_InitStruct.Pull = GPIO_PULLUP; // 默认上拉,未按下时为高 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIO_PORT, &GPIO_InitStruct); // 配置中断优先级并使能 // EXTI0_IRQn 表示0通道,当A0,B0,C0...触发中断后会激活这个通道 HAL_NVIC_SetPriority(EXTI0_IRQn, 3, 0); HAL_NVIC_EnableIRQ(EXTI0_IRQn);

中断触发函数

  1. EXTI0_IRQHandler实现
// 当A0,B0,C0...触发中断后会进入这个函数 void EXTI0_IRQHandler(void) { HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0); // 内部自动处理有关中断的寄存器标志位 }
  1. HAL_GPIO_EXTI_IRQHandler解析

这个函数是HAL库自带的,用于自带处理中断标志位,这样用户就可以不用操作寄存器,而是实现具体中断业务代码

因为这个函数是用来处理所有组的所有引脚的中断,所有需要判断引脚

/** * @brief This function handles EXTI interrupt request. * @param GPIO_Pin: Specifies the pins connected EXTI line * @retval None */void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin) { /* EXTI line interrupt detected */ if (__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != 0x00u) { __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin); HAL_GPIO_EXTI_Callback(GPIO_Pin); } }

可以看到当产生中断是会执行HAL_GPIO_EXTI_Callback函数,所以用户只需要重写这个函数即可

  1. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if(GPIO_Pin == GPIO_PIN_0) { // 这里写你的中断处理代码 // 示例:翻转LED HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); // 示例:发送消息 // UART_SendString("EXTI0 Triggered!\r\n"); } }

结语

如果觉得有帮助到你,就请给仓库一个 star 吧!

git仓库: Guardian-Elf/Guardian-Elf-Embedded

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/3 2:14:40

Open-AutoGLM在外卖场景的落地实践(商家出餐提醒效率提升90%)

第一章:Open-AutoGLM 外卖商家出餐提醒在现代外卖平台运营中,及时的出餐提醒机制对提升配送效率和用户体验至关重要。Open-AutoGLM 是一个基于大语言模型自动决策的开源框架,能够根据订单状态、厨房负载和历史出餐时间智能判断最佳提醒时机&a…

作者头像 李华
网站建设 2026/4/2 5:25:17

为什么99%的外卖平台都在布局Open-AutoGLM轨迹跟踪技术?

第一章:Open-AutoGLM外卖配送轨迹跟踪技术的兴起背景随着城市化进程加速与即时消费习惯的普及,外卖行业对配送效率和透明度提出了更高要求。传统基于GPS点位上报的轨迹跟踪方式存在数据延迟、定位漂移等问题,难以满足高并发、高精度的实时追踪…

作者头像 李华
网站建设 2026/4/1 11:15:52

LangFlow镜像摘要生成器:一键压缩万字文章为百字精华

LangFlow镜像摘要生成器:一键压缩万字文章为百字精华 在智能应用开发日益加速的今天,一个常见的困境摆在团队面前:如何让非技术背景的产品经理、业务分析师甚至客户也能参与到AI系统的构建中?当一份长达数万字的行业报告需要快速提…

作者头像 李华
网站建设 2026/4/2 13:11:45

算子代数在机器学习中的应用与推广:深度学习笔记

摘要 随着深度学习模型日趋复杂及其对理论支撑的迫切需求,源于泛函分析的算子代数正逐渐成为理解与推进机器学习算法的重要工具。本笔记系统探讨算子代数在机器学习中的理论基础、核心应用、算法实现及未来方向。通过分析其在表示学习、优化理论与泛化分析等领域的具…

作者头像 李华
网站建设 2026/3/28 23:29:39

【AI+物流新范式】:Open-AutoGLM驱动下的外卖轨迹跟踪5步落地法

第一章:Open-AutoGLM驱动下的外卖轨迹跟踪新范式在智能物流与即时配送快速发展的背景下,外卖订单的实时轨迹跟踪已成为提升用户体验的核心环节。传统基于规则和固定模型的轨迹预测方法难以应对城市交通动态性与骑手行为多样性带来的挑战。Open-AutoGLM作…

作者头像 李华