啥是中断?中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。
举个例子:
类比一下
在实际的代码中,HAL库的中断处理较为复杂:startup_stm32f103xb.s通过汇编注册了中断处理函数EXTI1_IRQHandler(),在stm32f1xx_it.c中,EXTI_IRQHandler()引用了HAL库的处理函数HAL_GPIO_EXTI_IRQHandler(),其功能主要为判断具体的中断原因,并调用对应的中断回调函数:HAL_GPIO_EXTI_Callback()。用户可以自己重声明中断回调函数(HAL_GPIO_EXTI_Callback()),在其中写入自己的用户逻辑,不出意外的话,你这时候可能会有点懵。上图!
中断处理函数写在EXTI_IRQHandler()或HAL_GPIO_EXTI_Callback()皆可,不过HAL_GPIO_EXTI_Callback()需要重新声明,比如:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){ if(HAL_GetTick()-t>30) { if(GPIO_Pin == GPIO_PIN_1) { duty_cycle=duty_cycle+100; __HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_4,duty_cycle); } if(GPIO_Pin == GPIO_PIN_2) { duty_cycle=duty_cycle-100; __HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_4,duty_cycle); } } t=HAL_GetTick();}
对于代码的意思不必理会,只需知道这些是自己按需求写的,下面开始连接硬件:
以下是实操工程:
1,配置引脚
2,使能外部中断
3,点击右上角GENERATE CODE生成代码
Hal_GPIO_TogglePin()这个函数可以反转引脚电平,以控制小灯亮灭,多加的那几行代码用来做一个简单的消抖,然后编译,下载。如果没出问题的话,每按一次按键,灯都会改变一次亮灭状态,上面用的是xxxit.c中的Handler函数,下面试一试Callback函数,注释掉刚才加的代码,在main.c中添加如下代码:
编译,下载,运行,效果应该跟刚才一样,下面试一下TIM。
搞完后,小灯应该每秒闪烁5次。注意:
中断里不要使用延时函数Hal_Delay()
TIM中断要手动开启(Hal_TIM_Base_Start_IT())
上一篇:浅析STM32单片机的启动文件
下一篇:stm32必须要移植系统吗
推荐阅读最新更新时间:2026-03-12 12:47
- STEVAL-ILL035V1,使用带有集成升压控制器的 LED7708 多通道 LED 背光驱动器的演示板
- ST2S06B 双路同步整流带复位或抑制、0.5 A、1.5 MHz 可调降压开关稳压器的典型应用电路
- LT3957EUHE、5V 至 16V 输入、-12V 输出反相转换器的典型应用电路
- LT3475IFE-1 演示板、双路降压型 1.5A LED 驱动器
- 使用 NXP Semiconductors 的 BFU730F 的参考设计
- AD5347 并行接口、八路电压输出、10 位 DAC 的典型应用
- 使用 TC7662B 负电荷泵转换器的典型应用电路
- AKD4358,用于 AK4358 192kHz PCM 数据、用于 DVD 音频和 SACD 应用的 DSD 数据的评估板
- 具有输出电池短路保护功能的 ADA4432-1 SD 视频滤波放大器的典型应用电路
- 使用 Analog Devices 的 ADA4062-2ARMZ-RL7 的参考设计











基于 X-Cube-FreeRTOS_Heap4 和 CubeMX 生成 UCPD 项目介绍
EWB电子线路仿真汉化版带源码
非常经典的关于LLC的杨波博士论文
XC6406PP60DL






京公网安备 11010802033920号