[STM32] 江科大-EXTI外部中断(学习笔记-上)

中断系统 

中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行。

中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源。

中断嵌套:当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回。

中断执行流程 

STM32中断 

68个可屏蔽中断通道,包含EXTI、TIM、ADC、USART、SPI、I2C、RTC等多个外设 

使用NVIC统一管理中断,每个中断通道都拥有16个可编程的优先等级,可对优先级进行分组,进一步设置抢占优先级响应优先级 

特性

● 68个可屏蔽中断通道(不包含16个Cortex™-M3的中断线);

● 16个可编程的优先等级(使用了4位中断优先级);

● 低延迟的异常和中断处理;

● 电源管理控制;

● 系统控制寄存器的实现;

 外部中断/事件控制器(EXTI)

对于互联型产品,外部中断/事件控制器由20个产生事件/中断请求的边沿检测器组成,对于其它产品STM32F10xxx,则有19个能产生事件/中断请求的边沿检测器。每个输入线可以独立地配置输入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。每个输入线都可以独立地被屏蔽。挂起寄存器保持着状态线的中断请求。

 STM32F10xxx内核中断:

STM32外设中断:(红框内为外部中断) 

 NVIC基本结构

NVIC的名字叫做嵌套中断向量控制器,在STM32中,它是用来统一分配中断优先级和管理中断的。

NVIC是一个内核外设,是CPU的小助手,STM32的中断很多,如果把这些中断全都接到CPU上,那CPU还得引出很多线进行适配,设计上就很麻烦,而且如果很多中断同时申请,或者中断很多就会产生了拥堵,CPU也很难处理,而且CPU主要是用来运算的,中断分配的任务就得放到别的地方,那这地方就是NVIC。

NVIC有很多输入口,有多少个中断线路,都可以接过来,比如下图所示可以接到EXTI、TIM、ADC、USART等等,这里线上画了个斜杠,上面写个n,意思就是一个外设可能会同时占用多个中断通道,所以这里有n条线,然后NVIC只有一个输出口NVIC根据每个中断的优先级分配中断的先后顺序,然后,通过右边这一个输出口就告诉CPU该处理哪个中断。对于中断先后顺序分配的任务,CPU就不需要知道了。

 

NVIC优先级分组 

NVIC的中断优先级由优先级寄存器的4位(0~15)决定(这个优先级的数是值越小,优先级越高,0就是最高优先级),这4位可以进行切分,分为高n位的抢占优先级和低4-n位的响应优先级。

抢占优先级高的可以中断嵌套,响应优先级高的可以优先排队,抢占优先级和响应优先级均相同的按中断号排队 。

 EXTI简介

EXTI(Extern Interrupt)外部中断

EXTI可以监测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序

支持的触发方式:上升沿/下降沿/双边沿/软件触发

支持的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断

 比如PA0、PB0不能同时用,或者PA1、PB1、PC1不能同时用,要选择不同Pin的引脚,比如PA6、PA7或者PA9、PB10或者PB0、PB1就可以

通道数:16个GPIO_Pin(0~15主要功能),外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒(后面四个是蹭网的)

触发响应方式:中断响应/事件响应 

中断响应:就是申请中断,让CPU执行中断函数 

事件响应:是STM32对外部中断增加的一种额外的功能 

当外部中断检测到引脚电平变化时,正常的流程是选择触发中断,但是在STM32中,也可以选择触发一个事件,如果选择触发事件,那外部中断的信号就不会通向CPU了,而是通向其它外设,用来触发其它外设的操作,比如触发ADC转换、触发DMA等等。

总结:中断响应是正常的流程,引脚电平变化触发中断;事件响应不会触发中断,而是触发别的外设操作,属于外设之间的联合工作。

EXTI基本结构 (整体结构图)

 

AFIO:数据选择器 (中断引脚选择)

GPIOA,GPIOB,GPIOC,每个GPIO都有16个引脚,所以进来有16跟线 ,而EXTI模块只有16个GPIO通道,但是这里每个GPIO都有16个引脚,如果每个引脚都占用一个通道,那EXTI通道明显不够用,所以这里会有一个AFIO引脚选择的模块,它可以在前面3个GPIO外设的16个引脚里面选择其中一个连接到后面的EXTI通道里,所以前面说,相同的Pin不能同时触发中断,因为对于PA0,PB0,PC0这些,通过AFIO选择之后只有一个能接到EXTI0通道上。同理,PA1,PB1,PC1这些也只能有一个连接到EXTI1通道上。

注意:本来20路输入,应该有20路中断的输出,但可能ST公司觉得这20个输出太多了,比较占用NVIC的通道资源,所以就把其中外部中断的 9~5 和15 ~ 10给分到一个通道里。也就是说,外部中断的9~5会触发同一个中断函数,15~10也会触发同一个中断函数。在编程的时候,我们在这两个中断函数里,需要再根据标志位来区分到底是哪个中断进来的。

AFIO复用IO口 

AFIO主要用于引脚复用功能的选择和重定义

在STM32中,AFIO主要完成两个任务:复用功能引脚重映射、中断引脚选择 

EXTI框图

 旋转编码器简介

旋转编码器:用来测量位置、速度或旋转方向的装置,当其旋转轴旋转时,其输出端可以输出与旋转速度和方向对应的方波信号,读取方波信号的频率和相位信息即可得知旋转轴的速度和方向。

类型:机械触点式/霍尔传感器式/光栅式 

 

正转时: 

 

反转时: 

 

相位相差90°的波形叫做正交波形。带正交波形输出的旋转编码器是可以用来测方向的。

硬件电路 

 

 

### STM32外部中断实现双向加减的方法 对于STM32微控制器而言,利用外部中断实现双向计数功能可以通过配置GPIO引脚作为输入并设置相应的上升沿和下降沿触发条件来完成。当检测到指定边沿变化时,会触发中断服务程序(ISR),在此期间可以执行特定的操作比如增加或减少某个计数值。 为了使能双向加减操作,需要对外部中断线进行细致设定: - **选择合适的IO口**:挑选具有 EXTI (External Interrupt Line) 功能的 GPIO 引脚用于连接外部信号源。 - **配置EXTI线路的工作模式**:允许同时响应上升沿与下降沿事件[^1]。这意味着无论输入电平是从低变高还是从高变低都会引起一次有效的中断请求。 - **编写高效的ISR处理逻辑**:在每次进入 ISR 后判断当前捕获到了哪种类型的跳变(上升沿或是下降沿),从而决定是对计数器做增量还是减量动作。 下面给出一段简化版C语言代码片段展示如何基于上述思路构建一个简单的双向计数机制: ```c // 定义全局变量保存计数值 volatile int counter = 0; void EXTI_Configuration(void){ // 配置PA0为输入浮空模式 GPIO_InitTypeDef GPIO_InitStruct; __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING; // 上升/下降沿触发 GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化NVIC优先级组 NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4); // 设置外部中断通道优先级 HAL_NVIC_SetPriority(EXTI0_IRQn, 15, 0); // 开启对应IRQ通道 HAL_NVIC_EnableIRQ(EXTI0_IRQn); } void EXTI0_IRQHandler(void){ /* 清除待处理标志 */ HAL_GPIO_EXTI_ClearFlag(GPIO_PIN_0); if (__HAL_GPIO_EXTI_GET_FLAG(GPIO_PIN_0)){ if(__HAL_GPIO_READ_PIN(GPIOA, GPIO_PIN_0)==SET){ // 如果是高电平,则认为是上升沿 counter++; }else{ // 若此时读取到的是低电平则视为下降沿 counter--; } // 执行其他必要的任务... } } ``` 此段伪代码展示了基本框架,实际应用中可能还需要考虑更多细节如防抖动措施等以提高系统的稳定性和准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值