外设中断处理流程
NVIC中断优先级分组
NVIC_SetPriorityGrouping(NVIC_PriorityGroup_2);
初始化中断
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
以stm32f103为例
(1)使能GPIOA,USART1时钟
(2)配置PA9为复用功能推挽输出、配置PA10为浮空输入
(3)NVIC配置,初始化参数配置(分配抢占优先级和响应优先级等等)
(4)USART1配置,初始化参数配置(配置传输的位数等等)
(5)清除RXNE接收非空,TC发送完成标记
void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG);
(6)清除中断标志,以便接收新的中断
(7)使能接收非空中断
void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState);
(8)使能USART1
void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState);
写中断处理(服务)函数
void USART1_IRQHandler(void)
判断是否是接收非空中断
ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT);
关闭中断
USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);
清除接收非空标志
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
外部中断处理流程(针对IO口)
NVIC中断优先级分组
初始化中断
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
(1)RCC使能AFIO和GPIOA
(2)NVIC配置,初始化参数配置(分配抢占优先级和响应优先级等等)
(3)配置PA0为输入上拉
(4)中断线配置
(5)清除中断线上的中断标志
(6)EXTI初始化参数配置
函数配置
在中断向量表中找到需要的函数并复制使用
void EXTI0_IRQHandler(void)
函数使用结束后,必须清除中断标志,如果不清楚则无法响应后续中断
EXTI_ClearITPendingBit(EXTI_Line0);