首先是需要用到的外设有:GPIO、AFIO、EXTI、NVIC GPIO:配置引脚的输入输出模式 AFIO:负责选择对应的引脚或者进行引脚重映射。 AFIO上连接了多个引脚,比如PA0~PA15,PB0~PB15,AFIO有多个输入,但是只有16个输出,所以PA0和PB0、PA1和PB1……不能同时使用。 EXTI:为边缘检测器。 用于配置触发相关参数,比如允许哪根...
EXTI_InitStruct.EXTI_Line = EXTI_Line0; //中断通道选择 EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; //中断响应模式 EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising; //上升沿触发中断 EXTI_InitStruct.EXTI_LineCmd = ENABLE; //外部中断使能 EXTI_Init(&EXTI_InitStruct); //外部中断初始...
如上表所示,EXTI0中断服务函数的地址是0x00000058。意思就是如果触发了外部中断那么就从0x00000058地址开始执行,这个地址的函数可以在HAL库的启动文件中找到。 很明显,EXTI0的中断服务函数的函数名是:EXTI0_IRQHandler EXTI0~EXTI4是独立的,9~5共用中断源,15~10共用中断源,9~5和15~10的中断需要在中断函数中判断...
EXTI_Mode_Interrupt =0x00,//中断模式EXTI_Mode_Event =0x04//事件模式}EXTIMode_TypeDef; (c)、边沿事件触发方式:用于选择外部IO输入时信号边沿触发事件的方式。 typedefenum{ EXTI_Trigger_Rising =0x08,//信号上升沿触发EXTI_Trigger_Falling =0x0C,//信号下降沿触发EXTI_Trigger_Rising_Falling =0x10//信...
static void EXTI_NVIC_Config(void); void EXTI_Key_Config(void); #endif /* __BSP_EXTI_H */ 接下来看中断服务函数stm32f10x_it.c void EXTI0_IRQHandler(void) { // 判断是否发生中断 // 与函数FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line);功能相同 ...
//外部中断4的中断服务函数voidEXTI4_IRQHandler(void){delay_ms(10);if(KEY0==0){//BEEP=!BEEP;LED0=!LED0;LED1=!LED1;}//清除中断标志位EXTI_ClearITPendingBit(EXTI_Line4);}//外部中断0的中断服务函数voidEXTI0_IRQHandler(void){delay_ms(10);if(WK_UP==1){BEEP=!BEEP;// LED0=!LED0;//...
void EXTI0_IRQHandler(void) { if (EXTI_GetITStatus(EXTI_Line0) != RESET) { // 检查中断发生标志 // 处理中断事件 // ... EXTI_ClearITPendingBit(EXTI_Line0); // 清除中断发生标志 } } ``` 3. 配置外部中断引脚: 在使用外部中断前,需要配置相应的GPIO引脚作为中断输入。以下是一个配置外部中断...
void EXTI0_IRQHandler() void EXTI1_IRQHandler() void EXTI2_IRQHandler() void EXTI3_IRQHandler() void EXTI4_IRQHandler() void EXTI9_5_IRQHandler() void EXTI15_10_IRQHandler() 1. 2. 3. 4. 5. 6. 7. 2 外部中断相关配置寄存器
4. EXTI中断/事件线路 5. 外部中断使用步骤 6. 示例 (1)exti_utils.h (2)exti_utils.c 六、定时器中断 1. 简介 2. 通用定时器简介 (1)时基单元 (2)计数器模式 (3)时钟选择 (4)输入通道 (5)捕获通道 (6)定时器级联 (7)定时器中断
STM32_SetPriority(EXTI0_IRQn,NVIC_PriorityGroup_2,2,2); } /* 函数功能: 外部中断线0 服务函数 */ void EXTI0_IRQHandler(void) { if(WK_UP) { printf("按键WK_UP按下!\n"); LEDO=0; LED1=0; } //清除中断线0上的中断请求 EXTI->PR|=1<<0; ...