STM32CubeMX 实现 LED 亮灭----中断模式

STM32CubeMX 实现 LED 亮灭----中断模式

文章目录

1、了解中断

中断全过程

中断发生 当CPU在处理某一事件A时,发生了另一事件B,请求 CPU迅速去处理

中断处理 CPU暂停当前的工作,转去处理事件B

中断返回 当CPU将事件B处理完毕后,再回到事件A中被暂停的 地方继续处理事件A

中断程序执行过程示意图

STM32CubeMX 实现 LED 亮灭----中断模式

中断优先级

处理器根据不同中 断的重要程序设置 不同的优先等级。 不同优先级中断的 处理原则是:高级 中断可以打断低级 中断;低级中断不 能打断高级中断

STM32CubeMX 实现 LED 亮灭----中断模式

中断服务程序

在响应一个特定中断的时候,处理器会执行一个函数,该函数一般称为 中断处理程序或者中断服务程序

中断通道

微控制器片内集成了很多外设,对于单个外设而言,它通常具备若干个可以 引起中断的中断源,而该外设的所有中断源只能通过指定的中断通道向内核 申请中断

2、EXTI—外部中断/事件控制器

何为EXTI

EXTI(External interrupt/event controller)—外部中断/事件控制器,管理了控制器的 20 个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿 检测和下降沿的检测。EXTI 可以实现对每个中断/事件线进行单独配置,可以单独配置为 中断或者事件,以及触发事件的属性

外部中断控制器

1、管理23个外部中断线(EXTI Line)

2、 0~15号外部中断线用于由GPIO引脚触发的外部中断

3、 16~22号外部中断线用于RTC闹钟事件、以太网唤醒事件和 USB唤醒事件等

4、 当对应GPIO引脚与外部中断线连接后,GPIO引脚才具备外部 中断的功能,可以设置外部中断的触发方式

EXTI 功能框图

STM32CubeMX 实现 LED 亮灭----中断模式

红色虚线指示的电路流程。它是一个产生中断的线路,最终信 号流入到 NVIC 控制器内。

STM32CubeMX 实现 LED 亮灭----中断模式

绿色虚线指示的电路流程。它是一个产生事件的线路,最终输出一 个脉冲信号

STM32CubeMX 实现 LED 亮灭----中断模式

产生中断线路目的是把输入信号输入到 NVIC,进一步会运行中断服务函数,实现功 能,这样是软件级的。而产生事件线路目的就是传输一个脉冲信号给其他外设使用,并且 是电路级别的信号传输,属于硬件级的。

中断/事件线

EXTI 有 20 个中断/事件线,每个 GPIO 都可以被设置为输入线,占用 EXTI0 至 EXTI15, 还有另外七根用于特定的外设事件,

STM32CubeMX 实现 LED 亮灭----中断模式

EXTI0 至 EXTI15 用于 GPIO,通过编程控制可以实现任意一个 GPIO作为 EXTI的输入源,EXTI0 可以通过 AFIO 的外部中断配置寄存器 1(AFIO_EXTICR1)的 EXTI0[3:0]位选择配置为 PA0、PB0、PC0、PD0、PE0、PF0、PG0、PH0 或者 PI0

STM32CubeMX 实现 LED 亮灭----中断模式

3、中断模式实现 LED 亮灭

用 STM32F103 核心板的 GPIOA 端一管脚接一个 LED,采用中断模式编程(即外部中断),当开关(GPIOB)接高电平时,LED 亮灯;接低电平时,LED 灭灯

3.1 利用CubeMX 生成工程

步骤如下

1、创建新工程

STM32CubeMX 实现 LED 亮灭----中断模式

2、选择芯片

STM32CubeMX 实现 LED 亮灭----中断模式

3、点击下方的已经选择好的芯片进入工程

STM32CubeMX 实现 LED 亮灭----中断模式

4、在Pinout &Configuration 栏里,配置系统调试接口SYS,选择 Serial Wire

STM32CubeMX 实现 LED 亮灭----中断模式

5、配置外设,RCC设置,选择 HSE (外部高速时钟)为 Crystal/Ceramic Resonator

STM32CubeMX 实现 LED 亮灭----中断模式

6、GPIO 配置

选择 LED 灯引脚 PA6,设置引脚为输出模式 GPIO_Output;
选择作为外部中断的引脚 PB14,设置为与中断线 GPIO_EXTI14 连接

STM32CubeMX 实现 LED 亮灭----中断模式

7、GPIO 配置

STM32CubeMX 实现 LED 亮灭----中断模式

STM32CubeMX 实现 LED 亮灭----中断模式

STM32CubeMX 实现 LED 亮灭----中断模式

STM32CubeMX 实现 LED 亮灭----中断模式

STM32CubeMX 实现 LED 亮灭----中断模式

3、2添加代码

将下面代码写入图中 main.c 的对应位置处

 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) 
{ 
	if( GPIO_Pin == BEXTI_Pin ) // 判断外部中断源
		{
			HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); // 翻转LED状态
		}
}

STM32CubeMX 实现 LED 亮灭----中断模式

3、3编译,烧录

STM32CubeMX 实现 LED 亮灭----中断模式

STM32CubeMX 实现 LED 亮灭----中断模式

3、4效果展示

STM32CubeMX 实现 LED 亮灭----中断模式

4、总结

本次实验中断模式控制 LED 亮灭,有利用CubeMX 来生成相关代码,节约许多时间。

5、参考资料

零死角玩转 STM32F103—指南者

上一篇:【Cloud Foundry】Could Foundry学习(三)——Router


下一篇:按键控制UNO板载LED