STM32使用外部中断控制led灯亮灭

目录

  • 一、所需环境软硬件
      • 1、软件
      • 2、硬件
  • 二、中断介绍
  • 三、STM32CubeMX新建项目
      • 1、引脚配置
      • 2、配置EXIT
      • 3、配置SYS
      • 4、配置GPIO
      • 5、创建项目
  • 四、Keil编写代码及烧录
  • 五、实现效果
  • 六、总结

一、所需环境软硬件

1、软件

STM32CubeMX
Keil
FlyMcu

以上软件均可在网上上免费下载到

2、硬件

STM32F103最小系统板一块
面包板一块
导线若干
led小灯泡一个

二、中断介绍

中断是由内核外部产生的,一般由硬件引起,比如外设中断和外部中断等。
处理器和外部设备的数据传输方式:
STM32使用外部中断控制led灯亮灭_第1张图片

中断的全过程:
STM32使用外部中断控制led灯亮灭_第2张图片

中断过程执行的示意图:
STM32使用外部中断控制led灯亮灭_第3张图片

处理器根据不同中断的重要程序设置不同的优先级:
STM32使用外部中断控制led灯亮灭_第4张图片

中断被响应的过程:
STM32使用外部中断控制led灯亮灭_第5张图片

GPIO引脚的外部中断触发方式:
STM32使用外部中断控制led灯亮灭_第6张图片

中断程序的编程步骤:
STM32使用外部中断控制led灯亮灭_第7张图片

这里我们只需完成第五步:编写中断服务程序
中断服务任务处理通过用户编写的回调函数来实现:
STM32使用外部中断控制led灯亮灭_第8张图片

三、STM32CubeMX新建项目

和之前一样,选择自己芯片的型号,我这里是STM32F103C8T6
这里需要一个GPIOB端口充当开关的角色,使用一根导线连接端口和电平,接高电平时,LED亮灯;接低电平时,LED灭灯。

1、引脚配置

A4输出控制灯的亮灭,设置为GPIO_Output
A1持续输出高电平,设置为GPIO_Output
A7持续输出低电平,设置为GPIO_Output
B5模拟开关,设置为GPIO_EXTI5

并且为PA4和PB5引脚起个名字,方便后续代码引用。
STM32使用外部中断控制led灯亮灭_第9张图片

https://s17.aconvert.com/convert/p3r68-cdx67/0ixoa-par3t.gif

2、配置EXIT

STM32使用外部中断控制led灯亮灭_第10张图片

3、配置SYS

STM32使用外部中断控制led灯亮灭_第11张图片

4、配置GPIO

改变PB5引脚的触发模式
STM32使用外部中断控制led灯亮灭_第12张图片

5、创建项目

STM32使用外部中断控制led灯亮灭_第13张图片
STM32使用外部中断控制led灯亮灭_第14张图片

四、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变为高电位
        }
    }

STM32使用外部中断控制led灯亮灭_第15张图片
使用FlyMcu烧录成功:
STM32使用外部中断控制led灯亮灭_第16张图片

五、实现效果

可见,开关接高电平时LED灯变亮了,开关接低电平时LED灯灭了。因为外部电路的存在,LED灯一直是常亮的。

六、总结

使用外部中断模拟开关控制LED灯亮,首先需要弄懂中断控制的原理,因为有STM32CubeMX软件的帮助,我们只需要编写回调函数来设置中断后运行的程序。总的来说还是比较简单。

你可能感兴趣的:(stm32,单片机,arm)