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
    +关注

    关注

    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 和 STM32CubeMXSTM32CubeMX将不再集成到STM32CubeIDE
    的头像 发表于 09-01 17:18 3842次阅读

    使用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

    STM32CubeMX配置STM32G070RBT6TR时为什么无法使能PVD中断

    STM32CubeMX 配置STM32G070RBT6TR时无法使能PVD中断
    发表于 06-18 07:59

    STM32CubeMX配置STM32G070RBT6TR时无法使能PVD中断怎么办?

    STM32CubeMX 配置STM32G070RBT6TR时无法使能PVD中断
    发表于 06-16 06:32

    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