转自:https://blog.csdn.net/xukai871105/article/details/53516857

前言
本文将说明在FreeRTOS嵌入式操作系统中,如何设置STM32 Cortex M3和M4系列MCU的中断优先级。
总结

  • 【1】STM32L1系列,STM32F1系列,STM32F4系列,设置NVIC时需要使用NVIC_PriorityGroup_4。
  • 【2】抢占优先级的要比“MAX”更大,而比“LOWEST”更小。例如 configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY= , configLIBRARY_LOWEST_INTERRUPT_PRIORITY= ,那么NVIC抢占优先级设置的具体值应该比MAX=5更大(包括等于),比LOWEST=15更小(包括等于),也就是说5,6,7,8,9,10,11,12,13,14,15肯定是合法值。
  • 【3】FreeRTOS中,数值越大优先级越高,这种优先级可以成为逻辑优先级。Cortex M3/M4中断中,数值越大优先级越低,这种优先级成为中断优先级。两者相反,所以才会出现比"MAX"更大而比“LOWEST”更小的情况。

示意代码
【FreeRTOSConfig.h】

  1. /* Use the system definition, if there is one */
  2. #ifdef __NVIC_PRIO_BITS
  3. #define configPRIO_BITS __NVIC_PRIO_BITS
  4. #else
  5. #define configPRIO_BITS 4 /* 15 priority levels */
  6. #endif
  7.  
  8. #define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15
  9. #define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5
  10. /* The lowest priority. */
  11. #define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
  12. /* Priority 5, or 95 as only the top four bits are implemented. */
  13. /* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
  14. See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
  15. #define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )

【NVIC设置】
【示例A】

  1. NVIC_InitTypeDef NVIC_InitStructure;
  2. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
  3.  
  4. NVIC_InitStructure.NVIC_IRQChannel = XXXX_IRQn;
  5. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = configLIBRARY_LOWEST_INTERRUPT_PRIORITY;
  6. NVIC_InitStructure.NVIC_IRQChannelSubPriority = ;
  7. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  8. NVIC_Init(&NVIC_InitStructure);

【示例A】

  1. NVIC_InitTypeDef NVIC_InitStructure;
  2. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
  3.  
  4. NVIC_InitStructure.NVIC_IRQChannel = XXXX_IRQn;
  5. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = configLIBRARY_LOWEST_INTERRUPT_PRIORITY-;
  6. NVIC_InitStructure.NVIC_IRQChannelSubPriority = ;
  7. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  8. NVIC_Init(&NVIC_InitStructure);

[FreeRTOS].FreeRTOS CortexM3 M4中断优先级设置总结的更多相关文章

  1. [FreeRTOS]FreeRTOS使用

    转自:https://blog.csdn.net/zhzht19861011/article/details/49819109 FreeRTOS系列第1篇---为什么选择FreeRTOS? FreeR ...

  2. TI CC2541的中断优先级设置.

    实际看到的中断优先级设置是这样的:

  3. Cortex-M3 / M4 Hard Fault Handler (转载)

    转自大伟的,感谢大伟的帮助调试:http://www.cnblogs.com/shangdawei/archive/2013/04/30/3052491.html http://blog.frankv ...

  4. STM32中断编程三步曲教你弄会中断设置以及中断优先级设置

    中断作为stm32中必不可少的一个功能,其重要性是不言而喻的因此把中断学习好是根本. 所以今天就来好好啃一下中断配置的知识,俗话说:磨刀不误砍柴工.问题是什么呢?项目中我用到了一个触摸键盘TTP229 ...

  5. STM8S103之中断优先级设置

    STM8S的中断由中断控制器(ITC)控制.STM8所有IO都支持中断,分为PA~PE 5个组,每组IO对应一个中断服务函数(也就是每组IO只有一个向量).STM8没有专门的中断状态寄存器,所以只能通 ...

  6. In order to use an interrupt in a Cortex-M3/M4, you need the following

    a stack. The core automatically saves several registers on the stack when an interrupt fires. Initia ...

  7. IBM X3650 M4 M5 设置服务器用UEFI模式启动支持磁盘GPT分区

    1 系统启动 2 按 F1 3 进入BIOS 4 进入 System Configuration 5 找到 Boot Manager 6 找到Boot Modes 7 进入Boot Modes, 找到 ...

  8. FreeRTOS 计数信号量

    以下转载自安富莱电子: http://forum.armfly.com/forum.php 本章节开始讲解 FreeRTOS 任务间的同步和资源共享机制,计数信号量. FreeRTOS 中计数信号量的 ...

  9. FreeRTOS 事件标志组

    以下转载自安富莱电子: http://forum.armfly.com/forum.php 为什么要使用事件标志事件标志组是实现多任务同步的有效机制之一.也许有不理解的初学者会问采用事件标志组多麻烦, ...

随机推荐

  1. 【JZOJ100207】【20190705】决心

    题目 你需要构造一个排列 初始时\(p_i=i\),一次操作定义为: 选择一些\((x_i,y_i)\),满足每个数字只能出现一次 依次交换\(p_{x_i},p_{y_i}\) 定义一个排列 \(P ...

  2. js中的自动包装机制

    有一行语句: 1.toString() //error 那么问题来了,为什么报错? 我的第一想法就是1是一个基本类型,所以它没有toString方法 嗯,理直气壮 接下来有大佬show me code ...

  3. Vue实践TS中的一些常见错误解决方案

    mixin报错 import { Component, Prop, Vue ,Mixins} from 'vue-property-decorator' import httpminix from ' ...

  4. libevent笔记3:evbuffer

    evbuffer 之前提到bufferevent结构体提供两个缓存区用来为读写提供缓存,并自动进行IO操作.这两个缓存区是使用Libevent中的evbuffer实现的,同样,Libevent中也提供 ...

  5. 《Linux就该这么学》培训笔记_ch05_用户身份与文件权限

    <Linux就该这么学>培训笔记_ch05_用户身份与文件权限 文章最后会post上书本的笔记照片. 文章主要内容: 用户身份与能力 文件权限与归属 文件的特殊权限 文件的隐藏属性 文件访 ...

  6. Oracle--存储过程中之循环语句

    一般循环语句有两种: 1)使用for循环实现 declare  cursor cur is    select * from tablename;   aw_row  tablename%rowtyp ...

  7. ps 简单使用 ----- 将图片静态图片制作成动图

    1. 准备好你需要静态图片  放到文件夹中 2.打开ps 软件    将右上角切换为   动感 3.观察下方时间轴   点击加号   将图片导入 按住shift  选择图片 4.切换为帧格式 选择循环 ...

  8. xunsearch搜索测试

    1.导入测试数据 cd $prefix/sdk/php util/Indexer.php --source=csv --clean demo 然后出现 初始化数据源 ... csv WARNING: ...

  9. SQL分类之DCL:管理用户、授权

    DCL:管理用户.授权 SQL分类: DDL:操作数据库和表 DML:增删改表中的数据 DQL:查询表中的数据 DCL:管理用户.授权 DBA:数据库管理员 DCL:管理用户.授权 1.管理用户 1. ...

  10. ML学习笔记之LATEX数学公式基本语法

    作者:@houkai本文为作者原创,转载请注明出处:https://www.cnblogs.com/houkai/p/3399646.html 0x00 概述 TEX 是Donald E. Knuth ...