历史上的今天

今天是:2024年10月08日(星期二)

正在发生

2019年10月08日 | STM32中断及FreeRTOS中断优先级配置知识

发布者:BlissfulHiker 来源: eefocus关键字:STM32  中断  FreeRTOS  中断优先级  配置 手机看文章 扫描二维码
随时随地手机看文章

很多朋友对中断的一些知识还是不了解,今天就写点关于Cortex-M3处理器中断相关,以及FreeRTOS中断优先级配置的内容。


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

640?wx_fmt=png

640?wx_fmt=png


2.中断和异常区别

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


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


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


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


所以:

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


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


3.优先级

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


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


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

640?wx_fmt=png

提示:

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


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

640?wx_fmt=png

而有的内核就没有,如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

640?wx_fmt=png


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


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


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

640?wx_fmt=png

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


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


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

640?wx_fmt=png


关键字:STM32  中断  FreeRTOS  中断优先级  配置 引用地址:STM32中断及FreeRTOS中断优先级配置知识

上一篇:stm32f407 adc的dma中断方式
下一篇:STM32F4+FreeRTOS+FreeRTosTcpIp移植教程

推荐阅读

三星首款QLED 8K量子点电视售价已经公布,85英寸版本价格为14999.99美元,约合人民币10.3万。三星首款QLED 8K量子点电视型号为q900,已在今年8月份发布,该产品的显示屏采用全阵列背光源,搭载了Bixby语音和SmartThings智能家居系统。这款产品还搭载了8K AIUpscaling技术,可以通过AI开发的智能升级,将分辨率低于8K内容转换为8K,以改善细节和锐化清晰...
三星电子副会长李在镕今年二度出差印度,考察当地事业现况,并和当地企业人士进行会晤。 据韩媒《newsis》报道,李在镕于6日下午抵达印度孟买,听取当地法人、相关人士的移动事业报告。另一方面,也深入了解印度的关税政策,近期印度政府为吸引外企投资,废除电视核心零件的关税。 该报道也指出,李在镕计划与国际企业信实工业总裁穆克什·安巴尼进行会晤...
NVIDIA发布重磅应用、系统以及与宝马集团合作 NVIDIA提出了下一代计算的愿景,该愿景将全球信息经济的重心从服务器转移到了新型的强大且灵活的数据。 NVIDIA创始人兼首席执行官在其加州住宅的厨房中录制的六集同时发布的主题演讲中,介绍了NVIDIA最近对Mellanox的收购,还有重盼所归的基于NVIDIA Ampere 架构的新产品以及重要的最新软件技术。 这场...
广告摘要声明广告【文/伍不易】近日,软银集团CEO 孙正义在公开场合表示,在Pepper之后将推出新一代功能更强大的智能机器人Smabo(Smabo,smart和robot两个单词的合并缩写),他指出,这个机器人是软银的愿景基金与18家公司合作开发的人工智能机器,其能力将远远超出只会跳舞和开门的Pepper。孙正义在当天的主题演讲中还展示了人形机器人奔跑和跳跃,以及...

史海拾趣

问答坊 | AI 解惑

这几天系统短消息有问题

这几天系统自动发的短消息有问题,打不开,不知道是什么原因,望管理员更正。…

查看全部问答∨

关于FLASH的分盘的问题

请问 1 在哪里设置并修改FLASH的盘符 2 我有一个UI程序。放在MLC中,但是我不想可见,应该怎么做。 3 如何设置应用程序让其开机后自动运行?…

查看全部问答∨

大家帮我看看我的HIVE 注册表哪里有设置不对,调用注册表编辑器修改键值后不能永久保存!

FAT文件系统加载成功,能看到NAND FLASH盘符(FriendlyARM),但是调用注册表编辑器修改的注册表信息,系统重启后就没了。看网上都是说,启动要用的以及文件系统放到BOOT.hv里面,其它的存于SYSTEM.HV中就可以的。而且我WINCE中的HIVE组件也加了的 ...…

查看全部问答∨

求助:背景图片挡住了文字

大家好,我使用函数ExtTextOut 输出文字,但是由于我的程序有一个全屏的背景图,所以加载图片后文字被遮挡住了。 我大概知道可能是透明、背景色之类的问题,但是改了参数效果依然不对,麻烦大家给指点下,最好能有个例子详细些,多谢啦…

查看全部问答∨

SQLCE数据库

我想问一下,Windows CE设备上的SQLCE数据库 与 Windows XP桌面系统下的 Sql Sever 2000数据库实现数据互相访问。 我查了一下,Windows CE设备上可以有SQL Sever客户端代理,然后Windows XP上是SQL Sever服务器代理。通过他们来实现两个数据库之间 ...…

查看全部问答∨

WINCE6.0 中断处理OEMInterruptHandler--KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR,...)

最近在看WINCE中断处理,有一事不明,希望大家讨论一下: 问题1:当物理中断发生后首先会被调用的函数是不是OEMInterruptHandler? 问题2:OEMInterruptHandler函数作用是根据物理中断号(IRQ)返回对应的系统中断号(SYSINTR_XXX),既然这个函数 ...…

查看全部问答∨

lan91c96网卡芯片ID(4#)读不对,总是0

我的平台式wince5.0+pxa270,在初始化网卡芯片过程中,读完0x3300的标志后,读ID#,结果每次读不对,大部分时候是0,有时候是其他的错误如15等。都不知道什么原因,网卡相关管脚配置应该都是对的,有谁遇到过吗…

查看全部问答∨

ADS1.2 调用strtoul(str,NULL,0,NULL),地址0的内容会被更改

strtoul的定义: unsigned long strtoul(const char *str, char **endptr, int requestedbase, int *ret) 可见ADS1.2会把NULL指针指向地址0,但是地址0放着复位向量,怎么样才能不改变0地址的内容呢?(当然在调用的时候可以不用NULL,而定义一个 ...…

查看全部问答∨

WINCE 使用USB HUB的问题

2440开发板,WINCE5.0系统, 启动系统后插入优盘或USB HUB 或鼠标都可以正常识别,当先插入优盘或USB HUB 再通电启动系统也可以识别,问题是先插入USB HUB再通电启动系统后,USB HUB无法识别,必需要再插拔一下才行,请问 怎么解决这个问题!…

查看全部问答∨

MPLAB ICD2無法工作,請教

我用MPLAB V7.52 連接ICD2時,報錯,錯誤代碼是 Connecting to MPLAB ICD 2 ...Connected ICD0133: Firmware does not support command (0x7). ICD0082: Failed MPLAB ICD 2 operation MPLAB ICD 2 Ready 請問該怎麼弄,上一次用還是好好的呀 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved