|
摘要 本文提供在STM32CubeMX2中配置IRQ中断请求的分步操作指南,介绍相关函数的存放位置。教程以NUCLEO-C562RE开发板作为示例。 简介 中断请求(Interrupt ReQuest,IRQ)处理函数用于在系统层面处理硬件中断请求。切换至全新HAL2框架后,中断服务函数以及弱回调函数的存放位置发生了改变。 本文对比新旧版本下,IRQ中断服务函数、弱回调函数的存放位置,同时讲解如何开启/关闭对应代码的生成。 前置准备 请确认已经安装如下软件:
本教程使用NUCLEO-C562RE开发板。 一、STM32CubeMX2工程创建与基础配置 按照下面步骤,为NUCLEO-C562RE创建应用工程。本实例实现简单的USART串口中断 + EXTI外部中断。 1.1 创建工程 打开STM32CubeMX2,在首页点击【MCU】方块按钮新建工程。
在MCU名称搜索框输入:STM32C562RE,选中芯片,点击【Continue】。
填写工程名称与存储路径,点击【Automatically Download,Install & Create Project】完成工程创建。
工程创建完成,点击【Launch Project】进入配置界面。
1.2 引脚与外设配置 在STM32CubeMX2,打开【Peripherals】→【Connectivity】,将USART模式选择为Async异步模式。
配置USART2外设参数:
NUCLEO板载VCOM虚拟串口桥,USART2_TX对应PA2、USART2_RX对应PA3。软件默认选中引脚可能不一致,需要往下滚动页面修改USART2的TX/RX GPIO引脚为PA2、PA3。
在右侧快捷菜单打开NVIC配置,开启USART中断。
PC13引脚连接板载用户按键。点击引脚配置图标,为该引脚配置EXTI外部中断。
全部配置完成后生成代码,使用Visual Studio Code打开工程。 **二、IRQ中断服务函数存放位置的改动 HAL2框架对中断服务函数做了模块化设计:每一个已启用外设的IRQ中断服务函数,放置到该外设专属文件中。这样提升代码模块化程度,也更方便配合代码预览功能分析代码逻辑。 下面对比新旧版本,示例包含两个中断:NUCLEO-C562RE按键对应的EXTI13外部中断,以及板载STLink虚拟串口对应的USART2中断。 HAL1版本:所有外设中断服务函数全部放在同一个文件,即stm32xyz_it.c。
HAL2新版本:中断服务函数分散存放,路径为generated/hal/,每个外设拥有独立源文件,回调函数默认也存放在对应外设文件。
**三、IRQ回调函数的存放位置 弱定义回调函数依旧存放在driver文件夹,文件夹命名改为stm32xyz_drivers/hal。每一个外设驱动文件内都包含该外设对应的回调,全部使用weak弱属性声明。 重大变化:在旧HAL版本,EXTI外部中断的弱回调函数位于stm32xyz_hal_gpio.c;HAL2中EXTI弱回调迁移到stm32xyz_hal_exti.c。逻辑原因:并不是所有EXTI外部中断线路都绑定GPIO引脚。
**四、如何生成自定义IRQ回调处理函数 想要在STM32CubeMX2生成自定义IRQ回调处理函数:切换至【Project settings】标签页;通过右侧Quick menu快捷菜单选择【Global services】;在Actions操作列,点击齿轮配置按钮。
在快捷菜单选中目标外设(本例为USART2、EXTI),打开Use register callback和User data。
保存配置、重新生成代码,就可以调用HAL2提供的API完成回调注册。 以EXTI外部中断为例,注册回调API:
EXTI示例代码: 💡HAL2新机制:不再依靠重写库内weak弱函数;调用HAL_XXX_RegisterXXXCallback,把用户自定义回调函数指针注册进去即可生效。
五、功能验证 进入调试模式,在创建的回调函数处设置断点。也可以查看调用栈。
六、总结 本文以NUCLEO-C562RE开发板为例,梳理STM32CubeMX2中IRQ中断配置的关键改动与完整操作流程。 迁移到HAL2框架后,中断服务函数按外设拆分到独立文件,代码模块化更强,可读性与可维护性大幅提升。掌握IRQ回调生成开关,理解回调函数新的存放路径,开发者就可以高效完成项目硬件中断的开发。 |
如何在STM32CubeMX2中使用EXTI
【STM32C5开发板评测】- 简易低功耗实验:芯片休眠、唤醒功能简单测试演示
《STM32CubeMX2 实战课程》学习笔记+初体验
STM32CubeMX2 学习分享: Parts 经验分享
STM32CubeMX2 学习分享:Middlewares & Utilities 小记
STM32CubeMX2 无法正常添加 CMSIS-DSP?基于 CMake 的手动集成与工程结构优化
STM32CubeMX2 学习分享:Peripherals 配置小记
【NUCLEO-C562RE】呼吸灯
《STM32CubeMX2 实战课程》学习笔记5+CubeMX2生成的Uart初始化代码中没有使能
STM32CubeMX2 学习分享:CubeMX2时钟树
微信公众号
手机版