前言
本文是在之前写的文章嵌入式:使用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