啥是中断?中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。
举个例子:
类比一下
在实际的代码中,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
+关注
关注
2312文章
11189浏览量
374534 -
程序
+关注
关注
117文章
3847浏览量
85453 -
机器
+关注
关注
0文章
799浏览量
41932
发布评论请先 登录
相关推荐
热点推荐
如何在 STM32Cube CMake 工程中添加源文件
STM32CubeMX 能够很方便的导出 CMake 工程。例如,如下图所示在 STM32CubeMX的 ToolChain/IDE 中选择 Cmake。CMake 工程可以很容易被
发表于 04-15 16:07
•0次下载
LAT1574_如何在 STM32Cube CMake 工程中添加源文件
STM32CubeMX 能够很方便的导出 CMake 工程。例如,如下图所示在 STM32CubeMX的 ToolChain/IDE 中选择 CmakeCMake 工程可以很容易被
发表于 03-11 10:46
•0次下载
请问RT-Thread与stm32cubemx联合开发的原理是什么?
在使用RT-Thread与stm32cubemx联合开发的原理是什么,cubemx在其中主要起到了哪些功能呢?
发表于 10-11 15:49
意法半导体:STM32CubeMX将不再集成到STM32CubeIDE中
从2025年11月发布的版本开始,我们将仅以 独立 版本的形式提供 STM32CubeIDE 和 STM32CubeMX 。 STM32CubeMX将不再集成到STM32CubeIDE
使用STM32CubeMX的时候创建的工程已经使用的板载资源如何去掉?
在使用STM32CubeMX的时候创建的工程已经使用的板载资源如何去掉?在基于开发板进行工程创建的时候会把板载资源直接初始化,后面想要用不同的功能配置,如何把初始配置去掉?
发表于 07-22 07:13
对于在STM32CubeMx使用FMC中的NAND FLASH里面配置这些时间有什么说明吗?
对于在STM32CubeMx使用FMC中的NAND FLASH里面配置这些时间有什么说明吗?
发表于 07-21 07:07
STM32L433VCT6进入STOP模式2之后,功耗依然和正常运行模式没有差别,为什么?
STM32CubeMX上配置power savinf mode
2、系统电源供电时LDO
结果:
1、运行是10mA,进入STOP模式时是9.9mA;
2、挂仿真,没有任何唤醒的中断产生,应该是进入STOP模式了。
请教坛子的大佬们,有什么办法可以优化或者改进功耗吗?
发表于 07-21 06:42
STM32MP135D的TIM2使用ETR作为外部时钟时,无法使用PE15作为输入,是哪里的问题?
主芯片为STM32MP135D,使用最新的STM32CubeMX配置TIM2为外部时钟模式2,管脚选择PE15
实测计数器不会增加,当改用PA15时是正常的;参考最新手册看明显有问题,各位能否帮忙验证一下,是否我的程序问题,还是
发表于 06-10 07:40
STM32MP135D的TIM2使用ETR作为外部时钟时,无法使用PE15作为输入怎么解决?
主芯片为STM32MP135D,使用最新的STM32CubeMX配置TIM2为外部时钟模式2,管脚选择PE15
实测计数器不会增加,当改用PA15时是正常的;参考最新手册看明显有问题,各位能否帮忙验证一下,是否我的程序问题,还是
发表于 06-09 07:06
STM32F103C8T6无法选择外部晶振怎么解决?
我从网上购入了STM32F103C8T6的核心板,板上有外部晶振。但我使用STM32CubeMX生成项目时,却无法选择外部晶振(如下图)。请问要在哪里设置才能选择
发表于 04-28 07:03
STM32MP135D的TIM2使用ETR作为外部时钟时,无法使用PE15作为输入怎么解决?
主芯片为STM32MP135D,使用最新的STM32CubeMX配置TIM2为外部时钟模式2,管脚选择PE15
实测计数器不会增加,当改用PA15时是正常的;参考最新手册看明显有问题,各位能否帮忙验证一下,是否我的程序问题,还是
发表于 04-27 09:05
使用STM32CubeMX进行配置USB的时候,有哪些小的需要注意的细节?
在使用STM32CubeMX进行配置USB的时候,是参照例程进行的配置,自己配置的就是没有成功,例程就灭有问题,总感觉哪里没有打开?有人遇到过需要注意的小细节吗?
发表于 04-23 06:54
请问使用CubeMX选择芯片生成项目时如何选择外部晶振?
我从网上购入了STM32F103C8T6的核心板,板上有外部晶振。但我使用STM32CubeMX生成项目时,却无法选择外部晶振(如下图)。请问要在哪里设置才能选择
发表于 04-22 09:17
STM32CubeMX的外部中断的使用










评论