0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32CubeMX的外部中断的使用

撞上电子 2023-11-26 08:00 次阅读

啥是中断?中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。

举个例子:

类比一下

在实际的代码中,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
    +关注

    关注

    2265

    文章

    10870

    浏览量

    354682
  • 程序
    +关注

    关注

    116

    文章

    3773

    浏览量

    80830
  • 机器
    +关注

    关注

    0

    文章

    779

    浏览量

    40682
收藏 人收藏

    评论

    相关推荐

    STM32CUBEMX(11)--外部中断(EXTI)

    首先需要准备一个开发板,这里我准备的是NUCLEO-F030R8的开发板: 选择芯片型号 使用STM32CUBEMX选择芯片stm32f030r8,如下所示: 配置时钟源 HSE与LSE分别为外部
    发表于 09-10 15:44

    STM32CUBEMX界面重影严重的原因?怎么解决?

    STM32CUBEMX 界面重影严重,有相同问题的吗
    发表于 06-03 07:46

    如何利用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

    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 STM32WL不能配置LoRaWAN的原因?

    STM32CubeMX 中使用STM32WL配置LoRaWAN时不能配置,请问为什么?
    发表于 04-02 07:47

    STM32CubeMX安装最新版本V6.9,Motor Control Workbench生成项目工程总是显示STM32CubeMX not found的原因?

    STM32CubeMX安装最新版本V6.9,但Motor Control Workbench生成项目工程,总是显示STM32CubeMX not found?
    发表于 03-14 07:28

    STM32CUBEMX界面重影严重怎么解决?

    STM32CUBEMX 界面重影严重,有相同问题的吗
    发表于 03-14 07:13

    如何使用STM32CubeMx配置STM32MP135的LTDC外设?

    请问一下,如何使用STM32CubeMx配置STM32MP135的LTDC外设,打开后LTDC配置项是空的
    发表于 03-11 07:37

    使用STM32CubeMX初始化STM32F103程序代码默认打开了哪些中断?是否可以暂时性关闭?

    使用STM32CubeMX初始化STM32F103程序代码,在不使用任何外设中断的情况下,系统会默认打开哪些中断?这些中断又可以怎样暂时性关
    发表于 03-11 07:22

    基于STM32CUBEMX驱动低压步进器电机驱动器STSPIN220(2)----驱动STSPIN220

    本文档的目标是提供关于使用STM32CubeMX驱动低压步进电机驱动器STSPIN220的详尽信息和操作指南。通过本文档,将深入了解如何利用STM32CubeMX来配置电机驱动器,以及如何实现对步进电机的精确控制和运动。
    的头像 发表于 12-01 15:25 919次阅读
    基于<b class='flag-5'>STM32CUBEMX</b>驱动低压步进器电机驱动器STSPIN220(2)----驱动STSPIN220