ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-11-04 13:33:29  阅读:189  来源: 互联网

标签:LED 亮灭 中断 STM32CubeMX 外部 事件 GPIO EXTI


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

文章目录

1、了解中断

中断全过程

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

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

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

中断程序执行过程示意图

image-20211103233932787

中断优先级

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

image-20211103234144118

中断服务程序

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

中断通道

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

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 功能框图

image-20211104000038703

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

image-20211104000606472

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

image-20211104000934233

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

中断/事件线

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

image-20211104001409989

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

image-20211104001644613

3、中断模式实现 LED 亮灭

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

3.1 利用CubeMX 生成工程

步骤如下

1、创建新工程

image-20211026202042382

2、选择芯片

image-20211026202224147

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

image-20211026202530122

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

image-20211026202838599

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

image-20211026203008621

6、GPIO 配置

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

image-20211104004024088

7、GPIO 配置

image-20211104005604153

image-20211104005901672

image-20211104010030652

image-20211104011832770

image-20211104012155789

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状态
		}
}

image-20211104013848370

3、3编译,烧录

image-20211104014942828

image-20211104121936091

3、4效果展示

在这里插入图片描述

4、总结

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

5、参考资料

零死角玩转 STM32F103—指南者

标签:LED,亮灭,中断,STM32CubeMX,外部,事件,GPIO,EXTI
来源: https://blog.csdn.net/m0_56739646/article/details/121140312

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有