啥是中断?中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。
举个例子:
类比一下
在实际的代码中,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必须要移植系统吗
推荐阅读最新更新时间:2024-11-09 10:22
设计资源 培训 开发板 精华推荐
- VFD时钟 HNV-12SS62
- SYB-130-Bread_Board_Connector
- 使用 Analog Devices 的 AD9831 的参考设计
- LTC3859AMPUHF 高效率、宽输入范围、双路 12V/3.3V 同步降压/升压转换器的典型应用电路
- 5G
- SC33063A 带外部 PNP 饱和开关的电压反相转换器的典型应用
- 【ART-Pi】ART-Pi GPIB物联网扩展板
- FAN65005A-GEVB:高性能 65V、8A 电压模式同步 PWM 降压稳压器评估板
- 使用 NXP Semiconductors 的 MC17XS6500EK 的参考设计
- 使用 TC7117A 模数转换器和 1.2 外部带隙基准(VIN - 连接到公共端)的典型应用