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

目录

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

前言

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

一、创建工程

1.使用CubeMX生成代码

打开CubeMX,点击ACCESS TO MCU SELECTOR创建新项目
嵌入式:STM32F103中断方式点亮LED流水灯_第1张图片
选择新片型号,这里我根据我的选择STM32F103C8
嵌入式:STM32F103中断方式点亮LED流水灯_第2张图片
点击System Core,双击RCC,将属性改为下图所示
嵌入式:STM32F103中断方式点亮LED流水灯_第3张图片
点击SYS选择Debug中的Serial Wire
嵌入式:STM32F103中断方式点亮LED流水灯_第4张图片
点击GPIO,选择自己用到的管脚,这里我的LED是连在PB5管脚,按键是连在PA5管脚
连接LED的管脚选择GPIO_Output,按键所连的管脚选择GPIO_EXIT
嵌入式:STM32F103中断方式点亮LED流水灯_第5张图片
嵌入式:STM32F103中断方式点亮LED流水灯_第6张图片
对于PA5——LED,默认设置即可。
嵌入式:STM32F103中断方式点亮LED流水灯_第7张图片

对于PB5——开关,设置其触发方式为中断上升沿触发
嵌入式:STM32F103中断方式点亮LED流水灯_第8张图片
点击NVIC,打勾
嵌入式:STM32F103中断方式点亮LED流水灯_第9张图片
点击Clock Configuration,设置属性如图所示
嵌入式:STM32F103中断方式点亮LED流水灯_第10张图片

创建工程即可
嵌入式:STM32F103中断方式点亮LED流水灯_第11张图片
在这里插入图片描述

2.补充代码

打开CubeMX生成的工程
嵌入式:STM32F103中断方式点亮LED流水灯_第12张图片
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
   */
}

嵌入式:STM32F103中断方式点亮LED流水灯_第13张图片
编译之后,未报错
嵌入式:STM32F103中断方式点亮LED流水灯_第14张图片

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

然后烧录HLE文件
嵌入式:STM32F103中断方式点亮LED流水灯_第15张图片

3.连接电路

连接电路如图所示
嵌入式:STM32F103中断方式点亮LED流水灯_第16张图片
注意:烧录程序是BOOT0-1连接方式为1-0。如果点击运行程序之后,没有效果,可以试试将BOOT0-1连接方式转换为0-0,并按复位键
嵌入式:STM32F103中断方式点亮LED流水灯_第17张图片
嵌入式:STM32F103中断方式点亮LED流水灯_第18张图片
电路效果如图所示:

可以看到,当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

你可能感兴趣的:(stm32,arm,嵌入式硬件)