EXTI 外部中断
中断的概念
- 中断 :出现中断条件。
- 中断优先级:优先响应更紧急的中断源。
- 中断嵌套:一个中断允许中,又触发更高优先级的中断。
中断包括
EXIT TIM ADC USART SPI通信 I2C通信 RTC定时时钟 等
使用NVIC统一管理中断,每个中断通道都有16个可编程的优先姐进行分组。进一步设置抢占优先级和响应优先级。
由优先级寄存器的4位(0~15)决定,高n位为抢占优先级和低4-n位的响应优先级。
- 触发响应方式:中断响应/事件响应(不去cpu去外设操作)
- 相同的pin不能同时触发中断(PA0 PB0 …)
适用
- 旋转编码器:机器触点/霍尔/光栅
代码
AFIO的 gpio.h
- GPIO_AFIODeInit(void); 复位AFIO外设,AFIO配置全部清除;
- GPIO_PinLockConfig(GPIO_TypeDef*GPIOx,uint6_t GPIO_Pin): 锁定GPIO的配置 防止恶意更改
- GPIO_EventOutputConfig(uint8_t GPIO_PortSource,uint8_t GPIO_PinSource);
和GPIO_EventOutputCmd(FunctionlState NewState); 配置AFIO的事件输出功能的 - GPIO-PinRemapConfig(uint32_t GPIO_Remap,FunctionalState NewState); 引脚重映射
- GPIO_EXTLineConfig(uint8_t GPIO_Portsource,unit8_t GPIO_PinSource); 配置afio的数据选择器,选择想要的中断引脚
- GPIO_ETH_MediaInterfaceConfig(uin32_t GPIO_ETH_MediaInterface); 配置以太网
EXTI.h
- void EXTI_DeInit(void); 清除EXTI的配置
- 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);获取指定的标志位 是否被置1
- void EXTI_ClearFlag(uint32_t EXTI_Line);对置1 的标志位 清0
中断程序中查看
- ITStatus EXTI_GetITStatus(uint32_t EXTI_Line); 获取中断标志位是否被置1
- 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);