STM32F4基于CubeMX项目实战(1)--外部中断实验

    在之前的一篇文章中详细介绍了如何利用CubeMX创建一个完整的工程文件,但是CubeMX给我们的帮助有限,而更加具体的程序需要我们自行去编写,因此在这里我将利用开发板上自带的按键触发中断,并且使得板子上红绿两个LED灯交替闪烁。

    本篇文章将略过创建工程文件的步骤,如果对如何使用CubeMX创建工程文件不清楚可以参照这篇文章STM32F429zit基于CubeMX的建立工程文件指南

    本实验实现过程对于STM32F4系列以及STMF1系列通用。    

    所使用的开发板为STM32F4-disc1板,使用hal库进行编写。

操作步骤

    首先我们点开开发板所配有的开发手册,从而确定好板子上按键所对应的引脚。如下图所示,我们从中可以得知按键所对应为PA0引脚。

    然后我们点开上一篇文章里我们所创建的工程文件,并在其中点开图标为MX的文件,如下图所示:

    点进去后我们接着在芯片图上选择PA0引脚,并且选择GPIO_EXTI0,如下图所示:

    STM32F4 供 IO 口使用的中断线有16个,GPIO口与中断线的对应关系如下,因此在这里PA0对应的自然是EXTI0中断线。

    接下来我们点开右边的System Core,并且点开展开列表中的GPIO,并且选择我们要修改配置的引脚PA0,将GPIO mode改为上升沿触发,以及下方改为下拉输入

    因为在hal库中HAL_Delay延时函数利用了单片机的定时器中断进行计时,而按键所触发的中断优先级和计时器的优先级相同,导致单片机在执行按键所触发的中断后优先级相同的定时器中断无法执行,因此会导致卡死。所以在这里我们需要降低外部中断的优先级。

   我们在左侧点击NVIC并且将中断线EXTI line0后面的框勾上,并且把后面数字中的0改为1。而数字越大所对应的中断优先级越低。

   完成后点击右上方的蓝色按键重新配置文件。

    进入文件后首先我们将上一篇文章中在主函数中所写的原有代码删去,恢复为刚开始创建后的样子。接着点击如图所示左下方的Fuctions切换下文件视图。

     如何在左边列表处往下滑找到stm32f4xx_it.c文件并且展开他,在他展开的列表中找到中断线EXTI0所对应的中断函数EXTI0_IRQHandler(void),如图所示:

    我们双击所找到的中断函数就可以打开他。在这里提醒下,STM32F4 的外部中断 0~4 都有单独的中断服务函数,但是从 5 开始, 他们就没有单独的服务函数了,而是多个中断共用一个服务函数,比如外部中断 5~9 的中断服 务函数为:void EXTI9_5_IRQHandler(void),类似的,void EXTI15_10_IRQHandler(void)就是 外部中断 10~15 的中断服务函数。

    可以看见在函数里面还套着一个函数,我们点击内部的这个函数并且按鼠标右键,然后选择跳转到他的定义处,如图所示:

    下图中所框住的地方便为这个函数。我们可以在其中看到函数先判断这个IO口是否中断,再清除标志位,随后进入到callback函数中。我们用相同的方式打开这个callback函数的定义 

    这个函数的前面带有一个__weak的标识,说明该函数为弱函数,加上了__weak 修饰符的函数,用户可以在用户文件中重新定义一个同 名函数,最终编译器编译的时候,会选择用户定义的函数,如果用户没有重新定义这个函数,那么编译器就会执行__weak 声明的函数,并且编译器不会报错。因此我们可以将该函数的名字复制下来放在主函数中,然后把想要通过中断所执行的操作放入该函数中。

    因此在主函数中我们找到下图这个位置(所写的函数应放在begin和end之间,不然关闭文件后会被删去),并且在其中添加上callback函数所对应的名字,如下图所示:

    然后我们在其中写上我们需要在中断中所执行的操作。在本实验中我们只需要然两个灯在按下按键的时候改变亮起和熄灭的状态即可,因此我们在这里使用 HAL_GPIO_TogglePin函数从而翻转引脚的电平状态。如下图所示:

   而关于GPIO的一些其他的操作可以参考大佬的这篇文章HAL库常用函数使用介绍--HAL_GPIO

    因为我们要使led灯交替闪烁,因此我们在main函数循环的前面这里设定好两个灯的初始状态是一亮一灭的

    到这里我们的代码就编写完成了,接下来编译运行,可以看见刚开始时是红灯熄灭绿灯亮起,按下PA0所对应的蓝色按键后转为红灯亮起绿灯熄灭,重复按下两灯交替亮起熄灭。实验成功。

     本人接触此方面时间较短,若有不足之处请多多包涵并指正,感谢。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
en.stm32cubemx-win-v6-9-1是一个针对STMicroelectronics的STM32微控制器系列的软件工具。这个软件工具可在Windows操作系统上使用,其版本号为6.9.1。 STM32微控制器系列是STMicroelectronics推出的一种低功耗、高性能的微控制器芯片系列。这些微控制器芯片广泛用于嵌入式系统、物联网设备、工业自动化以及各种电子产品中。STM32微控制器系列有多个不同的型号和系列,每个型号都有不同的功能和性能特点。 en.stm32cubemx-win-v6-9-1是用于STM32微控制器系列的软件工具。它具有通过图形化界面进行配置和生成代码的功能,使得开发人员可以更加方便地进行STM32微控制器的软件开发。通过这个软件工具,开发人员可以选择不同的模块、外设和功能,然后生成相应的初始化代码。这个软件工具还可以提供一些自动生成的模版,使得开发人员可以快速开始开发。 除了代码生成外,en.stm32cubemx-win-v6-9-1还提供了一些其他功能。例如,它可以通过图形化界面配置时钟树、引脚映射、中断优先级等。此外,该软件工具还可以集成其他开发环境,例如Keil或IAR,以便更直接地进行代码编辑和编译。 总而言之,en.stm32cubemx-win-v6-9-1是一个用于STM32微控制器系列的软件工具,它提供了图形化界面配置和生成代码的功能,帮助开发人员更方便地进行STM32微控制器的软件开发。它是一个很有用的工具,可以提高开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值