完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
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负荷。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1113 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1134 浏览 1 评论
569 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
424 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1020 浏览 2 评论
1610浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
275浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
288浏览 3评论
271浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
247浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-19 16:49 , Processed in 0.738218 second(s), Total 45, Slave 39 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号