0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-03-04 11:45 次阅读

很多朋友对中断的一些知识还是不了解,今天就写点关于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、AD等)的芯片

2

STM32中断控制

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的中断和异常向量表:

2.中断和异常区别

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

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

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

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

所以:

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

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

3.优先级

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

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

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

提示:

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

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

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

3.参考资料

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

STM32的内核编程手册:

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

3

FreeRTOS中断优先级配置

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

configMAX_SYSCALL_INTERRUPT_PRIORITY

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

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

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

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

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

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

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

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

提示:

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    19155

    浏览量

    229046
  • STM32
    +关注

    关注

    2265

    文章

    10870

    浏览量

    354694
  • FreeRTOS
    +关注

    关注

    12

    文章

    483

    浏览量

    61991
  • Cortex-M3
    +关注

    关注

    9

    文章

    269

    浏览量

    59425
收藏 人收藏

    评论

    相关推荐

    freertos中断优先级在哪设置

    FreeRTOS是一个流行的实时操作系统,它广泛应用于嵌入式系统开发。在FreeRTOS中断优先级是一个重要的概念,因为它决定了
    的头像 发表于 09-02 14:17 543次阅读

    stm32怎样触发软件中断

    STM32,您需要配置NVIC以启用所需的中断。这包括设置中断通道、优先级和触发条件。 编写
    的头像 发表于 09-02 09:32 618次阅读

    请问有什么方法降低WIFI中断优先级

    因为项目对时序输出要求比较严格,WIFI中断优先级比硬件定时器中断优先级要高,在定时器中断里面对GPIO管脚控制被延长执行,请问有什么方法降
    发表于 06-19 07:37

    systick的中断优先级是否应该设置为最高优先级的嵌套中断

    最近在学习ucosii有这样一个疑问,关于stm32的systick作为ucosii的基准时钟,systick的中断优先级是否应该设置为最高优先级的嵌套
    发表于 05-16 06:44

    stm32中断优先级分组了之后还能改分组吗?

    如标题所示,stm32中断优先级分组了之后还能改分组吗? 比如我要使用外部中断EXIT2,3,我在配置的时候
    发表于 05-13 08:40

    STM8中断优先级不够怎么解决?

    STM8L 中断优先级通过下面函数设置,但此处仅 ITC_PriorityLevel_1,ITC_PriorityLevel_2,ITC_PriorityLevel_3总共才3个中断
    发表于 05-06 06:54

    求助,关于stm32F4中断优先级0无法抢占的问题求解

    抢占优先级具有最高优先级别。 现在我使用两个定时器: 1)TIM2设置优先级为0,TIM4设置优先级为1 2)若先启动TIM4,延时一下再启动TIM2(为了先触发定时器4
    发表于 04-23 07:26

    关于stm32cubefreertos优先级设置问题求解

    在用stm32cubefreertos,在配置界面里设置为12任务优先级,但是在cube
    发表于 04-22 07:25

    如何测试STM32中断抢占,为何优先级高的定时器2居然一次都抢不到中断了呢?

    个位大佬你们是如何测试STM32中断抢占的,我的测试步骤如下:第一步、我配置了两个定时器,定时器2优先级为3,定时器3优先级为4, 第二步、
    发表于 04-22 06:31

    STM32中断分组及外部中断配置过程分享

    STM32中断分组   STM32 的每一个GPIO都能配置成一个外部中断触发源,这点也是 STM32
    发表于 04-08 08:05

    Hightec对芯片中断优先级分配时,中断号越高中断优先级越高吗?

    请问大佬,Hightec对芯片中断优先级分配时,中断号越高中断优先级越高吗?看网上的帖子说中断
    发表于 02-27 06:13

    M0516中断优先级怎么设置?

    新唐M0516中断优先级的设置,有没有示例,没找到相关接口,谢谢!
    发表于 01-16 07:25

    GD32如何配置中断优先级分组以及中断优先级

    使用GD32 MCU的过程,大家可能会有以下疑问:中断优先级如何配置和使用?
    的头像 发表于 01-10 10:30 2927次阅读
    GD32如何<b class='flag-5'>配置</b><b class='flag-5'>中断</b><b class='flag-5'>优先级</b>分组以及<b class='flag-5'>中断</b><b class='flag-5'>优先级</b>

    stm32中断怎么处理的

    STM32是一款非常强大的微控制器系列,具有丰富的外设和功能。中断STM32非常重要的部分,能够帮助我们提高系统的响应速度和效率。本文将详细介绍
    的头像 发表于 01-02 17:35 2451次阅读

    FreeRTOS中断测试避坑指南

    任何调用中断安全FreeRTOS API函数的中断服务例程都可以使用的最高中断优先级。不要从任何优先级
    的头像 发表于 12-21 09:04 977次阅读
    <b class='flag-5'>FreeRTOS</b><b class='flag-5'>中断</b>测试避坑指南