啥是中断?中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。
举个例子:
类比一下
在实际的代码中,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
+关注
关注
2305文章
11123浏览量
371208 -
程序
+关注
关注
117文章
3836浏览量
84767 -
机器
+关注
关注
0文章
796浏览量
41775
发布评论请先 登录
相关推荐
热点推荐
请问RT-Thread与stm32cubemx联合开发的原理是什么?
在使用RT-Thread与stm32cubemx联合开发的原理是什么,cubemx在其中主要起到了哪些功能呢?
发表于 10-11 15:49
意法半导体:STM32CubeMX将不再集成到STM32CubeIDE中
从2025年11月发布的版本开始,我们将仅以 独立 版本的形式提供 STM32CubeIDE 和 STM32CubeMX 。 STM32CubeMX将不再集成到STM32CubeIDE
请问使用CubeMX选择芯片生成项目时如何选择外部晶振?
我从网上购入了STM32F103C8T6的核心板,板上有外部晶振。但我使用STM32CubeMX生成项目时,却无法选择外部晶振(如下图)。请问要在哪里设置才能选择
发表于 04-22 09:17
STM32开发入门进阶必备!《STM32嵌入式系统开发—基于STM32CubeMX和HAL库》新书发布!
近日,由华清远见教育科技集团精心编撰的教育部高等学校电子信息类专业教学指导委员会规划教材、普通高等教育电子信息类专业系列教材——《STM32嵌入式系统开发—基于STM32CubeMX和HAL库》重磅
STM32CubeMX无法打开.ioc文件怎么解决?
我的STM32CubeMX不能打开别人的工程文件,双击打开.ioc文件后会全白,只剩左上角有个home,什么也点不了,但是我自己可以创建工程,也可以打开我自己创建的工程。请问我该如何解决
发表于 03-12 07:39
STM32CubeMX生成的FreeRTOS源码格式如何优化?
如图,STM32CubeMX生成的FreeRTOS源码格式有待优化,空格都是以箭头的方式呈现,观感很差。FreeRTOS官方下载的源码则不存在这个问题,说明是STM32CubeMX生成源码的过程出现的格式问题,希望ST官方能对此做下优化!
发表于 03-10 08:04
使用STM32CubeMX生成CMake工程中的FLASH.ld被更改怎么解决?
使用STM32CubeMX生成CMake工程之后,对STM32xxxx_FLASH.ld进行了修改。然后再次使用STM32CubeMX对工程进行修改的时候,STM32xxxx_FLAS
发表于 03-10 06:52
STM32CubeMX生成STM32mp135D的USART1,2,3,6代码初始化是空的,为什么?
用STM32CubeMX生成STM32mp135D的USART1,2,3,6代码初始化是空的,参考其他代码做了初始化操作,可以通过HAL_USART_Transmit接口发送数据,但是调用
发表于 03-07 07:48
STM32CubeMX用于STM32配置和初始化C代码生成
电子发烧友网站提供《STM32CubeMX用于STM32配置和初始化C代码生成.pdf》资料免费下载
发表于 02-26 17:32
•678次下载
工程师开发利器:STM32CubeMX 与 eDesignSuite 的协同开发
工程师开发利器推介:STM32CubeMX 与 eDesignSuite 的协同开发STM32CubeMX 和 eDesignSuite 的综合说明及其协同开发场景的分析:一、STM32CubeMX
使用stm32cubeMX无法生成mdk工程文件?
几年前使用过cubemx,可以生成keil的工程文件。最近有个工程使用cubemx创建,结果只能生成stm32cubemx类型的文件,无法生成mdk的工程文件。
请教如何解决。
(我之前使用过多次
发表于 01-04 20:03
STM32CubeMX的菜单介绍
相信初学者打开STM32CubeMX一定是一脸懵逼,里面都是全英文的,不知道从何入手。这里先给大家简单讲解一下。在新建工程这一栏里,我们最常用的是第一个,它会弹出一个芯片列表供你选择,然后就会创建一

STM32CubeMX的外部中断的使用










评论