STM32 HAL库 外部中断 实现按键控制LED亮灭

目录

1、为什么使用GPIO外部中断控制LED亮灭?

2、NVIC嵌套向量中断控制器

3、EXTI外部中断

4、项目的硬件排线

5、STM32CUBE_MX配置

6、HAL库代码

7、实际效果


1、为什么使用GPIO外部中断控制LED亮灭?

实现LED亮灭控制有很多方式,其中一种就是在main函数的while循环里面不断地检测GPIO引脚的电平变化实现输出的电平变化从而实现LED的亮灭控制。但是这种轮询的方式让CPU在不断地运行,不仅消耗电量而且消耗算力。

另一种方式就是使用GPIO外部中断,这是一种可以由硬件自动触发任务执行的方式,只有需要进行控制的时候,CPU才会介入控制。

2、NVIC嵌套向量中断控制器

NVIC属于STM32的内核外设,用于响应外设请求并让CPU跳转到指定的指令地址进行执行任务。STM32F103C8T6单片机只有10个系统异常和60个可屏蔽中断。

STM32可以精确的控制60种中断的具体抢占优先级和响应优先级。原因是IPR寄存器组有15个寄存器。每个寄存器32位,8位控制一种中断,那么有15*4一共60个控制方式,用于解决多个相同中断的优先级处理问题。

另外,除了上面的60个具体中断类型的控制,AIRCR寄存器还提供了对这60种中断的总的控制方式,AIRCR寄存器是一个32位寄存器,其中的10-8位用于设置总的优先级。具体位比特值对应的控制形式如下图。

AIRCR寄存器的值会直接影响IPR寄存器8位控制位中的高四位,IPR高4位的不同组合的控制也如上图所示。

中断向量表:就是每种中断对应跳转的函数地址,比如ADC1中断在A地址,IIC中断在C地址等。这些地址都已经被编译器提取确定无法修改,但是虽然有60种中断,但是电平变化的引脚却不止60个,所以需要在中断服务函数里面手动判定是哪个引脚触发了中断。

3、EXTI外部中断

外部中断主要来自GPIO引脚以及STM32芯片内部的外设。具体如下:

  1. 0-15:对应GPIO_PIN 0-15中断;
  2. 16:PVD输出;
  3. 17:RTC闹钟事件;
  4. 18:USB唤醒事件;
  5. 19:连接到以太网唤醒事件(只适用于互联型产品)

4、项目的硬件排线

具体的布线如下。系统板来自江科大最小系统板,PC13是该系统板自己集成的LED灯。

5、STM32CUBE_MX配置

第一步:配置烧录方式

第二步:配置PA8引脚功能

第三步:配置PC13引脚功能

6、HAL库代码

复杂下面的代码到main.c里面即可。HAL_GPIO_EXTI_Callback表示GPIO外部中断的回调函数,

cpp 复制代码
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
    if (GPIO_Pin == GPIO_PIN_8) {
        // 切换PC13引脚的电平
        HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
    }
}

7、实际效果

请大家多多点赞。

LED_EXTI

相关推荐
潘潘的嵌入式日记2 小时前
I²C 从机接收总被覆盖?双缓冲要在 STOP 时交接
c语言·开发语言·单片机
AOI小白新手上路3 小时前
江科协51单片机16-1 AD/DA ADC 三通道综合显示(LCD1602 版)改造说明
单片机·嵌入式硬件·51单片机
HUI-4744 小时前
EG1135|SSOP‑16 同步整流降压控制器,大功率外置 MOS 降压优选
单片机·嵌入式硬件·硬件工程
单片机仿真设计5 小时前
【proteus仿真】基于 STM32 单片机恒温箱控制系统设计(仿真图+程序)
stm32·单片机·嵌入式硬件·proteus·毕设
国科安芯5 小时前
星载CAN总线通信网络中抗辐射MCU的通信可靠性设计分析
网络·人工智能·分布式·单片机·嵌入式硬件·架构
新晨单片机设计6 小时前
S003A-基于STM32单片机温度计(数码管显示)【Proteus仿真+Keil程序+原理图】
stm32·单片机·stm32单片机功能定制
一条破秋裤6 小时前
TIM 输入捕获与 PWMI:从边沿到频率、占空比
笔记·stm32·学习
AOI小白新手上路6 小时前
江科协51单片机16-1 DA数模转换实验(PWM 呼吸灯)
单片机·嵌入式硬件·51单片机
hongmai6668887 小时前
告别Wi-Fi,专注Mesh:ESP32-H2-MINI-1U-H2S模组规格与应用
单片机·嵌入式硬件·物联网·5g·h.265
Yiran_G7 小时前
BLE通信距离怎么判断?从发射功率、PHY到天线设计分析
单片机·嵌入式硬件