STM32 FreeRTOS系列教程(二)FreeRTOS中断配置和临界段

本文详细介绍了STM32中的Cortex-M4中断和NVIC,并探讨了FreeRTOS如何利用中断分组设置‘免打扰模式’。在FreeRTOS中,中断被配置为抢占优先级,其中高位优先级不受系统关闭影响,低位优先级则可能被禁用。portDISABLE_INTERRUPTS和portENABLE_INTERRUPTS函数用于控制中断的开启和关闭,以确保在处理关键任务时避免不必要的中断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考资料:《正点原子STM32F4 FreeRTOS开发手册_V1.1》《野火FreeRTOS 内核实现与应用开发实战—基于STM32》

Cortex-M中断

Cortex-M4内核提供了一个NVIC,这个NVIC在STM32里面是由四个bit组成的,可以配置成5种不同的中断分组,即不同的抢占优先级和亚优先级,在移植FreeRTOS的时候要求4bit全部设置成抢占优先级

对应CubeMX配置如下
对应CubeMX配置如下

FreeRTOS的中断

其实FreeRTOS本身并没有中断,FreeRTOS的中断是依赖于MCU内核的中断的,在STM32中也就是Cortex-M的中断。

FreeRTOS会利用Cortex-M的中断分组,但是会设置一个“免打扰”模式。在上文中我们提到,如果要是用FreeRTOS的话我们是把中断的4bit全用在了抢占优先级,也就是2^4=16个中断优先级(0~15级)。而“免打扰模式”就是设置高位的几个优先级,这个中断是不会被关闭的,而低位的优先级是会被全部被关闭的
在这里插入图片描述
设置这个打断的就是粉色下划线的部分,图中设置的是5,那么0 ~ 4优先级的是不会被关闭的,而5 ~ 15优先级的中断是可以被FreeRTOS关闭的,即使满足了中断触发条件也是不会触发中断的,所以如果是处理一些不能被普通中断打断的事务的时候,可以选择把中断关闭,然后再处理。

FreeRTOS中这个函数portDISABLE_INTERRUPTSO();是用来关闭中断的 这个函数portENABLE_INTERRUPTSO;是用来开中断的

实验结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值