EXIT外部中断

NVIC根据每个中断的优先级分配先后顺序,然后根据唯一的输出口告诉cpu该处理哪个中断,所以中断优先级不是由cpu分配的,cpu不参与分配优先级

1、外设(EXTI/TIM/ADC/USART)

这些是 STM32 里能产生中断的外设,它们会把中断请求信号发给内核里的 NVIC。

**2、NVIC(嵌套向量中断控制器)**它是 Cortex-M 内核里专门管理中断的 "中枢":

  • 接收所有外设发来的中断请求
  • 给每个中断分配优先级(图里的 0~15,数字越小优先级越高
  • 裁决谁先执行,还支持 "高优先级打断低优先级" 的嵌套

3、CPU

最终由 NVIC 通知 CPU 去执行对应的中断服务函数。

响应优先级:

数字越小,优先级越高;高抢占优先级可以打断低抢占优先级的中断

抢占优先级:

数字越小,优先级越高;仅在抢占优先级相同时生效,不支持打断

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

  • 抢占优先级 = 急诊优先级急诊病人(高抢占优先级)可以直接插队,打断正在看病的普通病人(低抢占优先级)。
  • 响应优先级 = 挂号顺序同样是普通病人(抢占优先级相同),谁挂号早(响应优先级高)谁先看,不能互相插队。

EXTI 外部中断

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

正交波形:根据相位差(90°)正向a波超前b波90°,反向a波落后b波90°,旋转编码器里面两个触电,正向旋转两边的触点相位相差90°,根据超前和滞后判断正向还是反向

代码初始化:GPIO->AFIO->EXIT->NVIC->CPU

1、时钟配置

2、引脚配置

3、绑定 PAx到 EXTIx(AFIO)

4、初始化exit

5、初始化nvic

复制代码
void CountSensor_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
	
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource14);
	
	EXTI_InitTypeDef EXTI_InitStructure;
	EXTI_InitStructure.EXTI_Line = EXTI_Line14;
	EXTI_InitStructure.EXTI_LineCmd = ENABLE;
	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
	EXTI_Init(&EXTI_InitStructure);
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
	NVIC_Init(&NVIC_InitStructure);
}

中断函数(无参数无返回值)
中断函数的名字都是固定的,可以去启动函数里面找

此时选EXTI15_10_IRQHandler

用这个要先进行中断标志位的判断

EXTI_GetITStatus使用这个函数看中断标志位

中断程序结束后,要记得调用清除中断标志位的函数,不然只要中断标志位置一了,程序就会跳转到中断函数,如果不清除中断标志位,那它就会一直申请中断,就卡死了

相关推荐
梁朝辉3 小时前
STM32H750VBT6中ADCINP与INN什么区别
stm32·单片机·嵌入式硬件
省四收割者4 小时前
一文详解信号完整性(1)
python·嵌入式硬件·数学建模·信息与通信·信号处理·智能硬件
崇山峻岭之间5 小时前
单片机无感FOC驱动之ADC
单片机·嵌入式硬件
Ligocious5 小时前
1.点亮一颗小小的LED
单片机·嵌入式硬件
KaifuZeng9 小时前
通信与接口协议面试八、CAN通信
单片机·嵌入式硬件·面试·通信与接口协议
智源单片机设计10 小时前
基于单片机的直流电机双闭环调速系统设计
单片机·嵌入式硬件
KaifuZeng1 天前
通信与接口协议面试一、基本概念
嵌入式硬件·通信与接口协议
wuyk5551 天前
24. C 语言模块化:不是拆几个.c 文件那么简单
c语言·开发语言·stm32·单片机
☆cwlulu1 天前
调试排查工具介绍(gdb、strace、Valgrind等)
开发语言·c++·嵌入式硬件·ubuntu
lzqrzpt1 天前
LED驱动电源选型标准与工程应用技术要点解析
python·单片机·嵌入式硬件·物联网