外设中断NVIC、EXTI

一、对外设的控制方式:轮询、中断、MDA

二、中断:可以改变任务的执行顺序

三、NVIC:中断控制器:设置分组与设置优先级

分组中断优先级分组
分组不同,抢占优先级与响应优先级的占位不同,一般设置为组2
先看抢占,再看响应,数字越小,优先级越高。

void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);//设置分组函数调用

NVIC_InitTypeDef	NVICInitDef;						//定义结构体变量
NVICInitDef.NVIC_IRQChannel=USART1_IRQn;				//设置中断通道,在10x.h文件中寻找
NVICInitDef.NVIC_IRQChannelCmd=ENABLE;					//使能中断
NVICInitDef.NVIC_IRQChannelPreemptionPriority=2;		//抢占优先级(0-3)
NVICInitDef.NVIC_IRQChannelSubPriority=1;				//响应优先级(0-3)
NVIC_Init(&NVICInitDef);			//初始化函数调用

四、EXTI:外部中断

外设产生中断信号->交给EXTI->交给内核NVIC
STM32每个io口都可以设置为中断

EXTI结构体

EXTI 初始化结构体
 typedef struct {
 uint32_t EXTI_Line; 						// 中断事件线
 EXTIMode_TypeDef EXTI_Mode; 				// EXTI 模式
 EXTITrigger_TypeDef EXTI_Trigger; 			// 触发类型
 FunctionalState EXTI_LineCmd; 				// 使能EXTI线
 } EXTI_InitTypeDef;

外设中断线(在10x.h文件中)

EXTI共有0-15,16根输入线对应GPIOX_0-15
需要开启AFIO时钟。
中断线对应图
4根输出线
EXTI线16————PVD输出
EXTI线17————RTC闹钟事件
EXTI线18————USB唤醒事件
EXTI线19————以太网唤醒事件(只适合于互相联网产品)

触发方式

有三种:具体看检测到的第一个出现的边沿信号

上升沿、下降沿、上双向沿

触发方式的选择

中断服务函数 IRQHandle(IO口输入线0-15)(在.s文件中)

中断服务函数

五、配置流程

1.初始化中断使用的io口为输入

开启GPIO时钟:	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx,ENABLE);//打开gpiox时钟	
使能外部中断时钟:	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);		//开AIFO时钟
gpio初始化:GPIO_Init();

2.配置中断分组,和优先级

NVIC_PriorityGroupConfig();			//分组
NVIC_Init();						//初始化。设置中断通道,使能,和优先级,中断向量在10x.h文件中

3.配置中断

使能外部中断时钟:	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);		//开AIFO时钟
设置GPIO与中断线的映射关系:GPIO_EXTILineConfig();						//映射中断线
初始化中断:EXTI_Init();				//设置中断模式、中断通道(10x.h文件中)、触发方式

4.编写中断服务函数

EXTIx_IRQHandler();			//在.s启动文件中
注意清楚中断标志位函数的调用
EXTI_ClearITPendingBit();			//清除中断标志位
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好好睡觉好好吃饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值