为什么需要中断?
循环中检查设备状态有可能因为未能及时捕捉信号导致丢失,所以需要使用中断的方式来让主程序暂时中断,及时接收信号。
定义中断的过程
- 平常一样外设连接的RCC时钟使能
- AFIO开启时钟使能(EXTI默认开启,NVIC为核心控制也默认开启)
- 外设中断引脚设置GPIO_EXTILineConfig
- EXTI_Init初始化EXTI
- NVIC_Init初始化NVIC
详细配置
- GPIO_EXTILineConfig
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14);AFIO选中GPIOB的PIN14通过
- EXTI_InitTypeDef
初始化EXTI的结构体定义,成员有EXTI_Line:
- EXTI_Line 指定中断事件线
- EXTI_LineCmd 使能
- EXTI_Mode 产生中断EXIT_Mode_Iterrupt,或者产生事件EXTI_Mode_Event
- EXTI_Trigger 中断是在上升沿还是下降沿还是双延触发
- NVIC_InitTypeDef
- NVIC_IRQChannel 中断源
- NVIC_IRQChannelPreemptionPriority 抢占优先级
- NVIC_IRQChannelSubPriority 子优先级
- NVIC_IRQChannelCmd 中断使能或者失能
信号如何消抖?
在发生中断事件的时候,可以再读取判断一次信号状态