STM32中断系统

中断的概述

中断的概念

就是说在主程序正常执行程序时,出现了特定事件,使CPU暂停当前的任务转而去执行处理这个事件,等到这个事件处理完成之后,CPU再回到被打断的位置继续执行处理,这就是中断。
打断CPU执行的特定事件,我们一般称之为中断源。被中断源打断的位置我们称为断点。处理特定事件的过程,我们称为执行中断处理程序。
在这里插入图片描述

中断的嵌套

正在执行中断程序的时候,这个时候有可能被另外一个中断源给中断,CPU转而去执行另外一个中断源的中断处理程序,这叫中断嵌套
中断B能否打断中断A,要看他们的优先级,优先级高的可以打断优先级低的,优先级低的无法打断优先级高的。
在这里插入图片描述中断源可以是外部的,也可以是内部的。外部的叫外部中断源,内部的叫内部中断源(有时候也叫异常)

为什么要使用中断

对于单片机而言,中断至关重要
举例说明:
在使用按键控制一个LED灯时,我们需要去判断这个按键是否已经按下,在不使用中断的情况下,我们在主程序中是需要去不断循环去检测GPIO端口的电平信号,在这种情况下如果长时间这样会导致浪费cpu的时间,而且cpu很可能会阻塞。
但是在有了中断的话在主程序中,就不需要循环不断的检测按键,主程序可正常执行当前的程序,当有按键按下时,cpu会被打断,去执行按键的逻辑程序代码,等执行完成后会返回cpu继续之前的操作
切忌在中断的回调函数中不要执行耗时的程序,这样也会导致主程序阻塞

STM32的中断
Cortext-M3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。

一般情况下,芯片厂商会对Cortex-M3的中断进行裁剪

STM32有84个中断,包括16个内核中断和68个可屏蔽中断,具有16级可编程的中断优先级。

STM32F103系列70个中断(目前使用的芯片)有10个内核中断和60个可编程的外部中断。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

中断体系架构

在这里插入图片描述

NVIC中断向量控制器

NVIC的介绍

NVIC(Nested vectored interrupt controller嵌套向量中断控制器)和处理器核的接口紧密相连,可以实现低延迟的中断处理和高效地处理中断。嵌套向量中断控制器管理着包括内核异常,外部中断等所有中断。由NVIC决定哪个中断的处理程序交给CPU来执行。
每一个外部中断都可以被使能或者禁止,并且可以被设置为挂起状态或者清除状态。处理器的中断可以电平的形式的,也可以是脉冲形式的,这样中断控制器就可以处理任何中断源
16个IO的中断与PVD(电源电压检测),RTC(实时时钟),USB,以太网检测这20个外部中断会通过EXTI来控制,然后交给NVIC。其他中断都是直接交给NVIC来处理

中断优先级

NVIC为了方便管理中断,可以通过软件给每个中断设置优先级。NVIC用4个位来控制优先级,值小的优先级高。把优先级分为两种:抢占优先级响应优先级

规则:

优先级值越小,优先级越高。
如果不设置优先级,则默认优先级为0。
先比较抢占优先级。抢占优先级高的可以打断抢占优先级低的。
若抢占优先级一样,再比较响应优先级。但是响应优先级不会导致中断嵌套。
若抢占优先级一样的同时挂起,则优先处理响应抢占优先级高的
若挂起的优先级(抢占和响应)都一样,则查找中断向量表,值小的先响应
NVIC对优先级分了5组,在程序中先对中断进行分组,而且分组只能分一次,若多次分,只有最后一次生效
在这里插入图片描述

外部中断控制器EXTI

在这里插入图片描述
示例代码演示(寄存器操作):
LED驱动代码:

#include "Driver_LED.h"

/**
 * @description: 对LED进行初始化
 */
void Driver_LED_Init(void)
{
   
   
    /* 1. 打开GPIOA的时钟 */
    RCC->APB2ENR 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值