stm32二.EXTI外部中断

目录

一.中断流程

 二.stm32中断

 NVIC基本结构

 NVIC中断优先级

 三.EXTI外部中断

 简介

 基本结构

 AFIO复用I/O口

 EXTI框图 

 四.使用EXTI外部中断

中断步骤 

 AFIO函数

 EXTI函数

NVIC函数

初始化


一.中断流程

 二.stm32中断

  1. 使用NVIC统一管理中断,每个中断通道都有16个优先级
  2. 优先级分为响应优先级和抢占优先级
  •  NVIC基本结构

 

  •  NVIC中断优先级
  1. 优先级由优先级寄存器的四位决定
  2. 分为高n位抢占优先级和低n-1位响应优先级
  3. 抢占优先级高可以中断嵌套,响应优先级高可以优先排队

 三.EXTI外部中断

  •  简介
  1.  EXTI通过监测GPIO口电平变化,向NVIC发起中断申请,经NVIC裁决后可中断CPU主程序,使CPU执行中断程序
  2. 触发方式:上升沿/下降沿/双边沿/软件触发
  3. 相同的GPIO_Pin口不能同时触发中断(PinA1/PinB1/PinC1不能同时触发)
  4. 触发响应方式:事件响应/中断响应
  5. 事件响应:中断信号不会进入CPU,而是通向其他外设(触发ADC转换,DMA)
  •  基本结构

 

  •  AFIO复用I/O口
  1.  复用功能引脚重映射
  2. 中断引脚选择

  •  EXTI框图 

 四.使用EXTI外部中断

  • 中断步骤 
  1.  配置RCC时钟,把设计外设的时钟打开
  2. 配置GPIO,选择端口为输入模式
  3. 配置AFIO,选择引脚
  4. 配置EXIO,选择边沿触发方式
  5. 配置NVIC,选择中断优先级
  •  AFIO函数
void GPIO_AFIODeInit(void);//AFIO初始化,清除配置
void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//锁定配置

void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
void GPIO_EventOutputCmd(FunctionalState NewState);//配置事件输出功能
void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);//引脚重映射
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);//配置AFIO数据选择器,选择中断引脚
void GPIO_ETH_MediaInterfaceConfig(uint32_t GPIO_ETH_MediaInterface);//用不太到
  •  EXTI函数

void EXTI_DeInit(void);//清除配置,恢复默认上电
void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);//配置EXTI外设
void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct);//结构体变量赋值
void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line);

FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line);
void EXTI_ClearFlag(uint32_t EXTI_Line);//清除中断标志位
//主程序读写状态寄存器
ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);
void EXTI_ClearITPendingBit(uint32_t EXTI_Line);//清除中断标志位
//中断函数读写状态寄存器

  • NVIC函数
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);//中断分组函数
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);//初始化NVIC
void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset);//
void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState);
void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource);
  • 初始化
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
	//EXTI与NVIC不需要开启时钟
	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(GPIOA, &GPIO_InitStructure);
	GPIO_SetBits(GPIOB,GPIO_Pin_14);
	//GPIO初始化
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource14);
	//AFIO初始化
	EXTI_InitTypeDef EXTI_InitStruct;
	EXTI_InitStruct.EXTI_Line=EXTI_Line14;
	EXTI_InitStruct.EXTI_LineCmd=ENABLE;
	EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt ;//中断
	EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling;//下降沿触发
	EXTI_Init(&EXTI_InitStruct);
	//EXTI初始化
	NVIC_InitTypeDef NVIC_InitStruct;
	NVIC_InitStruct.NVIC_IRQChannel=EXTI15_10_IRQn;
	NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;//抢占优先级
	NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;//响应优先级
	NVIC_Init(&NVIC_InitStruct);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值