你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

嵌入式:STM32F103中断方式点亮LED流水灯

2021-11-3 11:20:12

目录

  • 前言
  • 一、创建工程
    • 1.使用CubeMX生成代码
    • 2.补充代码
    • 3.连接电路
  • 二、总结
  • 三、参考资料

前言

本文是在之前写的文章嵌入式:使用CubeMX和HAL库点亮LED流水灯的基础上做了一些改变,之前是用的查询方式点亮LED灯,这次使用中断的方式点亮LED灯。

一、创建工程

1.使用CubeMX生成代码

打开CubeMX,点击ACCESS TO MCU SELECTOR创建新项目
在这里插入图片描述
选择新片型号,这里我根据我的选择STM32F103C8
在这里插入图片描述
点击System Core,双击RCC,将属性改为下图所示
在这里插入图片描述
点击SYS选择Debug中的Serial Wire
在这里插入图片描述
点击GPIO,选择自己用到的管脚,这里我的LED是连在PB5管脚,按键是连在PA5管脚
连接LED的管脚选择GPIO_Output,按键所连的管脚选择GPIO_EXIT
在这里插入图片描述
在这里插入图片描述
对于PA5——LED,默认设置即可。
在这里插入图片描述

对于PB5——开关,设置其触发方式为中断上升沿触发
在这里插入图片描述
点击NVIC,打勾
在这里插入图片描述
点击Clock Configuration,设置属性如图所示
在这里插入图片描述

创建工程即可
在这里插入图片描述
在这里插入图片描述

2.补充代码

打开CubeMX生成的工程
在这里插入图片描述
main.c文件中写下回调函数代码

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  /* Prevent unused argument(s) compilation warning */
  HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5);
  /* NOTE: This function Should not be modified, when the callback is needed,
           the HAL_GPIO_EXTI_Callback could be implemented in the user file
   */
}

在这里插入图片描述
编译之后,未报错
在这里插入图片描述

注意:我之前用的PA5和PB5管脚,在这一步一直有错,可能是这些管脚在芯片中被利用到了,所以报错了,具体原因我还没有找到,所以我重复之前的步骤改成了PA1做开关,PB5做灯。

然后烧录HLE文件
在这里插入图片描述

3.连接电路

连接电路如图所示
在这里插入图片描述
注意:烧录程序是BOOT0-1连接方式为1-0。如果点击运行程序之后,没有效果,可以试试将BOOT0-1连接方式转换为0-0,并按复位键
在这里插入图片描述
在这里插入图片描述
电路效果如图所示:

在这里插入图片描述

可以看到,当PA1连接+时,频闪的LED灯变为常亮,当PA1连接-时,频闪的LED灯熄灭。但是还是存在着接触不良的影响,所以上图效果也是多次实验截取下来的。

二、总结

对于中断方式点亮LED灯,因为没有正式的开关,所以出现了很多的问题,比如接触不良等。回调函数的声明也是比较难想到,如果就用CubeMX生成的虚函数-回调,不知道可不可以正常运行,这里我没有再尝试了,感兴趣的读者可以尝试一下。

三、参考资料

https://blog.csdn.net/qq_46467126/article/details/121055475
https://blog.csdn.net/m0_58414679/article/details/121060073?spm=1001.2014.3001.5501