stm32f103中断系统详解学习笔记

发布时间:2022-12-21  

  一、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。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>