STM32
直播中

王兰

13年用户 841经验值
擅长:基础元器件
私信 关注
[问答]

STM32F103的中断有哪些呢

STM32F103的中断有哪些呢?
NVIC是什么?NVIC的主要作用是什么?

回帖(1)

李欣政

2021-10-28 11:25:04
  STM32F103的中断
  • CM3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。
  • STM32并没有使用CM3内核的全部东西,而是只用了它的一部分。STM32有84个中断,包括16个内核异常和68个可屏蔽中断,具有16级可编程的中断优先级。STM32F103系列上面,又只有10个内核中断和60个可屏蔽中断。
  • STM32所有外设都可产生中断。
  
  F103的系统异常清单
  
  F103的外部中断清单
  
  
  中断向量表
  ~当发生了异常并且要响应它时,CM3需要定位其服务例程的入口地址。这些入口地址存储在所谓的“(异常)向量表”中。CM3认为该表位于内存零地址处,且各向量占用4字节。因此每个表项占用4字节。
  ~表内各地址的内容一般通过启动汇编文件汇编后生成。(如:startup_stm32f10x_hd.s)
  NVIC简介
  • NVIC(Nested Vectored Interrupt Controller), 是Cortex-M3 处理器的一个重要组成部分,控制着整个芯片中断相关的功能,它跟内核紧密耦合,是内核里面的一个外设。
  NVIC 支持1 到240 外部中断输入和一个 不可屏蔽中断 (NMI) 输入。但是各个芯片厂商在设计芯片的时候会对CORTEX-M3 内核里面的NVIC 进行裁剪,把不需要的部分去掉,所以说STM32 的NVIC 是CORTEX-M3 的NVIC 的一个子集。
  • 主要作用是:对各个中断设置使能/禁止、挂起(Pending)/解挂、设置优先分组、分配优先级(抢占优先级和响应优先级)
  • 向量中断支持
  • 可嵌套中断支持
  • 动态优先级调整支持
  • 中断延迟大大缩短
  • 中断可屏蔽
  • NVIC对中断的配置和控制是通过对其内部的寄存器的读写来实现的。这些寄存器的基地址为:0xE000E000。
  中断优先级
  • 在NVIC 有一个专门的寄存器:中断优先级寄存器NVIC_IPRx,用来配置外部中断的优先级,IPR 宽度为8bit,原则上每个外部中断可配置的优先级为0~255,数值越小,优先级越高。
  但是绝大多数CM3 芯片都会精简设计,以致实际上支持的优先级数减少,在STM32F103中,只使用了高4bit。
  • 用于表达优先级的这4bit,又被分组成抢占优先级和子优先级(响应优先级)。如果有多个中断同时响应,抢占优先级高的就会 抢占 抢占优先级低的优先得到执行,如果抢占优先级相同,就比较子优先级。如果抢占优先级和子优先级都相同,就比较他们的硬件中断编号,编号越小,优先级越高。
  • 优先级的分组由SCB(System Control Block)结构体中定义的的应用程序中断及复位控制寄存器AIRCR 的PRIGROUP[10:8]位决定。
  接上,优先级的分组由SCB(System Control Block)结构体中定义的的应用程序中断及复位控制寄存器AIRCR 的PRIGROUP[10:8]位决定。
  根据SCB-》AIRCR寄存器的bit10-8,STM32将中断分为5个组,组0~4。然后根据分组,确定IPR中设定的抢占优先级和子优先级(响应优先级)各占那些位。数值越小,优先级越高。
  外部中断
  • STM32的每个IO都可以作为外部中断的中断输入口,这点也是STM32的强大之处。
  • STM32F103的中断控制器支持19个(互联型为20个)外部中断/事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。STM32F103的19个外部中断为:
  线0~15:对应外部IO口的输入中断。
  线16:连接到电源电压检测(PVD)中断。
  线17:连接到实时时钟(RTC)全局中断事件。
  线18:连接到USB唤醒事件。
  线19:连接到以太网唤醒事件(互联型产品STM32F107)
  前面提到STM32有19个外部中断(互连型20个),每个连到一个中断线,其中供外部IO中断使用的为线0~15共16根。但是STM32的GPIO口共有16x7个,那么STM32是怎么把16个中断线和IO口一一对应起来的呢?
  于是STM32就这样设计,GPIO的管GPIOx.0=GPIOx.15(x=A,B,C,D,E,F,G)分别对应中断线15~0。这样每个中断线对应了最多7个IO口,以线0为例:它对应了GPIOA.0、GPIOB.0、GPIOC.0、GPIOD.0、GPIOE.0、GPIOF.0、GPIOG.0。而中断线每次只能连接到1个IO口上,这样就需要通过配置来决定对应的中断线配置到哪个GPIO上了。
  中断与事件区别
  • 事件和中断来源相同;
  • 中断产生后由CPU执行中断服务函数来处理,需占用中断资源与CPU负荷;
  • 事件产生后产生一个脉冲,触发相关硬件设备动作,可以不占用CPU负荷。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分