1、NIVC
ARM Cortex-M3 内核搭载了一个强大而方便的中断系统,称之为 NVIC(嵌套向量中断控制器)。
Cortex-M3 支持 256 个“中断通道”(16 个异常+240 个中断)以及对应的可编程 256 级中断优先级设置。
STM32 虽然采用 Cortex-M3 内核,但是只使用了其中的 84 个“中断通道”(16 个异常+68 个中断)以及 16 级中断优先级设置。
同时也记录下自己当时的一个插曲。
这个TIM6_IRQn在《STM32固件库手册》中查NVIC_IRQChannel的取值是没有的,然后咨询下老师,如下回复
再拐回头看下教程,着实一不一样
看来要不看最新的手册,要不就是直接参考头文件才行!
2、优先级及中断嵌套
优先级分为抢占优先级和响应优先级。
51所设置的优先级均属于抢占优先级,默认的便是响应优先级!
高抢占优先级可以嵌套低抢占优先级的中断。
两者抢占优先级相同,那么无论响应优先级是什么关系,这两者都没有嵌套关系。
当然不得不考虑以下极端情况:
若两个中断发生,抢占优先级相同,响应优先级不同,则根据响应优先级顺序执行(谁小谁先执行);
若两个中断发生,抢占优先级相同,响应优先级也相同,则根据中断清单表排位顺序执行(谁小谁先执行);
编程时需要注意:
首先要预先对程序的各个功能模块进行计算论证,开机初始化时一次性设置好优先级分组,以后就再也不动他了,避免同一个程序中使用多个优先级分组。
默认情况下,如何不设置中断优先级分组,则使用系统默认的优先级,即按照中断源清单的顺序执行。(没有抢占的概念,两者同时到来,谁的号小谁先执行!)。
具体的中断源清单可参考《STM32中文参考手册》9.1.2。
3、优先级分组
CM3内核中定义了8bit用于设置中断源的优先级,STM32F103只用到了其中的4个位,这4个位又被抢占优先级和响应优先级共同使用。而抢占优先级和响应优先级的级数是可以设置的,共分为5组,如下表所示。
怎么理解这五组呢?
这里我用**“阶级”和“阶层”**的概念进行类比抢占优先级和响应优先级。
阶级是大的分类,阶层是阶级里面的分类。
从这个概念上再来看,就不难理解了。
假如此时设置优先级分组为NVIC_PriorityGroup_4,也就是说分成了16个阶级和0个阶层!高阶级的人可以打断低阶级正在做事的人(中断嵌套),而同一阶级内不能相互打断(这个例子没有阶层,一会有具体例子)对于这个分组而言可以完成1个中断和15级嵌套。
言语的描述可能还是会有点抽象,我们来看具体的例子。优先级分组为NVIC_PriorityGroup_4,假如一个人叫TIM2_IRQn我们设置它的阶级为0(即抢占优先级为0,0~15个等级可选择),另一个人叫TIM3_IRQn我们设置它的优先级为1。按照前面所述高优先级可以打断低优先级,所以TIM2可打断TIM3!这便是嵌套的概念。
当然上面NVIC_PriorityGroup_4的例子,只是涉及了抢占优先级,并没有响应优先级,现在我们来看看加入优先级分组设置为NVIC_PriorityGroup_3会怎么样呢?按照前述的套路来分析分成了8个阶级和2个阶层!也就是说总共8个阶级,每个阶级又分两级称为阶层。还是举例来说吧,优先级分组设置为,此时有一个人叫TIM2_IRQn,我们设置它的阶级为0(抢占优先级为0,可选0~7),阶层为0(响应优先级为0,可选0-1)。还有另外一个人叫TIM3_IRQn,我们设置它的阶级为0,阶层为1。第三个人叫TIM4_IRQn,阶级为1,阶层为0。
现有如下场景:TIM3_IRQn已经发生了,然后TIM2_IRQn发生了,两者阶级一样,阶层不一样,此时抢占优先级相同,不发生嵌套,等TIM3_IRQn执行完方可再执行TIM2_IRQn。
若TIM4_IRQn发生了,然后TIM2_IRQn发生了。两者阶级不同,阶层相同,即抢占优先级不同,且TIM2_IRQn序号小,此时将打断TIM4_IRQn执行,待执行完TIM2_IRQn再回来执行TIM4_IRQn。
其他三个分析也是一样的道理。。。
emmmm,可能用阶级和阶层的概念还是不太好理解,其实生活处处是例子,也可以类比我们火车站窗口买票,有普通,军人,学生窗口 - 等同与阶级(抢占优先级),而每个窗口排队顺序 - 等同阶层(响应优先级)。
大概就是这样吧,累、、、
最后再加一段配置NVIC的代码:TIM2分组为NVIC_PriorityGroup_3,阶级为0,阶层为1。
...
NVIC_InitTypeDef NVIC_initstructure;
NVIC_initstructure.NVIC_IRQChannel = TIM2_IRQn; //选择TIM2中断通道
NVIC_initstructure.NVIC_IRQChannelCmd = ENABLE; //使能中断通道
NVIC_initstructure.NVIC_IRQChannelPreemptionPriority = 0; //设定抢占优先级为0
NVIC_initstructure.NVIC_IRQChannelSubPriority = 1; //设定响应优先级为1
NVIC_Init(&NVIC_initstructure);
...
小结
①、系统运行开始的时候设置中断分组。
确定组号,也就是确定抢占优先级和子优先级的分配位数。调用函数为 NVIC_PriorityGroupConfig();
②. 设置所用到的中断的中断优先级别。
对每个中断调用函数为 NVIC_Init();
上一篇:FlyMCU下载hex到STM32
下一篇:STM32外设资源查询方法,对比C8T6和ZET6
推荐阅读
史海拾趣
A/D Electronics Inc在创立初期,以其卓越的技术研发团队在模拟到数字转换器(ADC)领域取得了重大突破。公司研发出一款高精度、低噪声的ADC芯片,这一创新产品迅速在市场中获得认可,为公司的初步发展奠定了坚实基础。随着技术的不断迭代,A/D Electronics Inc陆续推出了一系列高性能的电子产品,满足了市场对于高效、稳定电子元件的日益增长需求。
Apx-Crystal公司起初是一家专注于研发新型晶体振荡器的小型科技公司。在创始人的领导下,团队通过不懈的努力,成功研发出了一款具有高稳定性和长寿命的晶体振荡器,这一技术突破在行业内引起了广泛关注。随着产品性能的不断提升和成本的有效控制,Apx-Crystal开始赢得越来越多客户的青睐,市场份额逐年攀升。公司逐渐扩大生产规模,并在多个国家和地区设立了销售和服务网络,实现了从初创企业到国际知名电子元件供应商的华丽转身。
在快速发展的同时,Apx-Crystal公司始终坚持创新驱动的发展理念。公司投入大量资金用于研发创新和技术升级,不断推出具有市场竞争力的新产品。同时,公司还注重品牌建设和市场推广,通过参加行业展会、举办技术研讨会、开展线上线下营销活动等方式,提升品牌知名度和影响力。这些举措使得Apx-Crystal在行业内树立了良好的品牌形象,成为电子元件领域的佼佼者。
为了更好地推动快充技术的发展和应用,联智加入了终端快充行业协会。作为该协会的成员,联智积极贡献自身在快充协议、电源管理无线充电芯片和方案研发方面的经验和技术,与协会其他成员共同推动充电技术的标准化、产业化应用和推广。这一举措不仅有助于提升联智在快充行业的知名度和影响力,还将促进整个行业的健康发展。
为了更好地推动快充技术的发展和应用,联智加入了终端快充行业协会。作为该协会的成员,联智积极贡献自身在快充协议、电源管理无线充电芯片和方案研发方面的经验和技术,与协会其他成员共同推动充电技术的标准化、产业化应用和推广。这一举措不仅有助于提升联智在快充行业的知名度和影响力,还将促进整个行业的健康发展。
佰宏公司始终坚持开放合作的理念,与多家知名企业建立了战略合作伙伴关系。例如,与立讯精密、奋达科技等实力企业的合作,不仅为佰宏带来了更多的业务机会,也进一步提升了公司的品牌影响力和市场地位。这些合作不仅带来了经济效益,更为佰宏的长远发展奠定了坚实的基础。
一、设计思路: 1、冬天使用地暖的时候,总是不能有效的控制室内的温度,而且需要自己用手调节暖气的流通。这样使用很不方便,也不会很有效的节约能源; 2、使 ...… 查看全部问答∨ |
各位前辈,小的有所不明,恳请指教... 请问要如何实现智能小车旋转固定的角度,比如左转90度等等。我的小车用的是两个减速直流电机,要如何实现比较切实可行,请说具体一点。 … 查看全部问答∨ |
有个很奇怪的事情,我的平台下,mux07_10.dll死活不加载。后来我做了一个最简单空驱动,比方叫kmt驱动,生成kmt.dll,是可以加载的,但我把Kmt.dll修改成MUX.DLL,MUX07_10.DLL, MUX0710.DLL,死活就不加载。完全一模一样的代码,只修改source、def ...… 查看全部问答∨ |
我用linux做客户端,win做服务器,TCP/IP协议。 连接1个客户时可以通讯,当连接上第2个客户时,第一个客户就不能通讯,而第2个可以,是什么问题呀? 好像服务器端没问题,用同是win的客户端就可以。 客户端如下: #include <stdio.h>&n ...… 查看全部问答∨ |
S3C2410+linux2.4下GPRS拨号能通,却PING不到外网,何解? S3C2410+linux2.4,使用PPPD和CHAT实现GPRS拨号,手机卡是动感地带的,接入点选了CMNET PPP0的IP都已经成功分配了,为何还PING不通,默认路由也加了(route add default ppp0),何解? # ifconfig ppp0 Link encap:Point-Point Protocol inet ...… 查看全部问答∨ |
|
各位大虾,请教个问题。lm3s6911不使用冬眠模块,这时32.768晶振也就是XOSC管脚和后背电池引脚(VBAT)直接悬空可以不?会有啥不良后果吗? 谢谢!… 查看全部问答∨ |
Beaglebone外围电路设计之Android4.0.3 ICS的移植 起初打算使用QT来做界面,但是随着NOKIA的衰落,QT的前景也变得暗淡,关于这方面的资料也不多。 Android不仅界面华丽,而且它的功能库包含了众多开源产品,包括WebKit,OpenCore,SQlite等。 Opencore除了能解析一般的本地多媒体文件外,还提供了 ...… 查看全部问答∨ |