STM32 的中断优先级结构
NVIC 的中断优先级分为:
抢占优先级(Preemption Priority):决定中断嵌套的层次,高优先级可打断低优先级中断。
子优先级(Subpriority):决定同一级抢占优先级中断的响应顺序。
优先级数范围:
Cortex-M 系列支持 0(最高)到 15(最低)。
STM32 HAL 通常以较低优先级值表示更高优先级。
中断优先级配置
中断优先级的配置分为以下步骤:
STM32CubeMX 配置
打开 CubeMX,选择对应的中断源。
设置抢占优先级和子优先级。
生成代码。
HAL 库手动配置
使用 HAL API 配置 NVIC:
c
复制代码
// 设置中断优先级
HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority);
// 启用中断
HAL_NVIC_EnableIRQ(IRQn_Type IRQn);
// 禁用中断
HAL_NVIC_DisableIRQ(IRQn_Type IRQn);
示例:
c
复制代码
HAL_NVIC_SetPriority(EXTI0_IRQn, 1, 0); // EXTI0 抢占优先级 1,子优先级 0
HAL_NVIC_EnableIRQ(EXTI0_IRQn); // 使能 EXTI0 中断
|