良许Linux教程网 干货合集 STM32中断,及FreeRTOS中断优先级配置

STM32中断,及FreeRTOS中断优先级配置

很多朋友对中断的一些知识还不够了解,因此今天我想写一些关于Cortex-M3处理器中断以及FreeRTOS中断优先级配置方面的内容。

1写在前面

在写本文之前,我先介绍一些相关的扩展内容。

STM32属于ARM的Cortex-M系列处理器,例如:STM32F1采用的是Cortex-M3内核,而STM32F7采用的是Cortex-M7内核。

你可以参考我之前分享的一篇文章:从Cortex-M到Cortex-A认识ARM处理器,以了解有关ARM处理器类型的知识。

本文主要以Cortex-M3内核下的STM32F1系列处理器为例,讲解与中断控制相关的内容。而其他Cortex-M系列处理器或STM32系列处理器关于中断的内容也类似。

需要注意的是,Cortex-M3只是STM32F1的一个内核。反过来说,STM32F1是在Cortex-M3的基础上增加了一些外设(例如:USART、ADC等)的芯片。

2STM32中断控制

NVIC:Nested Vectored Interrupt Controller,即嵌套向量中断控制器。

STM32中NVIC我们比较熟悉,编程的时候使用中断都会对NVIC进行配置。

STM32F1中的NVIC是属于Cortex-M3中的一部分,而不是STM32增加的外设。

NVIC向量中断控制器是Cortex‐M3不可分离的一部分,它与 CM3 内核的逻辑紧密耦合,有一部分甚至水乳交融在一起。

所以,NVIC相关的寄存器位于Cortex-M手册中。讲述STM32的中断控制,还得从Cortex-M3的NVIC讲起,

1.中断输入向量表

Cortex-M3的NVIC支持1至240个中断输入,比如STM32中xxxIRQs,也就是中断向量表,具体的数值由芯片厂商在设计芯片时决定。

比如STM32F1的中断和异常向量表:

image-20231229194239015
image-20231229194239015
image-20231229194246433
image-20231229194246433

2.中断和异常区别

很多初学的朋友不知道什么是中断?什么是异常?甚至有人直接把中断和异常笼统称为“中断”。

中断和异常其实有差异,也有关联,我们常说的中断其实是包含了异常。异常可以理解为MCU,或者程序处于了某种异常状态。

这么区分吧,看上面向量表,上部分有灰色背景的为异常,下部分白色的为中断

异常属于Cortex‐M3内核的一部分,而中断属于MCU(STM32)的一部分(由厂家决定)。

所以:

1.站在Cortex‐M3内核角度,像STM32中USART这类中断,属于外部中断。

2.站在STM32角度,EXTI外部引脚中断才属于中断。

3.优先级

对于Cortex-M3来说,每个外部中断都有一个对应的优先级寄存器。

每个寄存器占用8位,但是允许最少只使用最高3位,在STM32F1中使用了高4位。(也就是我们可以分16个优先级)

优先级可以被分为高低两个位段,分别是抢占优先级和亚(响应)优先级

image-20231229194250639
image-20231229194250639

提示:

1.STM32中断优先级数值越小,优先级越大

**2.**优先级分组:Cortex-M3,M4具有分组功能,即存在抢占优先级和响应优先级,如下图:

image-20231229194253480
image-20231229194253480

而有的内核就没有,如Cortex-M0就没有。

**3.**参考资料

可以参看《Cortex-M3权威指南》

STM32的内核编程手册:

http://www.st.com/stonline/products/literature/pm/15491.pdf

3FreeRTOS中断优先级配置

本节内容讲述一下FreeRTOS最大中断优先级配置问题,也就是FreeRTOSConfig.h配置文件中的:

configMAX_SYSCALL_INTERRUPT_PRIORITY

image-20231229194256476
image-20231229194256476

你们知道配置数值的含义吗?

这里就需要结合NVIC相关的内容来理解。

上面说了,在STM32中,使用了NVIC优先级的高4位,而我们配置时需要对高4位进行配置(低4位未使用)。

image-20231229194259323
image-20231229194259323

看上图,明白了吗,上面这个数值就是95,但代表的优先级为5。

这个配置数值的含义,大概意思是:你代码中使用的中断(比如USART1_IRQn)优先级需要大于5才可行

如下面配置,优先级为2就不行(当然,有分组的还牵涉到分组问题)。

image-20231229194302249
image-20231229194302249

关于FreeRTOS最大优先级配置的内容可以参考:

https://www.freertos.org/RTOS-Cortex-M3-M4.html

提示:

FreeRTOS任务优先级是数值越大,优先级越高。需要和中断优先级区分开来。

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部