20、STM32中断系统

20、STM32中断系统

1.中断介绍

2.中断配置步骤

1.中断介绍

1.1 中断概念

CPU执行程序时,由于发生了某种随机的事件(外部或内部),引起CPU暂 时中断正在运行的程序,转去执行一段特殊的服务程序(中断服务子程序 或中断处理程序),以处理该事件,该事件处理完后又返回被中断的程序 继续执行,这一过程称为中断。引发中断的称为中断源。比如:看电视 时突然门铃响,那么门铃响就相当于中断源。有些中断还能够被其他高 优先级的中断所中断,那么这种情况又叫做中断的嵌套。

STM32F10x芯片有84个中断通道,包括 16 个内核中断和 68 个可屏蔽中 断,这些中断通道已按照不同优先级顺序固定分配给相应的外部设备。 (参考《STM32F10x中文参考手册》-9 中断和事件章节)

1.2 NVIC介绍

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

  中断控制相关寄存器在固件库core_cm3.h文件NVIC结构体内。可打开 任意库函数工程即可查看到。

1.3 中断优先级

  STM32F103芯片支持60个可屏蔽中断通道,每个中断通道 都具备自己的中断优先级控制字节(8位,但是STM32F103中只使用4位,高4位有效),用于表达优先级的高4位又被为组成抢占式优先级和响应 优先级,通常也把响应优先级称为“亚优先级”或“副优先级”,每个 中断源都需要被指定这两种优先级。

  高抢占式优先级的中断事件会打断当前的主程序或者中断程序运行, 俗称中断嵌套。在抢占式优先级相同的情况下,高响应优先级的中断优 先被

  当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系, 当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要 等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则 中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们 的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺 序决定先处理那一个。

  

  STM32F103中指定中断优先级的寄存器位有4位,这4位的分组方式 如下:

  

  设置优先级分组可调用库函数 NVIC_PriorityGroupConfig(),在 misc.c可以查看。

2.中断配置步骤

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

(1)使能外设某个中断

(2)设置中断优先级分组,初始化 NVIC_InitTypeDef 结构体

typedef struct
{
  uint8_t NVIC_IRQChannel;                    //中断源
  uint8_t NVIC_IRQChannelPreemptionPriority;  //抢占优先级
  uint8_t NVIC_IRQChannelSubPriority;         //响应优先级
  FunctionalState NVIC_IRQChannelCmd;         //中断使能或失能   
} NVIC_InitTypeDef;

(3)编写中断服务函数

猜你喜欢

转载自www.cnblogs.com/zhb123456/p/10610101.html