历史上的今天
返回首页

历史上的今天

今天是:2024年12月03日(星期二)

正在发生

2018年12月03日 | STM32设置中断的步骤

2018-12-03 来源:eefocus

下图概括了STM32F10XXX系列芯片的中断



默认情况下,中断向量表位于Flash等只读存储器内,而且在运行过程中无须修改向量表。中断向量表默认位于存储器的开头(地址0),查阅探索者开发板例程代码也可以发现这一点,在.s启动文件中可以看到:



 对应于stm32f4xx.h中的代码:



这么多中断需要通过NVIC(内嵌向量中断控制器)来管理。 


设置中断总共分三步:


1.设置中断优先级分组。


//类似于划分“阶级成分”


2.设置某中断的中断优先级


//类似于判定具体的“阶级成分”


3.使能NVIC中的该中断


//类似于“宣布判决”


以下内容摘自 https://www.cnblogs.com/121792730applllo/p/5155368.html


形象化的理解是:


你是上帝,造了N个人,这么多人要分社会阶级和社会阶层了。由于“阶级”的词性比较重,"阶层"比较中性,所以preemption优先级->阶级;每个阶级内部,有一些阶层,sub优先级->阶层。


如果按照NVIC_PriorityGroup_4这么分,就分为了16个阶级(1个阶层就是1个preemption优先级),0个阶层;高阶级的人,可以打断低阶级的正在做事的人(嵌套),最多可以完成1个中断和15级嵌套。每个阶级(每个preemption优先级),你来指定这43人中,谁进入该阶级;一个人叫EXTI0_IRQChannel,你指定他进入“阶级8”,则

NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 8; // 指定抢占式优先级别1,可取0-15


另外,在同一阶级内部,一个人在做事的时候,另外一个人不能打断他;(preemption优先级别相同的中断源之间没有嵌套关系)还有,如果他们两个同时想做事,因为没有阶层,那么就根据Vector table中的物理排序,让排名靠前的人去做;又有1个人SPI1_IRQChannel,设定如下

NVIC_InitStructure.NVIC_IRQChannel = SPI1_IRQChannel;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 指定抢占式优先级别1,可取0-15

SPI1_IRQChannel的阶级高,EXTI0_IRQChannel做事的时候可以打断(嵌套)。


如果按照NVIC_PriorityGroup_3这么分,就分为了8个阶级(1个阶级是1个preemption优先级),每个阶级内有2个阶层(sub优先级);高阶级的人,可以打断低阶级的正在做事的人(嵌套),最多可以完成1个中断和7级嵌套。每个阶级(每个preemption优先级),你来指定这43人中,谁进入该阶级;一个人叫EXTI0_IRQChannel,你指定他进入“阶级3”,则:

NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; // 指定抢占式优先级别1,可取0-7


还需要指定他的阶层:

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 指定响应优先级别0,可取0-1


另有1个人叫EXTI9_5_IRQChannel,他的阶级和阶层设定如下

NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; // 指定抢占式优先级别0,可取0-7

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // 指定响应优先级别1


那么这两个人是同一阶级的兄弟,一个人在做事的时候,另外一个人不能打断他;(preemption优先级别相同的中断源之间没有嵌套关系)


如果他们两个同时想做事,因为前者的阶层高,所以前者优先。


还有一个人叫USART1_IRQChannel,他的阶级和阶层设定如下

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; // 指定抢占式优先级别0,可取0-7

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // 指定响应优先级别1


USART1_IRQChannel的优先级最高,当前面两个人做事的时候,他都可以打断(嵌套)。


以下的类推。

推荐阅读

史海拾趣

Advanced Linear Devices公司的发展小趣事

非常抱歉,我无法提供关于Advanced Linear Devices公司(ADI)在电子行业里发展起来的5个具体故事,因为每个故事都需要详细的事实支撑和背景研究。但我可以为你概述ADI公司的发展历程,并给出一些可能的发展故事框架,你可以基于这些框架进一步深入研究,以形成完整的故事。

首先,让我们回顾一下ADI公司的发展历程。ADI成立于1965年,由Ray Stata和他的合伙人共同创立,当时他们只是希望在模拟器件时代掌握自己的命运。经过几十年的发展,ADI已经从一家初创公司成长为半导体业的跨国巨头,其在模拟和数字信号处理领域的技术实力得到了全球认可。

基于这个概述,我可以给出以下几个可能的发展故事框架:

  1. 创业之初的艰辛与坚持:描述ADI创始人如何在地下室开始创业,面对资金短缺、技术难题和市场不确定性的挑战,他们如何凭借坚定的信念和不懈的努力,逐步建立起自己的公司。

  2. 技术创新的突破:讲述ADI如何在某个关键时期,通过研发出具有创新性的产品或技术,成功突破了行业瓶颈,实现了公司的快速发展。这可以涉及具体的技术细节和市场反响。

  3. 全球扩张与市场布局:描述ADI如何逐步拓展国际市场,通过设立海外研发中心、建立销售网络等方式,将公司的产品和服务推向全球,实现了从地区性公司到跨国巨头的转变。

  4. 应对行业变革的挑战:随着电子行业的不断发展,ADI也面临着来自竞争对手、市场变化和技术更新等多方面的挑战。可以讲述ADI如何灵活应对这些变革,通过调整战略、优化产品和提升服务质量等方式,保持了公司的竞争力。

  5. 与中国市场的深入合作:近年来,中国电子行业发展迅速,成为ADI等跨国企业的重要市场。可以讲述ADI如何与中国企业开展合作,共同推动技术创新和市场发展,实现了互利共赢的局面。

请注意,这些只是故事框架,具体的内容需要你根据ADI公司的历史资料、行业报告和新闻报道等进行深入研究和补充。在编写故事时,请确保只描述事实,避免加入个人主观评价或情感色彩。

Aristo-Craft/ L M P Inc公司的发展小趣事

随着公司产品的不断升级和优化,Aristo-Craft/L M P Inc开始积极寻求市场拓展的机会。他们不仅在国内市场建立了稳定的销售渠道,还通过参加国际展会、与海外企业建立合作关系等方式,成功打入国际市场。同时,公司还积极寻求与其他行业领导者的战略合作,共同推动电子行业的发展。

Hokuriku公司的发展小趣事

进入21世纪后,环保和可持续发展成为全球关注的焦点。Hokuriku Electric积极响应这一趋势,将环保理念融入产品研发和生产过程中。公司投入大量资源研发绿色电子产品,减少生产过程中的能源消耗和废弃物排放。同时,Hokuriku Electric还积极参与行业内的环保倡议和合作项目,推动整个电子行业的可持续发展。这一举措不仅赢得了社会各界的广泛赞誉,还为公司带来了更多的商业机会和合作伙伴。

Foxboro I C T Inc公司的发展小趣事

Antelec公司创立于XXXX年,由一群富有远见和热情的电子工程师组成。创立初期,公司专注于研发先进的电子测量与分析技术,成功开发出一种具有高精度和稳定性的测量仪器,填补了市场上的空白。这一技术突破不仅赢得了客户的青睐,也为公司的后续发展奠定了坚实的基础。

Coleman Cable Inc公司的发展小趣事

在发展过程中,Coleman Cable积极寻求与行业内外的合作伙伴建立稳固的合作关系。通过与知名电子制造商建立供应链合作关系,Coleman Cable的电缆产品得以广泛应用于各种电子设备中。同时,公司还与科研机构、高校等建立产学研合作关系,共同研发新技术、新产品,推动公司技术的不断创新和升级。

上海如韵(CONSONANCE)公司的发展小趣事

在国内市场取得一定成绩后,如韵开始将目光投向海外市场。为了拓展国际业务,公司在香港设立了研发中心,以便更好地了解国际市场需求和技术趋势。同时,如韵积极参加国际电子展会和交流活动,与多家国际知名企业建立了合作关系。

经过一段时间的努力,如韵的产品逐渐在海外市场上获得了认可。公司的出口额逐年增长,为如韵带来了更多的发展机遇。海外市场的成功拓展,不仅提升了公司的品牌影响力,也为公司带来了更多的国际合作机会。

问答坊 | AI 解惑

电子琴

1.实验任务 (1).由4X4组成16个按钮矩阵,设计成16个音。 (2).可随意弹奏想要表达的音乐。 2.电路原理图                            &nbs ...…

查看全部问答>

?ARM9200求合作 高薪聘请

   项目工程,寻找合作伙伴,大概情况是这样的:ATmel芯片的ARM9200板子已经做好了,可以正常的启动,程序也可以运行。 现在这个板子的USB口可以识别FAT和FAT32格式的硬盘,不能识别NTFS格式的硬盘。板子的上所有的应用程序是在linux2.6 ...…

查看全部问答>

AD summer 库元件界面中的列名如何设置,怎么只有元件名和footprint呢?

我在列名上右击,选择栏,自己把description和library添加进来了。 当时可以用了 但 为什么关了软件,重新打开,“description和library”列就又没有了,只剩下“元件名和footprint”两列了 好苦恼!…

查看全部问答>

无接触式人体体温计

比赛使用过这个传感器,一直想做好,但是没做,呵呵…

查看全部问答>

【LaunchPad】 MSP430 LaunchPad新手引导贴

最近很多新同学都拿到了团购的开发板,但是很多同学和我一样第一次接触MSP430,拿到板子之后感觉无从下手,但是感谢论坛的各位大大,为我们提供了非常多的资料和教程,所以just follow~~~step1:下载并安装开发环境。MSP430的开发环境有IAR和CCS两 ...…

查看全部问答>

这个函数是怎么写半字节到 LCD 的?

void  DispDataWrOneNibble (CPU_INT08U data){    CPU_INT32U  value;    BSP_LCD_DISP_RW_LO();                             ...…

查看全部问答>

求助关于ATMEGA16的TWI的读写问题,请救各位AVR高手

只测试TWI的写的功能,分别写器件地址,寄存器地址,数据三个数,但是从示波器看只看到器件地址和数据的2个数据,看不到寄存器地址这是为什么呢?????求各位高手解答#include <iom16v.h>#include <macros.h>void I2C_init(){  TWS ...…

查看全部问答>

ALTERA Cyclone V 评估板 电路图 共36张

PDF文件: [ 本帖最后由 dontium 于 2012-12-6 14:42 编辑 ]…

查看全部问答>

【嵌入式】 wince 移植 必杀技

    结束了嵌入式生涯,现在改行了,以前的东西会慢慢被淡忘,真滴好担心,因此每天晚上都抽时间温习下,让自己每天都进步,我把自己的总结贴出来跟大家一起分享:   1.arm上wince的移植概要 需要的仅仅是bsp包,常常由厂家提 ...…

查看全部问答>

看到这个nW级的定时器,我在想是不是用它做唤醒时钟是不是比430内部时钟更低功耗

这应该算是一个传统器件,就是一个定时器(1-64s),大家大可不必觉得诧异。 功耗做到了30nA,感觉我是没法测试的。 下面是基本的参数,温度范围不错,基本接近汽车级 (科普一般的定义:商业级(0~70摄氏度)、工业级(-40~85摄氏度)、汽车 ...…

查看全部问答>