STM32设置中断的步骤

发布者:快乐的天使最新更新时间:2018-12-03 来源: eefocus关键字:STM32  设置中断  步骤 手机看文章 扫描二维码
随时随地手机看文章

下图概括了STM32F10XXX系列芯片的中断



默认情况下,中断向量表位于Flash等只读存储器内,而且在运行过程中无须修改向量表。中断向量表默认位于存储器的开头(地址0),查阅探索者开发板例程代码也可以发现这一点,在.s启动文件中可以看到:



 对应于stm32f4xx.h中的代码:



这么多中断需要通过NVIC(内嵌向量中断控制器)来管理。 


设置中断总共分三步:


1.设置中断优先级分组。


//类似于划分“阶级成分”


2.设置某中断的中断优先级


//类似于判定具体的“阶级成分”


3.使能NVIC中的该中断


//类似于“宣布判决”


以下内容摘自 https://www.cnblogs.com/121792730applllo/p/5155368.html


形象化的理解是:


你是上帝,造了N个人,这么多人要分社会阶级和社会阶层了。由于“阶级”的词性比较重,"阶层"比较中性,所以preemption优先级->阶级;每个阶级内部,有一些阶层,sub优先级->阶层。


如果按照NVIC_PriorityGroup_4这么分,就分为了16个阶级(1个阶层就是1个preemption优先级),0个阶层;高阶级的人,可以打断低阶级的正在做事的人(嵌套),最多可以完成1个中断和15级嵌套。每个阶级(每个preemption优先级),你来指定这43人中,谁进入该阶级;一个人叫EXTI0_IRQChannel,你指定他进入“阶级8”,则

NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 8; // 指定抢占式优先级别1,可取0-15


另外,在同一阶级内部,一个人在做事的时候,另外一个人不能打断他;(preemption优先级别相同的中断源之间没有嵌套关系)还有,如果他们两个同时想做事,因为没有阶层,那么就根据Vector table中的物理排序,让排名靠前的人去做;又有1个人SPI1_IRQChannel,设定如下

NVIC_InitStructure.NVIC_IRQChannel = SPI1_IRQChannel;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 指定抢占式优先级别1,可取0-15

SPI1_IRQChannel的阶级高,EXTI0_IRQChannel做事的时候可以打断(嵌套)。


如果按照NVIC_PriorityGroup_3这么分,就分为了8个阶级(1个阶级是1个preemption优先级),每个阶级内有2个阶层(sub优先级);高阶级的人,可以打断低阶级的正在做事的人(嵌套),最多可以完成1个中断和7级嵌套。每个阶级(每个preemption优先级),你来指定这43人中,谁进入该阶级;一个人叫EXTI0_IRQChannel,你指定他进入“阶级3”,则:

NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; // 指定抢占式优先级别1,可取0-7


还需要指定他的阶层:

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 指定响应优先级别0,可取0-1


另有1个人叫EXTI9_5_IRQChannel,他的阶级和阶层设定如下

NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; // 指定抢占式优先级别0,可取0-7

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // 指定响应优先级别1


那么这两个人是同一阶级的兄弟,一个人在做事的时候,另外一个人不能打断他;(preemption优先级别相同的中断源之间没有嵌套关系)


如果他们两个同时想做事,因为前者的阶层高,所以前者优先。


还有一个人叫USART1_IRQChannel,他的阶级和阶层设定如下

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; // 指定抢占式优先级别0,可取0-7

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // 指定响应优先级别1


USART1_IRQChannel的优先级最高,当前面两个人做事的时候,他都可以打断(嵌套)。


以下的类推。

关键字:STM32  设置中断  步骤 引用地址:STM32设置中断的步骤

上一篇:STM32F10x系列UART中断异常调试经历
下一篇:STM32中断源位置

推荐阅读最新更新时间:2024-03-16 16:19

STM32 CAN总线应用程序,调试通过仅供参考
1、打开STM32 CAN系统工作时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); 2、开放系统中断,根据实际情况选择 NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NV
[单片机]
STM32/ARM Cortex-M3复位序列
在离开复位状态后,CM3做的第一件事就是读取下列两个32位整数的值: 1)从地址0x0000 0000 处取出MSP的初始值 2)从地址0x0000 0004 处取出PC的初始值——这个值是复位向量,LSB必须是1.然后从这个值所对应的地址处取指,如下图1所示。 图1 请注意,这与传统的ARM架构不同——其实也和其它大多数的单片机不同。传统的ARM架构总是从0地址开始执行第一条指令,并且这是一条跳转指令。在CM3中,在0地址提供的是MSP的初始值,然后紧跟着的是向量表(向量表在以后还可以转移到其它位置)。向量表中的数值是32位的地址,而不是跳转指令。向量表的第一个条目指向复位后应执行的第一条指令。 因为
[单片机]
<font color='red'>STM32</font>/ARM Cortex-M3复位序列
电力行业,米尔STM32MP135开发板IEC61850协议移植笔记
1. 概述 IEC61850是变电站自动化系统(SAS)中通信系统和分散能源(DER)管理的国际标准。它通过标准的实现,实现了智能变电站的工程运作标准化。使得智能变电站的工程实施变得规范、统一和透明,在电力和储能系统中应用非常广泛。 本文基于米尔MYD-YF13X开发板,在Linux系统上移植和使用开源的libIEC61850库,该库提供了用C语言编写的IEC 61850 / MMS,IEC 61850 / GOOSE和IEC 61850-9-2 /采样值通信协议的服务端和客户端库。 2. 搭建配置环境 本章节讲述libIEC61850库的编译环境配置过程。 2.1. 安装JAVA环境 IEC61850库中
[嵌入式]
电力行业,米尔STM32MP135开发板IEC61850协议移植笔记
STM32时钟使能及应用总结
STM32的新手,一般都会对一个问题很纠结。我也是,就是所谓的”时钟问题“。我们在尽心STM32编程时,会痛苦地发现这样一个事实:不管你要干嘛,你首先要做的一件事就是使能时钟。而且可能每一次的时钟还是不同的。 你就会问:为什么要使能时钟?为什么每次使能的时钟还不一样呢?为什么51单片机中没有这些鬼?在学51单片机的时候,基本上接触不到I/O方向和外设时钟的概念,I/O想输入就直接读,想输出就直接赋值,串口、AD转化、外部中断等等也都是想用就用,不需要单独配置时钟。这样在初学时的确方便了很多,不需要有乱七八糟的设置就能让芯片跑起来,但是随之带来的就是所谓的功耗问题。但是作为初学者,谁还管这个啊?能让程序跑起来就已经让我们兴奋得几
[单片机]
意法半导体新STM8和STM32手机应用软件优化微控制器选型
中国,2021年8月11日——为帮助开发者轻松快捷地找到适合项目的微控制器,意法半导体在主要应用商店和公司官网st.com发布了先进的手机应用。 STM8 Finder和STM32 Finder替代以前的ST MCU Finder手机应用,利用最新的应用软件设计技术,为用户提供稳健和便利的使用体验。新功能包括强大的搜索筛选器,让用户更细致地描述所需的外围设备。自适应图形界面能够根据智能手机或平板电脑的触屏以及屏幕方向自动优化显示效果,内容缓存支持离线搜索。此外,新的增量数据库管理功能在数据更新时可大限度地减少数据使用量和等待时间。 这两款应用软件可以查看STM8 8位微控制器、STM32 32位Arm®Cortex®
[嵌入式]
意法半导体新STM8和<font color='red'>STM32</font>手机应用软件优化微控制器选型
stm32之CAN总线基础
can总线协议概述:   CAN是Controller Area Network的缩写,由德国博世公司开发;CAN通过ISO11891以及ISO11519进行了标准化;     CAN总线的特点:     1、多主控制       在总线空闲时,所有单元都可以开始发送消息(多主控制);       最先访问总线的单元获得发送权(辨别方式: CSMA/CA方式 );       多个单元同时开始发送时,发送高优先级ID消息的单元可获得发送权;     2、消息的发送       在can协议中,所有消息都是以固定格式发送。总线空闲时,所有与总线相连的单元都可以开始发送新消息。两个以上的单元同时开始发送消息时,根据
[单片机]
<font color='red'>stm32</font>之CAN总线基础
STM32定时器PWM输出
  脉冲宽度调制PWM(Pulse Width Modulation),调节占空比以控制脉冲宽度。   STM32的定时器除了TIM6和TIM7,其它定时器都可以用来产生PWM信号,高级定时器TIM1和TIM8可同时产生7路PWM输出,通用定时器可同时产生4路PWM输出。   STM32定时器PWM输出设置的几个步骤如下: 1)开启STM32时钟,配置输出I/O为复用输出 2)设置ARR(周期)和PSC(预分频) 3)设置PWM模式(边沿对齐或中央对齐) 4)使能定时器的通道输出,使能定时器 5)修改CCR2来控制占空比   例程:72MHz主频,PB7(TIM4_CH2)输出PWM GPIO_InitStr
[单片机]
基于嵌入式系统原型设计的STM32开放式开发环境详解
市场上涌现各种价格亲民的经济型微控制器,助力新一代开发者创造令人兴奋的新型嵌入式应用。如今的开发工具非常好用,软硬件均呈现模块化趋势,插接安装简单容易,使得产品设计评估和原型开发周期大幅缩短。STM32开放式开发环境是业内独一无二的软硬件开发平台,堆叠式插接电路板集成各种模块化硬件,同时模块化软件覆盖从驱动程序到应用层的全部软件,帮助设计人员将创意快速变成产品原型,顺利转化成最终设计。 STM32开放式开发环境是什么? STM32开放式开发环境 是意法半导体开发的嵌入式系统原型设计开发环境,以简化嵌入式项目设计为目标,通过开源形式提供全部重要功能模块,组件包括: -价格极低的STM32 Nucleo开发板(STM32微控制
[单片机]
基于嵌入式系统原型设计的<font color='red'>STM32</font>开放式开发环境详解
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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