stm32中断向量控制器

发布者:tmgouzi最新更新时间:2019-03-06 来源: eefocus关键字:stm32  中断向量控制器 手机看文章 扫描二维码
随时随地手机看文章

NVIC,中文名嵌套中断向量控制器,是Cortex-M3系列控制器内部独有集成单元,与CPU结合紧密,降低中断延迟时间并且能更加高效处理后续中断。举个例子,比如火车站买票,那些火车站的规章制度就是NVIC,规定学生和军人有比一般人更高优先级,它们则给你单独安排个窗口,同学与同学之间也有区别,那就是你也得排队,也就是你的组别(抢断优先级)和你的排队序号(响应优先级)决定你何时能买到票。


       抢断优先级,顾名思义,能再别人中断是抢占别人中断,实现中断嵌套。响应优先级则只能排队,不能抢在前面插别人的对,即不能嵌套。


STM32中指定优先级的寄存器为4位,其定义如下:

第0组:所有4位用于指定响应优先级
第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级
第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级
第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级
第4组:所有4位用于指定抢占式优先级

以上定义也称作中断优先级分组,相关内容在STM32固件库的misc.h文件中有详细定义。

基础了解了就可以对中断进行操作了。

第一步:使用void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)函数对优先级分组配置。NVIC_PriorityGroup可以配置为

NVIC_PriorityGroup_0 => 选择第0组
NVIC_PriorityGroup_1 => 选择第1组
NVIC_PriorityGroup_2 => 选择第2组
NVIC_PriorityGroup_3 => 选择第3组
NVIC_PriorityGroup_4 => 选择第4组

例如:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0)配置为0组。

第二步:中断初始化结构体配置,结构体类型定义如下:

typedef struct

{

  uint8_t NVIC_IRQChannel;                 

  uint8_t NVIC_IRQChannelPreemptionPriority;  //抢断优先级

  uint8_t NVIC_IRQChannelSubPriority;  //响应优先级      

  FunctionalState NVIC_IRQChannelCmd;      

} NVIC_InitTypeDef;

 

例如:STM32外部中断0配置如下

    EXTI_NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;

         EXTI_NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  //抢占优先级别(0~1)

         EXTI_NVIC_InitStructure.NVIC_IRQChannelSubPriority = 7;  //响应优先级别(0~7)

         EXTI_NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

 

第三步:中断初始化结构体初始化操作如下

         NVIC_Init(&EXTI_NVIC_InitStructure);

 

第四步:开关总中断操作。在STM32中是通过改变CPU优先级来允许和禁止中断的。

(1)   下面两个函数等效关闭总中断

void NVIC_SETPRIMASK(void); 
void NVIC_SETFAULTMASK(void);

(2)   下面两个函数等效开放总中断

void NVIC_RESETPRIMASK(void); 
void NVIC_RESETFAULTMASK(void);

(3)   常用操作是先关后开中断

NVIC_SETPRIMASK();     // Disable Interrupts 
NVIC_RESETPRIMASK(); // Enable Interrupts

两种类型函数要成对使用


关键字:stm32  中断向量控制器 引用地址:stm32中断向量控制器

上一篇:使用JTAG连接STM32 SWD模式 (STM32L011为例)
下一篇:STM32的BKP寄存器问题

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

STM32学习笔记:【003】GPIO
在STM32中,最常用到的功能莫过于GPIO(General Purpose Input Output 、通用输入/输出)了,在STM32中,除了除去ADC以外的复用功能,剩下的几乎就是GPIO了。 下面给出GPIO的基本使用步骤: 初始化 1.声明一个GPIO属性结构体,设置各成员属性 这个结构体的属性是这样的: typedef struct { uint32_t Pin;   /*指定的引脚号,右值表达式可以是GPIO_PIN_0到~GPIO_PIN_15任意相或 */ uint32_t Mode;   /*     模式     GPIO_MODE_INPUT       输入模式     
[单片机]
浅谈你不知道的STM32知识
STM32是一种功能比较强大的32位单片机,广泛应用于各种嵌入式设备中,由于它的普及性及丰富的资源,受到广大嵌入式开发者的喜欢,但要想学好用好STM32也并非易事,毕竟,相比8位、16位产品,STM32要复杂得多。 STM32的时钟 众所周知STM32有5个时钟源HSI、HSE、LSI、LSE、PLL,其实它只有四个,因为从下图中可以看到PLL都是由HSI或HSE提供的。 其中,高速时钟(HSE和HSI)提供给芯片主体的主时钟.低速时钟(LSE和LSI)只是提供给芯片中的RTC(实时时钟)及独立看门狗使用,图中可以看出高速时钟也可以提供给RTC。内部时钟是在芯片内部RC振荡器产生的,起振较快,所以时钟在芯片刚上电的时候,默
[单片机]
浅谈你不知道的<font color='red'>STM32</font>知识
关于PHY的三大寄存器详解
在之前的文章,我们讲解了STM32的网络外设部分。 文章有《STM32网络电路设计》《STM32网络之MAC控制器》《STM32网络之DMA控制器》《STM32网络之中断》。 STM32只有网络外设时不能进行网络通信的,因为STM32只提供了SMI接口,MII和RMII接口。我们还需要与之通信的外部网络芯片,简称PHY芯片。我熟悉的PHY型号有:RTL8201F,RTL8201E,RTL8201G,DP83848,YT8512C等,原计划讲解RTL8201F的,但是内容太多,先把PHY寄存器拿出来讲一下。 为什么STM32不集成PHY呢? PHY(PortPhysical Layer),中文可称之为端口物理层。 1、PHY芯片
[单片机]
单片机STM32学习笔记之寄存器映射详解
  我们知道,存储器本身没有地址,给存储器分配地址的过程叫存储器映射,那什么叫寄存器映射?寄存器到底是什么?   在存储器Block2 这块区域,设计的是片上外设,它们以四个字节为一个单元,共32bit,每一个单元对应不同的功能,当我们控制这些单元时就可以驱动外设工作。我们可以找到每个单元的起始地址,然后通过C 语言指针的操作方式来访问这些单元,如果每次都是通过这种地址的方式来访问,不仅不好记忆还容易出错,这时我们可以根据每个单元功能的不同,以功能为名给这个内存单元取一个别名,这个别名就是我们经常说的寄存器,这个给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射。   比如,我们找到GPIOB 端口的输出数据
[单片机]
单片机<font color='red'>STM32</font>学习笔记之寄存器映射详解
STM32外部中断
68个可屏蔽中断通道,包括EXTI,TIM,ADC,USART,SPI,I²C,RTC等多个外设(F1系列最多的数量,以型号为主); 使用NVIC统一管理中断,每个中断通道都拥有16个可编程优先等级,可以对优先级进行分组,进一步设置抢占优先级和响应优先级。 AFIO内部图 EXTI内部图 中断和事件的区别 NVIC的中断优先级由优先级寄存器的4位(0-15)决定,这四位可以进行切分,分为高N位的抢占优先级, 和4-n位的响应优先级; 抢占优先级高的可以中断嵌套,响应优先级高的可以优先排队,抢占优先级和响应优先级均相同的话, 按照中断号排队。 操作的是NVIC- IPRx寄存器 中断示例 mai
[单片机]
<font color='red'>STM32</font>外部中断
学习笔记----stm32的usb外设概述
一、stm32的usb简介: 1。usb外设实现了usb2.0全速总线和APB1总线间的接口。 2。usb外设支持usb挂起/恢复操作,可以停止设备时钟实现低功耗。 二、usb主要特征 1。符合usb2.0全速设备的技术规范 2。可配置1到8个usb端口 3。CRC(循环荣誉校验)生成/检验,反向不归零(NRZI)编码/解码和位填充 4。支持同步传输 5。支持批量/同步端点的双缓冲区机制 6。支持usb挂起/恢复操作 7。诊所定时钟脉冲生成 注意:usb和can公用一个专用的512字节的SRAM存储器用于数据的发送和接收,因此不能同时使用usb和can(共享的SRAM被usb和can模块互斥的访问)usb和can可以同时用于一
[单片机]
学习笔记----<font color='red'>stm32</font>的usb外设概述
STM32 BootLoader跳转APP跑飞 可能是因为找不到某些中断函数入口
在做嵌入式产品时,有时为方便更新设备程序(如远程更新或者只更新模块程序等原因),就要用到bootloader对设备进行必要的初始化,引导下载APP等。 STM官网下载的bootloader程序中并没有用到定时器等,很可能遇不到下面的问题。但是小猿猴如我等,会迫不及待的对其进行“魔改”,再经过二手三手,再加上运气不好,下面的问题就很容易暴露出来了: 现象: bootloader 下载并跳转某些 app 程序时,app运行正常; 对于某些app来说,却根本跑不起来; app本身运行没有问题; bootlaoder+app运行,J-Link在线仿真时,发现报硬件错误; 原因之一: bootloader 中开启了某些中断(并编写了中断
[单片机]
STM32实现命令行
一、前言 工作中的开发环境都是基于linux命令行交互,作为命令行的重度使用者,玩单片机也要使用命令行工具,百度了一些命令行工具,有几个不错的开源 cmd 交互工具,主要看了 finsh和 nr_micro_shell 两个开源项目。Finsh 功能上限较多,但资源占用比较高,nr 有基本功能,且占用 MCU 资源较少,Github 给出的对比列表如下: Nr 和 Finsh 编译资源对比: 原始工程 添加nr_micro_shell增加量 添加finsh增加量 ROM 63660 +3832 +26908 RAM 4696 +1104 +1304 综合衡量了一下,移植 nr 作为后续项目的一个命令行交互。本篇文章分
[单片机]
在<font color='red'>STM32</font>实现命令行
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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