啥是中断?中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。
举个例子:
类比一下
在实际的代码中,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())
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网
网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
STM32
+关注
关注
2270文章
10895浏览量
355722 -
程序
+关注
关注
117文章
3785浏览量
81001 -
机器
+关注
关注
0文章
780浏览量
40711
发布评论请先 登录
相关推荐
STM32CUBEMX(11)--外部中断(EXTI)
首先需要准备一个开发板,这里我准备的是NUCLEO-F030R8的开发板:
选择芯片型号
使用STM32CUBEMX选择芯片stm32f030r8,如下所示:
配置时钟源
HSE与LSE分别为外部
发表于 09-10 15:44
如何利用STM32CubeMX生成的keil项目如何关闭全局中断?
利用STM32CubeMX生成的keil项目如何关闭全局中断?中断相关的函数在哪个头文件里?
如何关闭系统滴答定时器中断
发表于 05-16 07:52
使用STM32cubemx的外部中断只能触发一次的原因?
配置截图在下边,还有外部输入的三路PWM方波的截图。 我们的需求是三个GPIO做外部中断,接三路PWM方波输入,方波周期为60ms,高电平20ms低电平40ms。
现在的问题是,GPIO的管脚只有
发表于 05-07 08:18
stm32CubeMX怎么添加中断以及相应的代码或者.c和.h文件?
我想咨询一下,用stm32CubeMX生成的工程里边 怎么添加中断以及相应的代码或者.c和.h文件。我跑的是freertos系统,能不能在stm32CubeMX里边直接添加啊。
发表于 04-29 08:17
用stm32cubemx开发stm32L052,对LPUART设置的时候,为什么没有能够设置通信中断的地方?
各位大神请教下,小弟用stm32cubemx开发L052,库使用的是L0 v1.11.2 发现在对LPUART设置的时候,没有能够设置通信中断的地方(USART可以设置),我以前的老工程用cube打开是可以设置的,请教下是升级后更改了使用方法了吗?
发表于 04-19 06:10
用stm32cubemx的串口中断接收时,过一段时间串口中断不进了怎么解决?
我用stm32cubemx建的工程本来跑的挺好的,最近发现有bug。 我用uart1 在TIM3里边 1s定时发送数据,采用问答式通讯,对端收到了之后发送8个字节的应答。问题是跑了几十分钟之后或者一
发表于 04-17 06:48
请问STM8CubeMX是否可以生成代码?
STM32CubeMX可以配置外部中断,但是在STM8CubeMX中没有找到相关配置的地方。
1. 请问STM8CubeMX是否可以生成代码
发表于 04-12 06:07
STM32cubemx的库和KEIL的库有什么不同?
STM32cubemx软件有对应各个系列芯片的库.
使用cubemx,生成代码框架,比如生成MDK的代码框架。但MDK也有自己的PACK。那么MDK的PACK和CUBEMX的库有什么区别,两者时什么关系呢?
发表于 04-11 06:02
STM32CubeMX生成代码软件卡死的原因?怎么解决?
STM32CubeMX 生成代码 软件卡死!在生成代吗时,一直卡死在如图所示的状态,进度条一直就不走了。试过多次,一直如此。请问如何解决该问题,原因可能是什么?STM32CubeMX版本5.1.0
发表于 04-10 06:03
STM32CubeMX安装最新版本V6.9,Motor Control Workbench生成项目工程总是显示STM32CubeMX not found的原因?
STM32CubeMX安装最新版本V6.9,但Motor Control Workbench生成项目工程,总是显示STM32CubeMX not found?
发表于 03-14 07:28
如何使用STM32CubeMx配置STM32MP135的LTDC外设?
请问一下,如何使用STM32CubeMx配置STM32MP135的LTDC外设,打开后LTDC配置项是空的
发表于 03-11 07:37
使用STM32CubeMX初始化STM32F103程序代码默认打开了哪些中断?是否可以暂时性关闭?
使用STM32CubeMX初始化STM32F103程序代码,在不使用任何外设中断的情况下,系统会默认打开哪些中断?这些中断又可以怎样暂时性关
发表于 03-11 07:22
评论