STM32回调函数使用/定时器/GPIO/串口/ - 教程

news/2025/11/30 11:34:52/文章来源:https://www.cnblogs.com/tlnshuju/p/19288831

STM32回调函数使用/定时器/GPIO/串口/ - 教程

2025-11-30 11:31  tlnshuju  阅读(0)  评论(0)    收藏  举报

回调函数

        回调函数是 HAL 库等框架中,由用户实现、但在特定事件(如定时器周期到达、GPIO 触发)发生时由框架自动调用的函数。

        作用是 “分离通用底层逻辑与用户业务逻辑”—— 比如定时器中断中,HAL 库自动完成标志位判断、清除等通用操作,用户只需在回调函数里写 LED 翻转、数据读取这类具体需求,不用关心底层细节。

        简单说,回调函数就像给框架留的 “接口”:你提前写好要做的事(比如 LED 翻转),告诉框架 “当某个事件发生时,就调用我写的这个函数”,后续事件触发后,框架会自动执行你预留的逻辑,大大简化了代码编写和底层操作的复杂度。

定时器——标准库

定时器初始化完成后记得在主函数中完成初始化!!!

        标准库要求用户直接编写完整的中断服务函数(例如 TIM2_IRQHandler),所有逻辑(包括标志位判断、清除、业务处理)都需要在这个函数中手动实现,没有 “回调函数” 的概念。

例如,标准库实现 TIM2 定时中断的结构是:

// 标准库:中断服务函数需用户完全手动编写
void TIM2_IRQHandler(void)
{// 1. 判断中断标志if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET){// 2. 清除中断标志TIM_ClearITPendingBit(TIM2, TIM_IT_Update);// 3. 业务逻辑(如LED翻转)GPIO_TogglePin(GPIOE, GPIO_Pin_15);}
}

如何判断是否产生了中断重叠现象?

就是刚进中断就清除标志位,中断退出之前,再检查一下标志位,如果又置1了,说明中断重叠。

如何得知定时中断执行的时长?

只需要在函数退出之前,读取一下计数器

​​​

定时器——HAL库

HAL 库的回调函数机制

        HAL 库通过 “底层中断服务函数 + 上层回调函数” 的分层设计,

        将通用逻辑(标志判断、清除)封装在 HAL 库内部(如 HAL_TIM_IRQHandler),

        用户只需实现回调函数(如 HAL_TIM_PeriodElapsedCallback)来处理业务逻辑,无需关心底层细节。

        在HAL 库环境下,不需要也不建议使用 TIM_GetITStatus(TIM2, TIM_IT_Update) == SET 来判断中断;

      HAL 库的 HAL_TIM_IRQHandler 函数会自动完成所有已使能的定时器中断标志位的判断与清除,用户在回调函数(如 HAL_TIM_PeriodElapsedCallback)中无需再处理标志位,只需专注于业务逻辑(如 LED 翻转、数据读取等)即可。

记得开启中断,初始化阶段完成

//手动开启TIM2定时器中断(关键步骤)
HAL_TIM_Base_Start_IT(&htim2);
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if (htim == (&htim2)){ID++;}
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if (htim->Instance == TIM2){ID++;}
}

1. htim->Instance == TIM2

  • htim 是 TIM_HandleTypeDef 类型的指针,它的 Instance 成员直接指向定时器的硬件寄存器基地址(例如 TIM2 对应的寄存器基地址是 TIM2 这个宏定义)。
  • 这种写法是通过寄存器基地址来判断定时器实例,是 HAL 库中更 “底层” 且通用的判断方式,适用于所有定时器外设。

2. htim == &htim2

  • htim2 是用户在初始化时定义的 TIM_HandleTypeDef 类型的结构体变量(例如 TIM_HandleTypeDef htim2;)。
  • 这种写法是通过比较结构体变量的地址来判断,要求用户在代码中明确定义了对应的 htim2 变量,且该变量是 TIM2 的配置句柄。

区别与选择建议

对比项htim->Instance == TIM2htim == &htim2
依赖条件仅依赖定时器的寄存器基地址(由芯片定义)依赖用户定义的 TIM_HandleTypeDef 变量(如 htim2
通用性更高(适用于所有定时器,无需关心变量名)较低(需确保变量名与定时器实例一一对应)
代码可读性直接体现 “判断定时器硬件实例” 的意图需结合变量定义才能明确对应关系

GPIO的中断回调——HAL库

触发条件

对比项External Interrupt Mode(中断模式)External Event Mode(事件模式)
CPU 参与度需要 CPU 响应中断,执行回调函数无 CPU 参与,纯硬件联动外设
延迟性存在中断响应延迟(微秒级)硬件级触发,延迟极低(纳秒级)
应用场景需要 CPU 处理逻辑(如状态判断、数据解析)仅需硬件联动外设(如定时器启动、DMA 触发)

        在 CubeMX 完成配置后,无需在函数中手动初始化中断的底层硬件逻辑(如 EXTI 寄存器、NVIC 优先级等),这些都由 CubeMX 生成的代码自动完成。你只需关注使能中断和实现回调函数这两个关键步骤,具体如下:

使能外部中断(CubeMX 生成代码已包含,无需手动写

CubeMX 生成的MX_GPIO_Init()函数会自动初始化 A1 引脚的中断配置,包括:

  • 配置 GPIO 为外部中断模式(上升沿 / 下降沿触发)前提记得先上下拉
  • NVIC中配置 EXTI 控制器的中断线映射;
  • 配置 NVIC 的中断使能和优先级(即你在 CubeMX NVIC 界面中设置的参数)。

实现中断回调函数(需要用户手动写)

在用户代码中重写HAL_GPIO_EXTI_Callback函数,处理 A1 引脚中断触发后的逻辑:

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{if (GPIO_Pin == GPIO_PIN_1)  // 判断是A1引脚触发的中断{// 在这里编写中断触发后的业务逻辑,例如:// 读取引脚电平、控制LED、执行特定任务等HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_15);  // 示例:翻转PE15的LED}
}

串口——HAL库

配置

找定义,进去后一直往下翻,找串口接受的回调函数

串口接收的中断回调函数实现:

回调函数

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if (huart->Instance == USART1) // ???????????? USART1{/*    任务!!    */HAL_UART_Receive_IT(&huart1, (uint8_t*)rx_data, sizeof(rx_data)); // ???? UART ????}
}

记得重新开启接收中断:HAL_UART_Receive_IT(...)

        由于 HAL 库的串口中断接收是 “一次性” 的(每次接收完成后会自动关闭中断),必须在回调函数末尾重新调用该函数,才能保证后续数据能继续触发接收中断,实现持续接收。

初始化:

记得在主函数住启用串口中断,如下

// 在main函数初始化后调用,启动USART1的中断接收(接收1字节到rx_data缓冲区)
HAL_UART_Receive_IT(&huart1, (uint8_t*)rx_data, 1);

使能串口接收中断,当接收到指定长度(如 1 字节)数据后,自动触发 HAL_UART_RxCpltCallback 回调函数。

串口发送的中断

        发送的函数也可以配合接收的一些函数去使用,但是注意理清楚状态

  HAL_UART_TxCpltCallback 是串口发送完成后的通知机制。当 HAL_UART_Transmit_IT 启动的异步发送过程全部完成(所有字节发送完毕),HAL 库会自动调用该回调函数,用于:

        告知用户 “数据已发送完成”(例如设置发送完成标志位 tx_done = 1);

        触发后续操作(例如发送下一包数据、释放缓冲区、更新状态指示灯等)。

// 1. 启动异步发送
HAL_UART_Transmit_IT(&huart1, (uint8_t*)tx_data, len);  // 启动发送,立即返回
// 2. 发送过程由硬件中断自动完成(无需CPU干预)
// 3. 发送完成后,HAL库自动调用回调函数
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{if (huart->Instance == USART1)  // 确认是USART1的发送完成{// 例如:标记发送完成,用于主循环判断tx_complete_flag = 1;// 例如:继续发送下一包数据// HAL_UART_Transmit_IT(&huart1, next_tx_data, next_len);}
}

如果仅需 “发送数据” 而无需关心 “是否发送完成”(例如简单的调试信息发送),可以不实现回调函数,HAL_UART_Transmit_IT 仍能正常发送数据。但在多数场景下(如连续发送多包数据、需要确保数据发送成功后再执行下一步),必须通过回调函数获取发送完成的通知,否则无法判断发送状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/981747.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年质量好的高精度印染配件圆网闷头厂家推荐及选择指南

2025年质量好的高精度印染配件圆网闷头厂家推荐及选择指南行业背景与市场趋势随着全球纺织印染行业的持续发展,高精度印染配件市场需求呈现稳定增长态势。作为印染机械中的关键部件,圆网闷头的质量直接影响印染工艺的…

2025年广东机械设备源头厂家排行榜,10大精选企业推荐

为助力制造企业高效锁定适配工业智能升级需求的机械设备合作伙伴,避免选型走弯路,我们从技术硬核度(如核心算法自主化、精度稳定性)、产品适配性(多场景柔性生产能力)、全周期服务质量(售后响应时效、定制化方案…

对DRY原则的理解

阅读《程序员修炼之道》中关于DRY(不要重复自己)原则的章节,我意识到这个原则的核心在于"每一处知识都必须在系统中有单一、明确、权威的表述"。这不仅仅是表面上的代码重复问题,更重要的是对系统中各种…

2025年质量好的气动阀门热门厂家推荐榜单

2025年质量好的气动阀门热门厂家推荐榜单行业背景与市场趋势随着工业自动化水平的不断提升,气动阀门作为流体控制系统的关键部件,在石油化工、电力、冶金、制药等领域的应用日益广泛。2025年,全球气动阀门市场规模预…

2025年知名的生产线厂家最新权威推荐排行榜

2025年知名的生产线厂家权威推荐排行榜行业背景与市场趋势随着全球制造业的数字化转型加速推进,生产线设备行业正经历着前所未有的变革。2025年,智能化、自动化、柔性化已成为生产线设备的核心竞争力指标。特别是在食…

应用层自定义协议与序列化 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025自粘壁纸靠谱厂家TOP5权威推荐:甄选制造商助力家居

家居装饰市场中,自粘壁纸因便捷性与灵活性成为消费新宠。2024年数据显示,其市场规模超120亿元,年增速38%,但28%的投诉集中在粘性不足、环保不达标、图案脱落三大问题。普通消费者常遇坑:低价产品贴完3个月卷边,含…

2025年靠谱的工艺品木盒厂家推荐及采购指南

2025年靠谱的工艺品木盒厂家推荐及采购指南行业背景与市场趋势随着消费升级和环保意识的增强,工艺品木盒市场近年来呈现出稳定增长态势。2024年数据显示,全球木质包装市场规模已突破500亿美元,其中工艺品木盒作为高…

11110

将MyBatis与Spring框架进行了整合,简化了配置管理。

2025年靠谱的半导体网版/印刷网版厂家推荐及选择参考

2025年靠谱的半导体网版/印刷网版厂家推荐及选择参考行业背景与市场趋势随着半导体产业和精密电子制造业的快速发展,半导体网版和印刷网版作为关键生产耗材,市场需求持续增长。据行业分析数据显示,2023年全球半导体…

2025年靠谱的定型机配件剥边器/定型机配件导轨厂家推荐及选购指南

2025年靠谱的定型机配件剥边器/定型机配件导轨厂家推荐及选购指南行业背景与市场趋势随着全球纺织印染行业的持续发展,定型机作为印染后整理的关键设备,其配件市场需求稳步增长。剥边器和导轨作为定型机核心部件,直…

详细介绍:零基础入门C语言之数据在内存中的存储

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年知名的金属拉伸件/简形拉伸件厂家最新权威推荐排行榜

2025年知名的金属拉伸件/简形拉伸件厂家权威推荐排行榜行业背景与市场趋势金属拉伸件作为现代工业制造中不可或缺的基础零部件,广泛应用于汽车制造、电子设备、家用电器、工业设备等多个领域。随着全球制造业的持续升…

2025年质量好的磷酸铁锂干燥机用户口碑最好的厂家榜

2025年质量好的磷酸铁锂干燥机用户口碑的厂家榜行业背景与市场趋势随着全球新能源产业的蓬勃发展,磷酸铁锂电池作为动力电池和储能电池的主流技术路线之一,市场需求持续增长。作为磷酸铁锂正极材料生产过程中的关键设…

11101

理解了MyBatis的一级缓存与二级缓存机制。

11100

配置了MyBatis的日志,便于观察和执行的实际SQL。

2025年评价高的冰雕雪雕/冰雕厂家最新TOP实力排行

2025年评价高的冰雕雪雕/冰雕厂家TOP实力排行行业背景与市场趋势随着冬季旅游经济的蓬勃发展和冰雪文化的全球推广,冰雕雪雕艺术产业迎来了前所未有的发展机遇。2024-2025年冬季,中国北方各大冰雪节庆活动预计将吸引…

10100

封装了一个简易的DbUtils类,减少了冗余代码。

10011

集成了高性能的HikariCP连接池,提升了数据库访问效率。

2025年工业冷风机性价比排行榜出炉,铸造车间通风降温/钢结构车间夏季降温/大型钢结构车间降温/陶瓷车间降温工业冷风机机构排行榜单

行业背景与评选标准 随着全球制造业持续复苏与节能减排政策深入推进,工业冷风机市场迎来新一轮增长周期。据行业数据显示,2024年中国工业冷风机市场规模已达285亿元,同比增长12.7%。本次评选基于企业技术实力、产品…