历史上的今天
返回首页

历史上的今天

今天是:2024年12月14日(星期六)

2021年12月14日 | STM32中断NVIC的概念及中断编程步骤

2021-12-14 来源:eefocus

前言

STM32中断非常强大,每个外设都可以产生中断


提示:以下是本篇文章正文内容


一、NVIC 简介

NVIC 是嵌套向量中断控制器,控制着整个芯片中断相关的功能,它跟内核紧密耦合,是内核里面的一个外设。


1.NVIC 寄存器简介

NVIC 结构体定义,来自固件库头文件:core_cm3.h

在配置中断的时候我们一般只用 ISER、ICER 和 IP 这三个寄存器,ISER 用来使能中断,ICER 用来失能中断,IP 用来设置中断优先级。

在这里插入图片描述

2.NVIC 中断配置固件库

固件库文件 core_cm3.h 的最后,还提供了 NVIC 的一些函数,这些函数遵循 CMSIS 规则

在这里插入图片描述

二、 优先级的定义

1.优先级定义

在 NVIC 有一个专门的寄存器:中断优先级寄存器 NVIC_IPRx,用来配置外部中断的优先级,IPR 宽度为 8bit,原则上每个外部中断可配置的优先级为 0~255,数值越小,优先级越高。


2. 优先级分组

优先级的分组由内核外设 SCB 的应用程序中断及复位控制寄存器 AIRCR 的PRIGROUP[10:8]位决定,F103 分为了 5 组,具体如下:主优先级=抢占优先级

在这里插入图片描述
在这里插入图片描述

三、中断编程步骤

1.使能外设某个中断

具体由每个外设的相关中断使能位控制。


2.初始化 NVIC_InitTypeDef 结构体

1 typedef struct {

2 uint8_t NVIC_IRQChannel; // 中断源

3 uint8_t NVIC_IRQChannelPreemptionPriority; // 抢占优先级

4 uint8_t NVIC_IRQChannelSubPriority; // 子优先级

5 FunctionalState NVIC_IRQChannelCmd; // 中断使能或者失能

6 } NVIC_InitTypeDef;


1)NVIC_IROChannel:用来设置中断源,不同的中断中断源不一样,且不可写错,即使写错了程序也不会报错,只会导致不响应中断。具体的成员配置可参考 stm32f10x.h 头文件里面的 IRQn_Type 结构体定义,这个结构体包含了所有的中断源。

2)NVIC_IRQChannelPreemptionPriority:抢占优先级,具体的值要根据优先级分组来确定,具体参考表格 17-5 优先级分组真值表 。

3)NVIC_IRQChannelSubPriority:子优先级,具体的值要根据优先级分组来确定,具体参考表格 17-5 优先级分组真值表 。

4)NVIC_IRQChannelCmd:中断使能(ENABLE)或者失能(DISABLE)。操作的是 NVIC_ISER 和 NVIC_ICER 这两个寄存器。


3.编写中断服务函数

在启动文件 startup_stm32f10x_hd.s 中我们预先为每个中断都写了一个中断服务函数,只是这些中断函数都是为空,为的只是初始化中断向量表。实际的中断服务函数都需要我们重新编写,为了方便管理我们把中断服务函数统一写在 stm32f10x_it.c 这个库文件中。

推荐阅读

史海拾趣

Advance Tapes公司的发展小趣事

Advance Tapes公司创立于1963年,当时电子工业正处于起步阶段,胶带作为电子元器件生产中的重要辅助材料,市场需求日益增长。然而,初创的Advance Tapes面临着资金短缺、技术落后和市场竞争激烈等挑战。公司创始人凭借对电子行业的敏锐洞察力和对胶带技术的深入研究,带领团队不断研发新产品,提高产品质量,逐渐在市场中站稳脚跟。

Anderson Power公司的发展小趣事

随着环保意识的日益增强,电子行业对环保材料的需求也越来越大。Advance Tapes公司积极响应国家环保政策,致力于研发环保型胶带产品。通过采用环保材料和生产工艺,减少了对环境的污染和资源的浪费。同时,公司还加强了对废弃胶带产品的回收和处理工作,实现了资源的循环利用。这些举措不仅提升了Advance Tapes的企业形象,也为公司的可持续发展奠定了坚实基础。

以上是基于已知信息构建的关于Advance Tapes在电子行业中可能的发展故事。然而,这些故事并非真实的历史记录,仅用于展示该公司可能的发展路径和面临的挑战。如需了解更多关于Advance Tapes公司的真实发展历程和故事,建议查阅相关文献资料或访问公司官网。

Amphenol(安费诺)公司的发展小趣事

Advance Tapes公司创立于1963年,当时电子工业正处于起步阶段,胶带作为电子元器件生产中的重要辅助材料,市场需求日益增长。然而,初创的Advance Tapes面临着资金短缺、技术落后和市场竞争激烈等挑战。公司创始人凭借对电子行业的敏锐洞察力和对胶带技术的深入研究,带领团队不断研发新产品,提高产品质量,逐渐在市场中站稳脚跟。

Alpha Wire公司的发展小趣事

随着环保意识的日益增强,电子行业对环保材料的需求也越来越大。Advance Tapes公司积极响应国家环保政策,致力于研发环保型胶带产品。通过采用环保材料和生产工艺,减少了对环境的污染和资源的浪费。同时,公司还加强了对废弃胶带产品的回收和处理工作,实现了资源的循环利用。这些举措不仅提升了Advance Tapes的企业形象,也为公司的可持续发展奠定了坚实基础。

以上是基于已知信息构建的关于Advance Tapes在电子行业中可能的发展故事。然而,这些故事并非真实的历史记录,仅用于展示该公司可能的发展路径和面临的挑战。如需了解更多关于Advance Tapes公司的真实发展历程和故事,建议查阅相关文献资料或访问公司官网。

Cystech公司的发展小趣事

随着全球环保意识的不断提高,C-TECH Co., Ltd积极响应环保号召,将环保理念融入公司的发展之中。公司在2007年就通过了ISO 14001环境管理体系认证,并在生产过程中采用环保材料和工艺,减少废弃物排放和能源消耗。此外,公司还积极参与环保公益活动,推动行业绿色发展。通过践行环保理念,C-TECH Co., Ltd在电子行业树立了良好的企业形象。

振华新云(CEC)公司的发展小趣事

背景:随着电子行业的快速发展,振华新云不断加大技术创新和产品研发力度。

内容:公司积极引进先进技术和设备,加强与国际先进企业的合作与交流。同时,注重培养高素质的技术人才队伍,为技术创新和产品研发提供有力支持。

成果:通过持续不断的技术创新和产品研发,振华新云在电子元器件领域取得了多项重要成果,如开发出具有国际先进水平的钽电解电容器等产品,进一步巩固了公司在行业中的领先地位。

问答坊 | AI 解惑

无线发射功率以及接收灵敏度

发射功率与增益 无线电发射机输出的射频信号,通过馈线(电缆)输送到天线,由天线以电磁波形式辐射出去。电磁波到达接收地点后,由天线接收下来(仅仅接收很小很小一部分功率),并通过馈线送到无线电接收机。因此在无线网络的工程中,计算发 ...…

查看全部问答>

请教:如何从硬盘引导进入vxworks

各位,我先从优盘引导进入dos,盘符为C: 然后把生成的bootrom.sys,vxworks以及vxload.com拷贝到硬盘D:(已用format d:/s格式化了) 结果启动到verifying DMI pool data......就不动了,我的硬盘是4G的电子盘,我不知道这个做法对否?希望大家能帮 ...…

查看全部问答>

又是可怕的DEMO: InterruptInitialize failed!!! 请各位前辈帮帮忙。

InterruptInitialize(SysInt,Interruptevent,NULL,0)      我的这个函数总是返回为FALSE,      SysInt在oalintr.h上已经定义,而且在cfw.s   和armint.c也加入相应的中断处理,使能,代码Interru ...…

查看全部问答>

你知道预处理器标识#error的目的吗?

   这问题对区分一个正常的伙计和一个书呆子是很有用的。只有书呆子才会读C语言课本的附录去找出象这种问题的答案。当然如果你不是在找一个书呆子,那么应试者最好希望自己不要知道答案。…

查看全部问答>

成立一个电子技术论坛,大家去看看!!www.520ic.cn

关于单片机、开关电源、信号源与频率计的专业论坛,大家有问题或者想下相关资料的去看看。另外本站首页提供200多万的ic芯片pdf资料搜索下载。www.520ic.cn…

查看全部问答>

网络驱动无法调用我的中断服务程序?/(帮忙)

通过PCI 总线配置寄存器,并安装了中断服务程序,查看中断寄存器也显示发送 和接收包正常,但就是发完和接完就是没有调用中断程序…

查看全部问答>

各位用过的兄弟:STM32生产时怎么设置保密性?

                                 如题,怎样设置以防止软件被读出??…

查看全部问答>

不好意思顶了老帖子,我对UART超时的用法。

我在CC2430上实现了MODBUS,在CC1110上实现了UART透传。 UART应用程序中超时,串口中断的时候数据往环形队列里面放,队列就是一个组数,有两个标记表示头和尾,这个方法我也是模仿一些国外开发系统中集成的程序。 主程序中用getch函数,读队 ...…

查看全部问答>

请教关于STM8S105的问题

                                 请问什么原因会导致STM8S105的可用RAM空间小于128字节呢?文档上不是说有2K的RAM吗。程序出了一点小问题,感觉是ra ...…

查看全部问答>