一、FreeRTOS中断设置介绍
关键字:STM32 FreeRTOS 中断设置
引用地址:基于STM32应用的FreeRTOS中断设置
FreeRTOSConfig.h中定义了两个宏,分别是:
- configKERNEL_INTERRUPT_PRIORITY
- configMAX_SYSCALL_INTERRUPT_PRIORITY
- configKERNEL_INTERRUPT_PRIORITY用来设置RTOS内核自己的中断优先级。因为RTOS内核中断不允许抢占用户使用的中断,因此这个宏一般定义为硬件最低优先级。
- configMAX_SYSCALL_INTERRUPT_PRIORITY用来设置可以在中断服务程序中安全调用FreeRTOS API函数的最高中断优先级。优先级小于等于这个宏所代表的优先级时,程序可以在中断服务程序中安全的调用FreeRTOS API函数;如果优先级大于这个宏所代表的优先级,表示FreeRTOS无法禁止这个中断,在这个中断服务程序中绝不可以调用任何API函数。
也就是说RTOS中断嵌套方案将可用的中断优先级分成2组:会被RTOS临界区覆盖的和永远不会被覆盖的所以这些是一直被使能的。configMAX_SYSCALL_INTERRUPT_PRIORITY设置值是这两组的边界值。
如上图所示,在STM32中使用FreeRTOS时,系统默认:
//This is the raw value as per the Cortex-M3 NVIC. Values can be 255
(lowest) to 0 (1?) (highest).
#define configKERNEL_INTERRUPT_PRIORITY 255(0xFF也即是优先级15)
//!!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html.
#define configMAX_SYSCALL_INTERRUPT_PRIORITY 191 (0xBF也即优先级11)
故在中断优先级为0~10的中断,均不会被内核延迟,并且可嵌套但不能调用API函数。在11~15之间的中断可以调用以FromISR结尾的API函数。
上一篇:实现stm32在FSK调制解调器的综合设计
下一篇:基于STM32的无人机陀螺仪应用详解
推荐阅读最新更新时间:2024-03-16 15:07
STM32系列第6篇--NVIC中断优先级分组
STM32F103系列上面,又只有60个可屏蔽中断(在107系列才有68个) 中断管理方法: 首先,对STM32中断进行分组,组0~4。同时,对每个中断设置一个抢占优先级和一个响应优先级值。 分组配置是在寄存器SCB- AIRCR中配置: 高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。 抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断。 抢占优先级相同的中断,当两个中断同时发生的情况下,哪个响应优先级高,哪个先执行。 如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行。 中断设置相关寄存器 __IO uint8_t IP ; //中断优先级控制的寄存器组 __
[单片机]
stm32之SPI通信协议实例详解
之前一直对SPI通信一知半解,所以想抽空把它搞得明白一些。考虑到之前是结合Flash芯片来学的,十分不直观,而且主要把时间和精力都花在Flash芯片的datasheet和驱动上了,SPI通信也没学好。所以这次就考虑用4位数码管显示模块,模块是直接买的现成的,这样可以简化操作,把精力聚焦到学习的核心–SPI通信本身上来。 本次采用的模块是用2片74HC595串联驱动的,一片用来控制数码管的位选(U1),一片用来控制数码管的段选(U2)。 接口比较简单,总共5个引脚,2个引脚分别接VCC和GND,DIO用来接收串行数据的输入,SCLK用来接收同步时钟,每个SCLK上升沿74HC595内部的移位寄存器会移一位,RCLK用
[单片机]
STM32串口寄存器库函数配置方法
1、参考资料 《STM32F1开发指南-库函数版本》- 5.3 usart串口文件夹介绍 -第9章 串口实验 《STM32中文参考手册V10》-第25章通用同步异步收发器(USART) 2、串口通信基本原理 ·常用的串口相关寄存器 ·USART_SR状态寄存器 ·USART_DR数据寄存器 ·USART_BRR波特率寄存器 ·串口操作相关寄存器(省略入口参数): void USART_Init(); //串口初始化:波特率,数据字长,奇偶校验,硬件流控以及收发使能 void USA
[单片机]
STM32查看系统时钟
调用库函数RCC_GetClocksFreq,该函数可以返回片上的各种时钟的频率 函数原形 void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks) RCC_ClocksTypeDef定义于文件 stm32f10x_rcc.h : typedef struct { uint32_t SYSCLK_Frequency; /*! SYSCLK clock frequency expressed in Hz */ uint32_t HCLK_Frequency; /*! HCLK clock frequency expressed in Hz */ uint32_t PC
[单片机]
STM32 USB CDC 驱动问题
问题: STM32的 USB CDC 工程使用STM32Cube 生成,编译下载后,插上USB发现如下图问题: 在设备管理器显示黄色感叹号,驱动不正常。 原因: 由于SMT32 USB 部分的代码用到了 malloc 和 free 这种标准库(#include 解决: 将STM32 工程中的startup_stm32fxxxxx.s 启动文件里的 Heap_Size 改大点,我这里设置Heap_Size为 0x400后,USB工作正常,收发数据OK。 这时PC设备管理器中的 USB CDC设备已经枚举成功,如下图: 建议: 在单片机这种不带MMU的平台上编程时,尽量少用 标准库
[单片机]
STM32学习笔记--按键输入实验
//按键初始化函数 //特别注意:在该函数之后,JTAG将无法使用(SWD也无法使用) //如果想JTAG仿真,可以屏蔽该函数。 //PA0.13.15 设置成输入 void KEY_Init(void) { RCC- APB2ENR|=1 2; //使能PORTA时钟 GPIOA- CRL&=0XFFFFFFF0;//PA0设置成输入 GPIOA- CRL|=0X00000008; GPIOA- CRH&=0X0F0FFFFF;//PA13,15设置成输入 GPIOA- CRH|=0X80800000; GPIOA- ODR|=1 13; //PA13上拉,PA0默认下拉 GPIOA- ODR|=1 15; //
[单片机]
STM32-(30):内部温度传感器
温度传感器 STM32有一个内部的温度传感器,可以用来测量CPU及周围的温度(TA)。 该温度传感器在内部和ADCx_IN16输入通道相连接,此通道把传感器输出的电压转换成数字值。温度传感器模拟输入推荐采样时间是17.1 u s。STM32的内部温度传感器支持的温度范围为: -40~125度。精度比较差,为±1.5°C左右。 注:V25在 25℃时的值为1.43V,斜率为0.0043
[单片机]
在单片机上实现动态加载功能
本项目是一个在单片机(如:STM32)上实现动态加载功能的函数库,与Windows中的dll,Linux中的so类似,可以将代码动态地从其他的存储介质,动态加载到RAM中。 软件架构 本项目文件夹有三个,其中common存储了用于生成可重定位的.axf文件的工程与动态加载器工程交互用的函数,src提供动态加载器的源码,rel_axf_project_template提供了一个简单的可重定位的.axf文件的工程示例,example.c是一个简单的使用示例,所有文件的主要功能如下: /common/dl_extern_lib.h 描述了app程序用于调用host程序的函数向量表的基地址,以及相关的一些宏定义 /common/dl_
[单片机]
小广播
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐
最新单片机文章
更多精选电路图
更多热门文章
更多每日新闻
- PC产业驶入创新超车道,英特尔蓉城撬动AI新引擎
- 与产业聚力共赢,英特尔举行新质生产力技术生态大会
- “新”享5G-A万兆网络前沿体验 高通携手产业伙伴亮相第二届链博会
- 英飞凌推出符合ASIL-D标准的新型汽车制动系统和电动助力转向系统三相栅极驱动器 IC
- 南芯科技推出80V升降压转换器,持续深耕工业储能市场
- 法雷奥与罗姆联合开发新一代功率电子领域
- 贸泽电子开售能为电动汽车牵引逆变器提供可扩展性能的 英飞凌HybridPACK Drive G2模块
- 德州仪器新型 MCU 可实现边缘 AI 和先进的实时控制, 提高系统效率、安全性和可持续性
- 瑞萨推出高性能四核应用处理器, 增强工业以太网与多轴电机控制解决方案阵容
- 研华全新模块化电脑SOM-6833助力5G路测设备升级
更多往期活动
厂商技术中心