看到一个交流群在讨论关于【关于STM32中断优先级的话题】,其中就有小伙伴提到:为什么有些STM32中断没有【子优先级】? 比如,有时候你在使用STM32CubeMX配置时,你会发现只有Preemption Priority【抢占优先级】,而没有Sub Priority【次优先级】:
然而,有时候你会发现又有Sub Priority【次优先级】:
这个问题就牵涉到STM32,准确的来说的是 Cortex-M NVIC嵌套向量中断控制器的问题。
关于Cortex-M的NVIC
NVIC:Nested Vectored Interrupt Controller,嵌套向量中断控制器。 在每个Cortex-M内核中都有这么一个NVIC嵌套向量中断控制器,当MCU使用的内核不同,其中的NVIC也可能不同。 比如,Cortex-M0和Cortex-M3内核中NVIC功能就不同。 其中,中断优先级分组功能就不同。 Cortex-M0的NVIC没有优先级分组功能,Cortex-M3、 M4、M7有分组功能。 所以,你在使用STM32CubeMX配置时,M0/M0+内核的STM32是没有【次优先级】那个选项的。 Cortex-M0包含STM32F0、L0、G0等处理器。 对底层感兴趣的朋友可以继续往下看。NVIC寄存器
NVIC寄存器,需查看对应的内核(Cortex-M)手册,在ARM官网能找到(M3也有对应的中文翻译版,大家可以自己网上搜索)。 内核中的寄存器和我们STM32参考手册中寄存器一样,不同的Bit位代表含义不同。 但是,对于NVIC来说,由于包含众多优先级相关配置,寄存器数量相对较多(NVIC寄存器族)。 拿M3来说,优先级分组的配置,位于NVIC的AIRCR应用程序中断及复位控制寄存器中: 这里推荐阅读之前我写过的一篇文章:Cortex-M中断在RTOS中的应用及注意事项中断入口
额外提下一个小伙伴问的问题:为什么外部中断8和9都使用同一个中断?
void EXTI9_5_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line8) != RESET)
{
/* 代码 */
EXTI_ClearITPendingBit(EXTI_Line8);
}
if(EXTI_GetITStatus(EXTI_Line9) != RESET)
{
/* 代码 */
EXTI_ClearITPendingBit(EXTI_Line9);
}
}
我想,这个问题应该不难。好比一个main程序入口,进入之后需要处理很多事情,只是在里面需要区分事件。
很多外设中断,都会使用同一个中断入口,有一个原因:节约中断入口资源分配。
像USART发送和接收中断,TIM不同通道捕获中断等。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
mcu
+关注
关注
146文章
16017浏览量
343632 -
控制器
+关注
关注
112文章
15223浏览量
171192 -
STM32
+关注
关注
2239文章
10671浏览量
348755
发布评论请先 登录
相关推荐
求助,关于stm32F4中断优先级0无法抢占的问题求解
抢占优先级具有最高优先级别。
现在我使用两个定时器:
1)TIM2设置优先级为0,TIM4设置优先级为1
2)若先启动TIM4,延时一下再启动TIM2(为了先触发定时器4
发表于 04-23 07:26
如何测试STM32中断抢占,为何优先级高的定时器2居然一次都抢不到中断了呢?
个位大佬你们是如何测试STM32中断抢占的,我的测试步骤如下:第一步、我配置了两个定时器,定时器2优先级为3,定时器3优先级为4,
第二步、我各自测试都可以发生
发表于 04-22 06:31
stm32f401和max31855通过spi通讯,没有将spi的相关中断优先级置于最高级就会死机的原因?
stm32f401和热电偶芯片max31855通过spi通讯,如果没有将spi的相关中断优先级置于最高优先级,程序运行几秒后就会死机,将sp
发表于 03-28 09:14
STM32F103的寄存器NVIC_IPRx抢占优先级和子优先级是怎么设置的?
STM32F103的寄存器NVIC_IPRx有些不明白,抢占优先级和子优先级是怎么设置的?
如果,中断分组2,抢占
发表于 03-27 07:48
STM32中断优先级相关概念与使用笔记
ARM cortex_m3 内核支持 256 个中断(16 个内核+240 外部)和可编程 256 级中断优先级的设置,与其相关的中断控制和
发表于 10-11 06:53
STM32 MCU通过STM32CubeMx配置NVIC怎么没有中断子优先级选项
时,不难发现一个问题,那就是怎么没有中断子优先级【或称响应优先级、副优先级等】的配置?!【当然,很多时候我们或许
发表于 09-09 09:25
•806次阅读
PLIC管理的中断的优先级和RISC-V本身的机器定时器以及软中断的中断优先级问题
请问PLIC管理的外设中断的优先级和RISC-V本身的机器定时器以及软中断谁的优先级会更高?
机器定时器中断和软
发表于 06-25 19:05
评论