1. 从零开始:理解STM32外部中断的“灵魂”
如果你刚开始玩STM32,可能会觉得中断这个概念有点玄乎。我刚开始接触的时候也是,总觉得它神出鬼没,代码执行得好好的,突然就跳走了。后来在项目里被按键响应慢、传感器数据丢失这些问题折磨了几次之后,我才彻底搞明白,用好外部中断,你的单片机项目才算真正“活”了起来。
简单来说,外部中断就是给单片机的一个“紧急呼叫按钮”。想象一下,你正在专心看书(单片机在执行主循环代码),这时有人敲门(外部引脚电平变化)。你有两种选择:一是每看几页书就抬头问一句“有人吗?”(这就是轮询,效率低且傻);二是在门上装个门铃,一按你就知道有人来了,立刻放下书去开门(这就是中断,高效且及时)。STM32的外部中断就是这个“门铃系统”,它能让CPU立刻放下手头的工作,去处理更紧急的事件,处理完了再回来接着干原来的活。
这个“门铃系统”由三大部分精密配合:GPIO引脚、EXTI(外部中断/事件控制器)和NVIC(嵌套向量中断控制器)。GPIO是“门铃按钮”本身,负责感知电平变化;EXTI是“门铃线路”,负责把按钮按下的信号收集并传递出去;而NVIC则是家里的“管家”,它决定哪个门铃最紧急(优先级),并准确通知你(CPU)该去处理哪个事件。STM32CubeMX这个图形化工具,就是帮你把这套复杂的“门铃系统”的布线图(配置)一键生成,让你不用去啃那些令人头疼的寄存器手册。我们今天的任务,就是手把手教你用CubeMX画好这张图,并写出正确的“开门”动作(回调函数)。
2. CubeMX工程创建与芯片选择:第一步别踩坑
万事开头难,但第一步走稳了,后面就顺了。打开STM32CubeMX,点击“File”->“New Project”,会进入芯片选择器。这里有个新手容易迷糊的点:STM32的型号太多了,F1、F4、G0、H7…系列不同,外设和性能差异很大。对于学习外部中断,我强烈推荐从STM32F1系列开始,比如经典的STM32F103C8T6(也就是常说的“蓝莓派”或最小系统板用的那颗芯片)。原因很简单,资料最全,社区资源最多,出了问题随便一搜就能找到答案。你用它学通了,再换到其他系列,基本是触类旁通。
在搜索框输入“F103C8”,在结果里选中“STM32F103C8Tx”。这里要留意一下封装,我们常用的就是LQFP48这个封装。选中后,右上角会显示芯片的基本资源,比如Flash有64KB,RAM有20KB,对你第一个中断项目来说绰绰有余。确认无误后,点击“Start Project”。
接着,你会看到一个空白的芯片引脚图界面。先别急着配置中断,有几项基础配置必须优先完成,这就像盖房子要先打地基。
首先配置时钟源(RCC)。在左侧“System Core”里找到“RCC”。高速外部时钟(HSE)选择“Crystal/Ceramic Resonator”。这一步是告诉单片机,我们要用外部那个8MHz的晶振作为时钟源头,而不是用内部精度稍差的RC振荡器。稳定的时钟是所有外设(包括中断)准确工作的基础。
然后配置调试接口(SYS)。同样在“System Core”里,找到“SYS”。在“Debug”一栏,选择“Serial Wire”。这非常重要!如果你选了“No Debug”,或者忘记配置,那么烧录程序后,你将无法通过ST-Link等调试器进行在线调试和下载,只能烧录一次,下次再想烧录就得用串口ISP模式了,非常麻烦。我早期就吃过这个亏,焊好的板子死活连不上调试器,最后发现是这里没配。
做完这两步,我们的“地基”就打牢了,可以开始搭建“外部中断”这面墙了。
3. 图形化配置EXTI:细节决定成败
现在来到核心环节。假设我们想用PC13引脚(很多开发板把这个引脚接成了用户按键)来触发中断。在芯片引脚图的右侧,找到“PC13”,用鼠标点击它。会弹出一个功能选择菜单,里面有很多选项,比如GPIO_Input、GPIO_Output、ADC等等。我们需要将其设置为外部中断模式,对于这个引脚,你应该选择“GPIO_EXTI13”。选择之后,你会发现PC13引脚的颜色变了(通常变成绿色),并且左侧的“Pinout & Configuration”选项卡里,“System Core”->“GPIO”部分会自动增加PC13的配置项。
点击这个新出现的PC13配置项,右侧会弹出详细的GPIO参数设置。这里有几个关键选项,每一个选错都可能导致中断不触发或者乱触发。
第一个是GPIO模式(GPIO mode)。这里不是选输入输出,而是选择中断的触发边沿。有三个选项:
- External Interrupt Mode with Rising edge trigger detection:上升沿触发。只有当引脚电平从低(0)跳变到

2614

被折叠的 条评论
为什么被折叠?



