我们找到EXTI2_IRQHandler()这个函数,这就是EXTI2中断响应的函数。我的目标是将LED灯点亮,所以函数体其实很简单: void EXTI2_IRQHandler(void) { //点亮LED灯 GPIO_SetBits(GPIOD,GPIO_Pin_6); //清空中断标志位,防止持续进入中断 EXTI_ClearITPendingBit(EXTI_Line2); } void EXTI3_IRQHandler(void) { GPIO...
}voidEXTI15_10_IRQHandler(void)//中断处理函数{if(EXTI_GetITStatus(EXTI_Line14) ==SET) {/*如果出现数据乱跳的现象,可再次判断引脚电平,以避免抖动*/if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14) ==0) { CountSensor_Count++; } EXTI_ClearITPendingBit(EXTI_Line14); } } main.c #include"stm32f...
5. EXTI基本结构 下面这个是EXTI外部中断的基本结构图,最左边是GPIO口的外设,每个GPIO外设都有16根线,但是EXTI也只有16个GPIO的通道,所以通道是不够用的,那么就需要AFIO来进行引脚的复用,AFIO其实就是一个数据选择器,可以从前面的GPIO外设里面选择一个连接到后面的EXTI通道,这也就是相同的Pin不能同时触发的原因。
voidEXTI0_IRQHandler(void) { if (EXTI_GetITStatus(EXTI_Line0) != RESET) { // 这里可以添加中断处理代码,例如点亮一个LED GPIO_SetBits(GPIOA, GPIO_Pin_1); // 清除中断标志位 EXTI_ClearITPendingBit(EXTI_Line0); } } int main(void) { // 初始化外部中断 EXTI_Init_Config(); // 初始化L...
// 外部中断4服务程序voidEXTI4_IRQHandler(void){delay_ms(10);//消抖if(KEY0==0)// 下降沿触发{LED0=!LED0;LED1=!LED1;}EXTI_ClearITPendingBit(EXTI_Line4);//清除LINE4上的中断标志位} 代码 这是主函数的代码,将中断完成之后,就能实现之前独立按键的功能了。
编号1 是输入线,EXTI 控制器有 19 个中断/事件输入线,这些输入线可以通过寄存器设置为任意一个 GPIO,也可以是一些外设的事件,这部分内容我们将在后面专门讲解。输入线一般是存在电平变化的信号。 编号2 是一个边沿检测电路,它会根据上升沿触发选择寄存(EXTI_RTSR)和下降沿触发选择寄存器(EXTI_FTSR)对应位的设置来...
#define KEY2_INT_GPIO_CLK RCC_APB2Periph_GPIOC static void EXTI_NVIC_Config(void); void EXTI_Key_Config(void); #endif /* __BSP_EXTI_H */ 接下来看中断服务函数stm32f10x_it.c void EXTI0_IRQHandler(void) { // 判断是否发生中断 ...
在stm32f10x_it.c文件中定义中断服务函数KEY1_IRQHandler(void) #define KEY1_IRQHandler EXTI0_IRQHandlervoidKEY1_IRQHandler(void){if(EXTI_GetITStatus(KEY1_INT_EXTI_LINE)!=RESET){LED1_TOGGLE;EXTI_ClearITPendingBit(KEY1_INT_EXTI_LINE);}} ...
(1)、中断屏蔽寄存器EXTI_IMR 图5为断屏蔽寄存器定义,本寄存器用于打开和关闭外部中断的请求,0~22位有效,对应之前提到的23个外部中断请求,对应的位写0时,关闭外部中断请求;对应位写1时,打开外部中断请求。 图5 中断屏蔽寄存器定义 (2)、事件屏蔽寄存器EXTI_EMR ...
HAL_NVIC_EnableIRQ(EXTI15_10_IRQn); 当单片机捕捉到中断(即按下KEY2的动作)后,进入外部中断处理函数: void EXTI15_10_IRQHandler(void) { /* USER CODE BEGIN EXTI15_10_IRQn 0 */ /* USER CODE END EXTI15_10_IRQn 0 */ HAL_GPIO_EXTI_IRQHandler(Exti13_Pin); ...