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

    文章

    20148

    浏览量

    247118
  • STM32
    +关注

    关注

    2305

    文章

    11120

    浏览量

    371138
  • FreeRTOS
    +关注

    关注

    14

    文章

    497

    浏览量

    66352
  • Cortex-M3
    +关注

    关注

    9

    文章

    276

    浏览量

    61137
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    抢占优先级和子优先级

    关于抢占优先级和子优先级: 1)具有高抢占式优先级中断可以在具有低抢占式优先级中断服务程序执
    发表于 12-03 07:11

    芯源MCU中断相关寄存器

    。 5.5.2 NVIC 中断挂起和清除挂起 在中断发生时,如果系统正在处理与之相同优先级或更高优先级中断,系统将不会立即处理此
    发表于 11-27 07:23

    MCU中断不触发的排查

    1、NVIC中断是否使能? 2、外设本身的中断是否使能(例如 UART 的接收中断使能位)? 3、中断服务函数名是否与向量表的名称完全一致
    发表于 11-18 08:19

    FreeRTOS任务调度及优先级问题

    都有容错,但是心里没底,想向大家了解一下实际工作中有没有遇到到类似的问题,如果有又是怎么解决的呢? 另外有前辈可以分享一下任务的优先级在实际项目中该基于什么原则来划分呢?
    发表于 11-06 02:18

    关于蜂鸟E203内核中断硬件实现中断嵌套的设计

    嵌套,可以有很多层(蜂鸟处理器该情况下不响应新的端,继续执行正在处理的ISR,彻底完成后才响应新的中断请求) 注意:假设新来的中断请求的优先级比正在处理的
    发表于 10-23 07:07

    什么是RTOS优先级反转

    当一个高优先级任务正在等待一个资源,但一个低优先级任务正在持有它,一个中等优先级任务继续在中间运行时,就会发生优先级反转——阻止低优先级任务
    的头像 发表于 09-09 14:50 774次阅读

    求助,关于MS51设置中断优先级问题求解

    我确实发现在库代码和 TRM 之间设置中断优先级有一些差异,如下图所示。 Could you check what's wrong with me?
    发表于 08-25 07:01

    请问STM32的内部Flash操作是不是优先级最高?

    STM32的内部Flash操作是不是优先级最高?目前在内部Flash的单独一页存储了数据,发现在进行页擦除的时候正常工作的定时器中断无法进入了
    发表于 08-13 07:03

    STM32G474进入Fault3中断没办法设置成周期性触发吗?

    手动操作硬件触发了Fault3故障,进入了Fault3中断,此时若故障一直存在程序就在中断里无法出来,FreeRTOS停止运行,把故障解除后FreeRTOS正常运行,即使把Fault3
    发表于 08-01 07:23

    TLe9893怎么调整外设的中断优先级

    你好林工,我该怎么调整外设的中断优先级?是否可以通过工具调整?默认设置下,是不是Brdv的在中断优先级高于T20和can?
    发表于 08-01 06:20

    请问C0系列单片机中断优先级只有4吗?

    C0系列单片机中断优先级只有4?C071在配置的时候只能配置0-3
    发表于 07-23 08:00

    第六章 外部中断

    本章介绍W55MH32的IO口作为外部中断输入的使用。先阐述了NVIC(嵌套向量中断控制器) 的结构、寄存器、优先级及相关函数,再说明EXTI(外部中断和事件控制器)的功能。框图及I
    的头像 发表于 05-26 16:27 1002次阅读
    第六章 外部<b class='flag-5'>中断</b>

    第十章 W55MH32中断应用概览

    本章讲述了W55MH32中断应用,涵盖异常类型、NVIC介绍、优先级定义与分组,阐述中断编程三要点(使能中断配置 NVIC、编写服务函数)
    的头像 发表于 05-22 17:07 1592次阅读
    第十章 W55MH32<b class='flag-5'>中断</b>应用概览

    CyU3PDebugPrint的最高优先级和最低优先级是什么?

    [i]CyU3PDebugPrint的最高优先级和最低优先级是什么?
    发表于 05-13 08:22

    一天一个嵌入式面试知识(1:中断处理机制详解)

    立即响应(优先级高) 需经过系统调度(优先级可控) 典型应用 外部事件响应(如UART数据到达) 系统服务调用(如文件读写) 三、中断处理流程解析 以STM32为例,
    发表于 03-21 10:18