利用stm32编写程序指定中断源的优先级,使能EXTI中断,设置指定抢占式优先级别为1,响应式优先级别为0
时间: 2024-10-14 17:07:35 浏览: 188
在STM32微控制器中,要指定中断源的优先级并使用EXTI(外部中断)功能,首先需要了解以下几个步骤:
1. **配置中断向量表**:
STM32的中断系统通过向量表来管理中断。每个中断都有其对应的向量地址,你可以通过`NVIC_InitTypeDef`结构来初始化中断优先级。
2. **使能EXTI中断**:
对于EXTI中断,你需要在EXTI线路上配置上升沿、下降沿或双边缘检测,并在` EXTI_Init()`函数中开启相应的中断请求。
```c
EXTI_InitStructure.Exti_Line = EXTI_Line_X; // 替换为你的EXTI线号
EXTI_InitStructure.Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.Polarity = EXTI_Polarity_Rising; // 或者 Falling, 根据需求选择
EXTI_InitStructure.Interrupt = EXTI_Int_Enable;
EXTI_Init(&EXTI_InitStructure);
NVIC_EnableIRQ(EXTI_IRQn); // 启动EXTI中断
```
3. **设置中断优先级**:
使用`NVIC_SetPriorityGrouping()`设置全局中断优先级组,然后用`NVIC_SetPriority()`为特定中断设置优先级。对于EXTI,通常会在`Exti_IRQn`这个中断服务函数中设置具体的抢占式优先级(Prio)和响应式优先级(SubPriority)。
```c
// 全局中断优先级组
NVIC_PriorityGrouping(NVIC_PriorityGroup_4);
// 抢占式优先级设为1,响应式优先级设为0
NVIC_SetPriority(EXTI_IRQn, 1 << 16); // 1表示抢占式优先级,最高优先级
NVIC_SetPriority(EXTI_IRQn, 0); // SubPriority部分,0表示最低响应优先级
```
注意,这里的16是基于32位系统中的16位优先级映射规则,实际使用时应查看具体的STM32系列文档。
阅读全文