STM32CubeMX 实现 LED 亮灭----中断模式
作者:互联网
STM32CubeMX 实现 LED 亮灭----中断模式
文章目录
1、了解中断
中断全过程
中断发生 当CPU在处理某一事件A时,发生了另一事件B,请求 CPU迅速去处理
中断处理 CPU暂停当前的工作,转去处理事件B
中断返回 当CPU将事件B处理完毕后,再回到事件A中被暂停的 地方继续处理事件A
中断程序执行过程示意图
中断优先级
处理器根据不同中 断的重要程序设置 不同的优先等级。 不同优先级中断的 处理原则是:高级 中断可以打断低级 中断;低级中断不 能打断高级中断
中断服务程序
在响应一个特定中断的时候,处理器会执行一个函数,该函数一般称为 中断处理程序或者中断服务程序
中断通道
微控制器片内集成了很多外设,对于单个外设而言,它通常具备若干个可以 引起中断的中断源,而该外设的所有中断源只能通过指定的中断通道向内核 申请中断
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 功能框图
红色虚线指示的电路流程。它是一个产生中断的线路,最终信 号流入到 NVIC 控制器内。
绿色虚线指示的电路流程。它是一个产生事件的线路,最终输出一 个脉冲信号
产生中断线路目的是把输入信号输入到 NVIC,进一步会运行中断服务函数,实现功 能,这样是软件级的。而产生事件线路目的就是传输一个脉冲信号给其他外设使用,并且 是电路级别的信号传输,属于硬件级的。
中断/事件线
EXTI 有 20 个中断/事件线,每个 GPIO 都可以被设置为输入线,占用 EXTI0 至 EXTI15, 还有另外七根用于特定的外设事件,
EXTI0 至 EXTI15 用于 GPIO,通过编程控制可以实现任意一个 GPIO作为 EXTI的输入源,EXTI0 可以通过 AFIO 的外部中断配置寄存器 1(AFIO_EXTICR1)的 EXTI0[3:0]位选择配置为 PA0、PB0、PC0、PD0、PE0、PF0、PG0、PH0 或者 PI0
3、中断模式实现 LED 亮灭
用 STM32F103 核心板的 GPIOA 端一管脚接一个 LED,采用中断模式编程(即外部中断),当开关(GPIOB)接高电平时,LED 亮灯;接低电平时,LED 灭灯
3.1 利用CubeMX 生成工程
步骤如下
1、创建新工程
2、选择芯片
3、点击下方的已经选择好的芯片进入工程
4、在Pinout &Configuration 栏里,配置系统调试接口SYS
,选择 Serial Wire
5、配置外设,RCC
设置,选择 HSE (外部高速时钟)为 Crystal/Ceramic Resonator
6、GPIO 配置
选择 LED 灯引脚 PA6,设置引脚为输出模式 GPIO_Output;
选择作为外部中断的引脚 PB14,设置为与中断线 GPIO_EXTI14 连接
7、GPIO 配置
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状态
}
}
3、3编译,烧录
3、4效果展示
4、总结
本次实验中断模式控制 LED 亮灭,有利用CubeMX 来生成相关代码,节约许多时间。
5、参考资料
零死角玩转 STM32F103—指南者
标签:LED,亮灭,中断,STM32CubeMX,外部,事件,GPIO,EXTI 来源: https://blog.csdn.net/m0_56739646/article/details/121140312