STM32使用外部中断控制led灯亮灭
目录
一、所需环境软硬件
1、软件
STM32CubeMX
Keil
FlyMcu
以上软件均可在网上上免费下载到
2、硬件
STM32F103最小系统板一块
面包板一块
导线若干
led小灯泡一个
二、中断介绍
中断是由内核外部产生的,一般由硬件引起,比如外设中断和外部中断等。
处理器和外部设备的数据传输方式:
中断的全过程:
中断过程执行的示意图:
处理器根据不同中断的重要程序设置不同的优先级:
中断被响应的过程:
GPIO引脚的外部中断触发方式:
中断程序的编程步骤:
这里我们只需完成第五步:编写中断服务程序
中断服务任务处理通过用户编写的回调函数来实现:
三、STM32CubeMX新建项目
和之前一样,选择自己芯片的型号,我这里是STM32F103C8T6
这里需要一个GPIOB端口充当开关的角色,使用一根导线连接端口和电平,接高电平时,LED亮灯;接低电平时,LED灭灯。
1、引脚配置
A4输出控制灯的亮灭,设置为GPIO_Output
A1持续输出高电平,设置为GPIO_Output
A7持续输出低电平,设置为GPIO_Output
B5模拟开关,设置为GPIO_EXTI5
并且为PA4和PB5引脚起个名字,方便后续代码引用。
https://s17.aconvert.com/convert/p3r68-cdx67/0ixoa-par3t.gif
2、配置EXIT
3、配置SYS
4、配置GPIO
改变PB5引脚的触发模式
5、创建项目
四、Keil编写代码及烧录
在main.c中编写回调函数,回调函数就是中断程序执行的函数。
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
if(GPIO_Pin == SWITCH_Pin){
//获取B5的电位
GPIO_PinState pinState = HAL_GPIO_ReadPin(SWITCH_GPIO_Port,SWITCH_Pin);
//低电位
if(pinState==GPIO_PIN_RESET)
HAL_GPIO_WritePin(LED_A4_GPIO_Port,LED_A4_Pin,GPIO_PIN_RESET);//把A4变为低电位
//高电位
else
HAL_GPIO_WritePin(LED_A4_GPIO_Port,LED_A4_Pin,GPIO_PIN_SET);//把A4变为高电位
}
}
使用FlyMcu烧录成功:
五、实现效果
可见,开关接高电平时LED灯变亮了,开关接低电平时LED灯灭了。因为外部电路的存在,LED灯一直是常亮的。
六、总结
使用外部中断模拟开关控制LED灯亮,首先需要弄懂中断控制的原理,因为有STM32CubeMX软件的帮助,我们只需要编写回调函数来设置中断后运行的程序。总的来说还是比较简单。