STM32-异常与中断

发布者:Aningmeng最新更新时间:2022-05-26 来源: eefocus关键字:STM32  异常  中断 手机看文章 扫描二维码
随时随地手机看文章

在使用单片机的时候我们常用到的中断,但是但是我们常说的中断都是由(内核的)外部事件引起的、正常的紧急事件。而异常与我们所说的中断相似,但也有不同之处。


异常(内核中断)和外部中断

异常是CPU内部产生的中断,即在CPU执行特定指令的时候出现的非法情况,如除数为0等等,所以不可能在执行指令期间发生异常,只会在执行一条指令后有可能发生,所以也称同步中断。而中断则是一种异步的,它与特定的进程是无关的,又称为异步中断。


CM3 内核支持 256 个中断,其中包含了 16 个内核中断(主要用于系统异常)和 240 个外部中断,并且具有 3 个固定的高优先级和256级(8位)的可编程中断设置。因为芯片设计者可以修改 CM3 的硬件描述源代码,所以做成芯片后,支持的中断源数目常常不到 240 个,并且优先级的位数也由芯片厂商最终决定,实际上支持的优先级数会少于256级(8位),如 8 级(3位),16 级(4位),32(5位) 级等。需要注意的是CM3允许的最少使用位数为3个位,即至少支持8级优先级。


STM32 有 84 个中断,包括 16 个内核中断和 68 个外部中断,具有 16 级(4位)可编程的中断优先级。而我们常用的就是这 68 个可屏蔽中断,但是 STM32 的 68 个可屏蔽中断,在 STM32F103 系列上面,又只有 60 个(在 107 系列才有 68 个)。


内核中断

内核中断如下图所示

需要了解的是NMI,不可屏蔽中断。我们知道,对于可屏蔽中断,除了受本身的屏蔽位的控制外,还都要受一个总的控制,即CPU标志寄存器中的中断允许标志位IF(Interrupt Flag)的控制,IF位为1,可以得到CPU的响应,否则,得不到响应。对于不可屏蔽中断,CPU收到有效的NMI中断中断信号必须进行响应!不需要发出中断请求!不可屏蔽中断通常用于故障处理(如系统掉电等)。


外部中断

CM3内核的外部中断如下图所示,他们被芯片设计厂商定义为各种片上外设的中断请求接口。

中断向量表

当发生了异常并且要响应它时,CM3 需要定位其处理例程的入口地址。这些入口地址存储在所谓的“(异常)向量表”中。我们在启动文件中可以看到中断向量表,这里详细列举了该启动文件支持的所有中断,下面这个是STM32F103的启动文件。


__Vectors       DCD     __initial_sp               ; Top of Stack

                DCD     Reset_Handler              ; Reset Handler

                DCD     NMI_Handler                ; NMI Handler

                DCD     HardFault_Handler          ; Hard Fault Handler

                DCD     MemManage_Handler          ; MPU Fault Handler

                DCD     BusFault_Handler           ; Bus Fault Handler

                DCD     UsageFault_Handler         ; Usage Fault Handler

                DCD     0                          ; Reserved

                DCD     0                          ; Reserved

                DCD     0                          ; Reserved

                DCD     0                          ; Reserved

                DCD     SVC_Handler                ; SVCall Handler

                DCD     DebugMon_Handler           ; Debug Monitor Handler

                DCD     0                          ; Reserved

                DCD     PendSV_Handler             ; PendSV Handler

                DCD     SysTick_Handler            ; SysTick Handler

 

                ; External Interrupts

                DCD     WWDG_IRQHandler            ; Window Watchdog

                DCD     PVD_IRQHandler             ; PVD through EXTI Line detect

                DCD     TAMPER_IRQHandler          ; Tamper

                DCD     RTC_IRQHandler             ; RTC

                DCD     FLASH_IRQHandler           ; Flash

                DCD     RCC_IRQHandler             ; RCC

                DCD     EXTI0_IRQHandler           ; EXTI Line 0

                DCD     EXTI1_IRQHandler           ; EXTI Line 1

                DCD     EXTI2_IRQHandler           ; EXTI Line 2

                DCD     EXTI3_IRQHandler           ; EXTI Line 3

                DCD     EXTI4_IRQHandler           ; EXTI Line 4

                DCD     DMA1_Channel1_IRQHandler   ; DMA1 Channel 1

                DCD     DMA1_Channel2_IRQHandler   ; DMA1 Channel 2

                DCD     DMA1_Channel3_IRQHandler   ; DMA1 Channel 3

                DCD     DMA1_Channel4_IRQHandler   ; DMA1 Channel 4

                DCD     DMA1_Channel5_IRQHandler   ; DMA1 Channel 5

                DCD     DMA1_Channel6_IRQHandler   ; DMA1 Channel 6

                DCD     DMA1_Channel7_IRQHandler   ; DMA1 Channel 7

                DCD     ADC1_2_IRQHandler          ; ADC1_2

                DCD     USB_HP_CAN1_TX_IRQHandler  ; USB High Priority or CAN1 TX

                DCD     USB_LP_CAN1_RX0_IRQHandler ; USB Low  Priority or CAN1 RX0

                DCD     CAN1_RX1_IRQHandler        ; CAN1 RX1

                DCD     CAN1_SCE_IRQHandler        ; CAN1 SCE

                DCD     EXTI9_5_IRQHandler         ; EXTI Line 9..5

                DCD     TIM1_BRK_IRQHandler        ; TIM1 Break

                DCD     TIM1_UP_IRQHandler         ; TIM1 Update

                DCD     TIM1_TRG_COM_IRQHandler    ; TIM1 Trigger and Commutation

                DCD     TIM1_CC_IRQHandler         ; TIM1 Capture Compare

                DCD     TIM2_IRQHandler            ; TIM2

                DCD     TIM3_IRQHandler            ; TIM3

                DCD     TIM4_IRQHandler            ; TIM4

                DCD     I2C1_EV_IRQHandler         ; I2C1 Event

                DCD     I2C1_ER_IRQHandler         ; I2C1 Error

                DCD     I2C2_EV_IRQHandler         ; I2C2 Event

                DCD     I2C2_ER_IRQHandler         ; I2C2 Error

                DCD     SPI1_IRQHandler            ; SPI1

                DCD     SPI2_IRQHandler            ; SPI2

                DCD     USART1_IRQHandler          ; USART1

                DCD     USART2_IRQHandler          ; USART2

                DCD     USART3_IRQHandler          ; USART3

                DCD     EXTI15_10_IRQHandler       ; EXTI Line 15..10

                DCD     RTCAlarm_IRQHandler        ; RTC Alarm through EXTI Line

                DCD     USBWakeUp_IRQHandler       ; USB Wakeup from suspend

__Vectors_End


优先级

内核中断编号1-3为3 个系统异常:复位,NMI 以及硬 fault,它们是不可编程的有固定的优先级,并且它们的优先级号是负数,从而高于所有其它异常(优先级的数值越小,则优先级越高),所有其它异常的优先级则都是可编程的(优先级不能使负数)。


CM3支持中断嵌套,NMI和外部中断优先级由NVIC中断管理器进行管理。我们知道STM32支持16级(4位)可编程优先级,与51单片机不同,这里的优先级包括了抢占优先级和响应优先级(或称亚优先级)。即抢占优先级和响应优先级共占4位,共同构成了16级(4位)优先级。根据抢占优先级和响应优先级分别占多少位,STM32 将中断分为 5 个组,组 0~4,对应关系如下:

[1] [2]
关键字:STM32  异常  中断 引用地址:STM32-异常与中断

上一篇:STM32-NVIC中断嵌套优先级管理器
下一篇:STM32-PA13、PA14、PA15、PB3、PB4等默认为仿真功能引脚重映射为普通IO

推荐阅读最新更新时间:2024-11-11 10:13

89C51中断系统介绍(外部中断
0、89C51中断系统分类: 分为三种: 1)、外部中断 2)、定时器中断 3)、串口中断 1、中断的概念 中断触发后,CPU会从主函数调到中断函数中。 外部中断1: 低电平触发:P3.2 是0 下降沿触发:p3.2电平:1变为0则触发。 外部中断2同1。 2、中断允许控制 EA是总开关;EX0、ET0、EX1、ET1、ES为分开关。 3、中断请求标志 4、中断优先级 2个优先级,故可实现2级嵌套。 INT0和INT1两个外部中断,T0、T1两个定时器中断,RX和TX为一个串口中断。 硬件中断优先级最高,串口优先级最低。 5、中断响应条件 6、中断
[单片机]
89C51<font color='red'>中断</font>系统介绍(外部<font color='red'>中断</font>)
stm32的USART_IT_TXE和USART_IT_TC
一般来说,串口的发送中断传输数据,对于我目前的应用来说,应用的要求并不是很高,因此,因此就一直没有对其进行一个比较好的实验与认识。然而,在一次串口程序升级(IAP)升级实验中,发现有人使用了这个发送中断方式进行的,所以特别的进行了一个个步骤的实验来进一步知道其运行机理。 首先,串口发送数据,可以使用的方式有: 1、 发送一个数据,然后读取USART_IT_TXE或者USART_IT_TC寄存器的状态。 2、 使用串口发送中断 3、 使用dma发送完成中断 在效率上,肯定是3比较好。其次是2。 网上关于USART_IT_TXE和USART_IT_TC是怎么个用法,各家有各家的言论,在我这里只通过实验来了解
[单片机]
MC9S12XDP512串口使用笔记(中断方式)
1.相关寄存器: 1.SCIBDH,SCIBDL:波特率寄存器(SCIBDH只有低5位有效) 波特率 = 总线频率 / (16 * SBR ) 2. SCICR2: SCI控制寄存器2 TIE: 发送中断使能位。使能发送数据寄存器空标志(TDRE)来产生中断申请 TCIE: 发送完成中断使能位。使能发送完成标志(TC)来产生中断申请 RIE: 接收器满中断使能位 TE: 发送器使能位 RE: 接收器使能位 3.SCISR1: SCI状态寄存器1 TDRE: 发送数据寄存器空标志 TC: 发送完成标志 RDRF: 接收数据寄存器满标志 4.SCIDRL,(SCIDRH): SCI
[单片机]
MC9S12XDP512串口使用笔记(<font color='red'>中断</font>方式)
STM32在系统时钟为72M下的几个延时函数
//粗延时函数,微秒 void delay_nus(u16 time) { u16 i=0; while(time--) { i=10; //自己定义 while(i--) ; } } //毫秒级的延时 void delay_nms(u16 time) { u16 i=0; while(time--) { i=12000; //自己定义 while(i--) ; } } 运用SysTick来实现准确定时: SysTick_Config(SystemCoreClock / 10)
[单片机]
STM32时钟配置及相关问题
Ⅰ、写在前面 最近有很多朋友问: 1.我的USART串口打印出来的数据是乱码? 2.我的TIM定时器延时或定时不准确? 常见可能原因: 1.晶振问题:外部晶振不起振、或频率与配置不匹配。 2.软件问题:分频、倍频、时钟源选择等。 总结来说,主要还在于软件的问题。因为即使没有外部晶振,也可以使用内部晶振。 其实,软件的问题是容易得到解决的,只要你了解了STM32时钟配置里面具体内容就知道了。 关于本文的详细内容请看下面章节 Ⅱ、本文要点 要了解时钟的配置,就需要知道它在哪里配置,也就是还需要了解软件执行的流程。 1.软件流程 说软件流程是让大家知道系统时钟配置的位置。不管是使用寄存器开发,还是使用库(标准库、
[单片机]
<font color='red'>STM32</font>时钟配置及相关问题
STM32串口收发数据为什么要使用DMA
直接存储器访问(Direct Memory Access),简称DMA。DMA是CPU一个用于数据从一个地址空间到另一地址空间“搬运”(拷贝)的组件,数据拷贝过程不需CPU干预,数据拷贝结束则通知CPU处理。因此,大量数据拷贝时,使用DMA可以释放CPU资源,相关文章推荐:详解STM32中的DMA原理。 在STM32控制器中,芯片采用Cortex-M3架构,总线结构有了很大的优化,DMA占用另外的总线,并不会与CPU的系统总线发生冲突。也就是说,DMA的使用不会影响CPU的运行速度。 DMA数据拷贝过程,典型的有: 内存— 内存,内存间拷贝 外设— 内存,如uart、spi、i2c等总线接收数据过程 内存— 外设,如
[单片机]
<font color='red'>STM32</font>串口收发数据为什么要使用DMA
谈一下STM32的启动流程
STM32三种启动模式 下好程序后,重启芯片时,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存,这就是所谓的启动过程。 STM32上电或者复位后,代码区始终从0x00000000开始,其实就是将存储空间的地址映射到0x00000000中。三种启动模式如下: 从主闪存存储器启动,将主Flash地址0x08000000映射到0x00000000,这样代码启动之后就相当于从0x08000000开始。主闪存存储器是STM32内置的Flash,作为芯片内置的Flash,是正常的工作模式。一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。 从系统存储器启动。首先控制BOOT0、BOOT1管脚
[单片机]
谈一下<font color='red'>STM32</font>的启动流程
STM32时钟源
PLLK,SYSK,HCKL,PK1,PK2 之间的关系要弄清楚; 1、HSI:高速内部时钟信号 stm32单片机内带的时钟 (8M频率) 精度较差 2、HSE:高速外部时钟信号 精度高 来源(1)HSE外部晶体/陶瓷谐振器(晶振) (2)HSE用户外部时钟 3、LSE:低速外部晶体 32.768kHz 主要提供一个精确的时钟源 一般作为RTC时钟使用 在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。   ①、HSI是高速内部时钟,RC振荡器,频率为8MHz。   ②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。   ③、LSI是低速内部时钟,RC振荡器
[单片机]

推荐帖子

串口通信
我现在用RS232进行PC机和单片机的通信,在用串口调试助手的时候,发现单片机发送回来的数据是乱码,请问这是什么原因?串口通信那单片机接收到的数据正确吗?程序很简单,只是为了测试是否成功通信晶振是6MHz#includereg52.hunsignedcharflag,a;voidmain(){TMOD=0x20;//设置定时器1为工作方式2TH1=0x8f;TL1=0x8f;TR1=1;REN=1;SM0=0;
tyqlark 嵌入式系统
刚画好的CC1100PCB
最近公司要用CC1100做个433M无线通信的方案,要求是外挂天线的。我花了半天的画了个小模块,感觉天线部分的布局有点别扭,但又说不上来,各位高手帮忙看看。刚画好的CC1100PCB第二层是地平面吗,balun可以靠近RFIC对称放置,PI滤波器也作匹配用途,可以靠近SMA端子放置。RF信号走线有没有控制特征阻抗。画得不错,天线为什么不画上原帖由kata于2011-2-1218:32发表第二层是地平面吗,balun可以靠近RFIC对称放置,PI滤波器也作匹配
yang_swust RF/无线
【雅特力开发板 AT32F421 测评】- 入门教程
一个人的力量是有限的,有心人会总结大家的经验,一路前行!【雅特力开发板AT32F421测评】-入门教程本文讲述F421入门相应操作以及细节说明。AT32F421的使用根据不同编译平台使用方式也是不同,我用的是KEIL5,直接安装对应驱动包,上篇的资料整理有对应的下载地址,解压安装这两个驱动和pack包就可以打开官方的工程,或者自己建立相应的工程,下图是我自己建立的程序和根据雅特力给出的官例写的BSP包,供上层应用使用芯片的使用和工程的创建以及相应的操作我
Albert.G 国产芯片交流
求推荐一款fpga
本帖最后由paulhyde于2014-9-1509:29编辑要容量比较大,能进行较为复杂的计算的谢谢诸位啦求推荐一款fpga本帖最后由paulhyde于2014-9-1509:29编辑...........................
zpsuper2008 电子竞赛
【设计工具】特别适用于Virtex-5 LXT、理想解决方案
当今的多业务光网络要求收发器必须能够适应广泛的输入数据速率。高速串行I/O具有内在的数据速率处理下限,可以防止轻易连接到低速客户信号。PaoloNovellini与GiovanniGuasti在本应用指南中介绍的非整数数据恢复单元(NI-DRU)由查找表(LUT)和触发器组成,特别适用于Virtex-5LXT、SXT、TXT与FXT平台中的RocketIO™GTP与GTX收发器。NI-DRU可以让数据速率下限降低到0Mbps,同时把上
GONGHCU FPGA/CPLD
IPTV“圈地”
本帖最后由jameswangsynnex于2015-3-320:00编辑IPTV燎原前夜的新“圈地”运动2006-7-21百亿市场待启动IPTV是网络电视的简称,所谓网络电视是指用户可以通过互动点播的方式选择电视节目,并进行主动的操作。而从接收终端来看,主要有电视和电脑。根据InformaTelecoms&Media公司在2005年8月公布的一份调查报告结果中预测,到2010年,全球IPTV的用户将由250万用户增长到
hkn 移动便携
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved