历史上的今天
返回首页

历史上的今天

今天是:2025年12月21日(星期日)

2022年12月21日 | stm32f103中断系统详解学习笔记

2022-12-21 来源:zhihu

  一、NVIC 介绍

  NVIC 英文全称是 Nested Vectored Interrupt Controller,中文意思就是嵌套向量中断控制器,它属于 M3 内核的一个外设,控制着芯片的中断相关功能。由于 ARM 给 NVIC 预留了非常多的功能,但对于使用 M3 内核设计芯片的公司可能就不需要这么多功能,于是就需要在 NVIC 上裁剪。


- STM32中断系统专题讲解 -

ST 公司的 STM32F103 芯片内部中断数量就是 NVIC 裁剪后的结果。上面说到 NVIC 控制着芯片的中断相关功能,那么肯定有很多对应的寄存器,在固件库 core_cm3.h 文件内定义了一个 NVIC 结构体,里面定义了相关寄存器,


  如下:

  1 typedef struct

  2 {

  3 __IO uint32_t ISER[8]; /*!< Offset: 0x000 Interrupt Set Enable Register */

  4 uint32_t RESERVED0[24];

  5 __IO uint32_t ICER[8]; /*!< Offset: 0x080 Interrupt Clear Enable Register */

  6 uint32_t RSERVED1[24];

  7 __IO uint32_t ISPR[8]; /*!< Offset: 0x100 Interrupt Set Pending Register */

  8 uint32_t RESERVED2[24];

  9 __IO uint32_t ICPR[8]; /*!< Offset: 0x180 Interrupt Clear Pending Register */

  10 uint32_t RESERVED3[24];

  11 __IO uint32_t IABR[8]; /*!< Offset: 0x200 Interrupt Active bit Register */

  12 uint32_t RESERVED4[56];

  13 __IO uint8_t IP[240]; /*!< Offset: 0x300 Interrupt Priority Register (8Bit wide) */

  14 uint32_t RESERVED5[644];

  15 __O uint32_t STIR; /*!< Offset: 0xE00 Software Trigger Interrupt Register */

  16 } NVIC_Type;

  在配置中断时,我们通常使用的只有 ISER、 ICER 和 IP 这三个寄存器,ISER 是中断使能寄存器,ICER 是中断清除寄存器,IP 是中断优先级寄存器。


  返回目录

  二、中断配置

  要使用中断我们就需要先配置它,通常都需经过这几步:

  (1)使能外设某个中断,这个具体是由外设相关中断使能位来控制,比如定时器有溢出中断,这个可由定时器的控制寄存器中相应中断使能位来控制。

  (2)设置中断优先级分组,初始化 NVIC_InitTypeDef 结构体,设置抢占优先级和响应优先级,使能中断请求。

  (3)编写中断服务函数

  配置好中断后如果有触发,即会进入中断服务函数,那么中断服务函数也有固定的函数名,可以在 startup_stm32f10x_hd.s 启动文件查看,启动文件提供的只是一个中断服务函数名,具体实现什么功能还需要我们自己编写,可以将中断服务函数放在 stm32f10x_it.c 文件内,也可以放在自己的应用程序中。通常我们把中断函数放在应用程序中。这里提醒一下大家,不要任意修改中断服务函数名,因为启动文件内中断服务函数名已经固定,如果要修改,你还必须在启动文件内把原中断函数修改。


  这里对第二步进行解释:

  NVIC_InitTypeDef 结构体如下:

  1 typedef struct

  2 {

  3 uint8_t NVIC_IRQChannel;

  4 uint8_t NVIC_IRQChannelPreemptionPriority;

  5 uint8_t NVIC_IRQChannelSubPriority;

  6 FunctionalState NVIC_IRQChannelCmd;

  7 } NVIC_InitTypeDef;

  下面我们对 NVIC_InitTypeDef 结构体成员进行一下简单介绍。

  1.NVIC_IRQChannel:中断源的设置,不同的外设中断,中断源不一样,自然名字也不一样,所以名字不能写错,否则不会进入中断。中断源放在stm32f10x.h 文件的 IRQn_Type 结构体内,由于内容太多,这里就不复制所有中断源,只截取一部分,如下:

  1 typedef enum IRQn

  2 {

  3 //Cortex-M3 处理器异常编号

  4 NonMaskableInt_IRQn = -14,

  5 MemoryManagement_IRQn = -12,

  6 BusFault_IRQn = -11,

  7 UsageFault_IRQn = -10,

  8 SVCall_IRQn = -5,

  9 DebugMonitor_IRQn = -4,

  10 PendSV_IRQn = -2

  11 。。。。。

  12 }IRQn_Type;

  2.NVIC_IRQChannelPreemptionPriority:抢占优先级,具体的值要根据优先级分组来确定,可以参考前面中断优先级分组内容。

  3.NVIC_IRQChannelSubPriority:响应优先级,具体的值要根据优先级分组来确定,可以参考前面中断优先级分组内容。

  4.NVIC_IRQChannelCmd:中断使能/失能设置,使能配置为 ENABLE,失能配置为 DISABLE。


推荐阅读

史海拾趣

Comax Industrial Co Ltd公司的发展小趣事

为了不断提升自身的技术创新能力,Comax Industrial Co Ltd公司积极与高校、科研机构等开展产学研合作。通过与这些机构的紧密合作,公司不仅获得了前沿的技术支持,还培养了一批高素质的技术人才。这种合作模式使得公司的技术创新能力得到了显著提升,为公司的长期发展提供了有力的支撑。

Alps Alpine Co Ltd公司的发展小趣事

为了不断提升自身的技术创新能力,Comax Industrial Co Ltd公司积极与高校、科研机构等开展产学研合作。通过与这些机构的紧密合作,公司不仅获得了前沿的技术支持,还培养了一批高素质的技术人才。这种合作模式使得公司的技术创新能力得到了显著提升,为公司的长期发展提供了有力的支撑。

American Electric公司的发展小趣事

American Electric公司成立于XXXX年,起初只是一个小型电力供应商,为当地提供电力服务。然而,凭借着对电力行业的深刻理解和对市场需求的敏锐洞察,公司创始人决定扩大业务范围,逐步涉足发电、输电和配电等多个领域。通过不懈的努力和创新,American Electric公司逐渐在电力行业中崭露头角,成为一家备受瞩目的企业。

Highland Electronics Co Ltd公司的发展小趣事

在追求技术创新和商业成功的同时,High Tech Chips Inc还积极践行环保和可持续发展理念。公司致力于开发绿色、低碳的芯片产品和技术解决方案,减少生产过程中的能源消耗和环境污染。同时,公司还积极参与社会公益活动,支持教育、环保等领域的项目发展。这些举措不仅提升了公司的社会形象和品牌价值,也为公司的长远发展注入了新的动力。

请注意,以上故事均为虚构内容,旨在展示电子行业高科技芯片公司可能的发展路径和策略。在实际情况中,不同公司的发展故事会因其独特的背景、资源和市场环境而有所不同。

HOPERF公司的发展小趣事

在无线射频和传感器领域,HOPERF始终保持着技术创新的领先地位。公司独创的“NextGenRF”算法专利技术,填补了国内在该领域的空白,并获得了多项企业认证、发明专项和软件著作权。这些技术创新不仅推动了公司产品性能的持续提升,还引领了整个行业的发展方向。此外,HOPERF还积极参与国际标准制定,不断提升自身在全球行业中的话语权和影响力。

Daco Semiconductor Co Ltd公司的发展小趣事

Daco Semiconductor在成立之初就专注于半导体技术的研发与创新。公司由一群对半导体行业充满热情的工程师创立,他们致力于开发更高效、更稳定的半导体产品。一次偶然的实验中,Daco的研发团队发现了一种新型的材料组合,这种材料组合能够显著提高半导体的性能和稳定性。这一技术突破成为了Daco的核心竞争力,也为其在竞争激烈的半导体市场中打开了新的局面。

问答坊 | AI 解惑

印制电路工艺制程

印制电路工艺制程…

查看全部问答>

视频监控系统智能化如何在金融行业的应用

银行营业网点众多,遍布城乡的各个角落。而各个网点、自助银行ATM机的使用环境各不相同,安全防范系统必须克服这些环境因素的影响。这使得金融系统对产品的需求,相对于其它行业要高得多。例如,银行营业网点内部的场景监控,要选用高信噪比的摄像 ...…

查看全部问答>

批处理问题

我想请问下,我想要实现批处理开机就运行某指令,要怎么在内核里添加啊。。哪位帮帮忙!谢了…

查看全部问答>

wince内核调用API函数出问题

在kernel里面调用API函数都会出现连接错误,请问高手如何解决? hal.lib(cfw.obj) : error LNK2019: unresolved external symbol MapViewOfFile referenced in function OEMInit hal.lib(cfw.obj) : error LNK2019: unresolved external symbol Cr ...…

查看全部问答>

求PDA无线点餐设计 现金酬谢!!!

客户要求在我们现有的餐饮管理系统上,增加PDA无线点餐功能,请高手帮助,现金酬谢!!! 要求:读取指定的表的内容,点单成功写到指定数据表中 数据库:SQLSERVER 联系方式: yuan_zhzh@163.com QQ:2346855117…

查看全部问答>

华为公司北京研究所目前正在进行社会招聘

华为公司北京研究所目前正在进行社会招聘,主要从事数通产品的开发工作,要求如下: 1、必须是06年07月之前毕业的,有工作经验,如果是考研没考上也可以; 2、开发工具是C语言; 3、最好有一定的操作系统和TCP/IP基础。 有意向的请把简历发到我 ...…

查看全部问答>

全新 C2000™ F2833x 教学 ROM 现已推出

全新 C2000™ F2833x 教学 ROM 现已推出 全新 C2000 F2833x 教学 ROM 是一款综合指南,旨在向新用户介绍关于 C2000 与 F2833x 器件的全部知识。该教学 ROM 的内容结构类似于本科生教材,针对自学和辅导教学进行了精心设计。     ...…

查看全部问答>

STM32ISP-IAP及延长STM32寿命

东西很多,不直接贴,博客里去下 http://blog.eeworld.com.cn/user1/5817/archives/2009/63307.html…

查看全部问答>

关于can通信部分

用两块开发板下的can程序,之间能通信,现在我拿了另外自己设计的一块板,这块板只要收到can发送的信号就会有反应,那么原来的开发板只是发送CAN信号就可以,那么我除了修改发送的ID号以外,还应该修改什么吗,有什么需要注意的吗?谢谢啦…

查看全部问答>