stm32之中断系统

简介: 概述: 提供中断控制器,用于总体管理异常,称之为“嵌套向量中断控制器:Nested Vectored Interrupt Controller (NVIC)   VIC:中断管理器;   NVIC:内嵌中断管理器,将中断嵌套进入内核;     带来的优势:1、响应速度提高;        ...

概述:

提供中断控制器,用于总体管理异常,称之为“嵌套向量中断控制器:Nested Vectored Interrupt Controller (NVIC)

  VIC:中断管理器;

  NVIC:内嵌中断管理器,将中断嵌套进入内核;

    带来的优势:1、响应速度提高;

          2、标准化,统一管理;

  stm32创新:所以IO口都可以中断;

  stm32的中断向量表:一个中断源,对应的地址、优先级等信息;

具体参见stm32的文档:

        

NVIC中断优先级:

  中断优先级高的中断可以抢占中断优先级低的中断,从而实现了中断嵌套;

  STM32中有两个优先级的概念-------抢占式优先级(主优先级)和响应优先级(从优先级),每个中断源都需要被指定这两种优先级,具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理的中断过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断;

  当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到了时,如果cpu正在处理另一个中断,这个后到的中断就要等到前一个中断处理完之后才能被处理;(从优先级不能抢占关系)

  如果这两个中断同时到达而从优先级不同时,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;

  如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪个中断;  

  

Cortex-m3允许具有较少中断源时,使用较少的寄存器位指定中断源的优先级,因此STM32把中断优先级的寄存器位由8位减少到4位,这4个寄存器位的分组方式如下:

  第0组:所以4位用于指定响应优先级;

  第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级;

  第2组:最高2位用于指定抢占式优先级,最低2位用于响应优先级;

  第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级;

  第4组:所以4位用于指定抢占式优先级;

以上设置可以调用固件库函数中的NVIC_PriorityGroupConfig()选择使用哪种优先级分组方式;

 (NVIC_PriorityGroup_0,  NVIC_PriorityGroup_1,  NVIC_PriorityGroup_2, NVIC_PriorityGroup_3, NVIC_PriorityGroup_4)

  typedef  struct

  {

    u8  NVIC_IRQChannel;  //中断通道号;

    u8  NVIC_IRQChannelPreemptionPriority;  //主优先级

    u8  NVIC_IRQChannelSubPriority;      //从优先级

    FunctionalState NVIC_IRQChannelCmd;    //是否使能

  }NVIC_InitTypeDef;

外部中断:

            

另外三种其他的外部中断/事件控制器连接如下:

    EXTI线16连接到PVD输出;

    EXTI线17连接到RTC闹钟事件;

    EXTI线18连接到USB唤醒事件;

外部中断配置:

  外部中断/事件控制器由19个产生事件/中断要求的边沿检测器组成。每个输入线可以独立地
配置输入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。每
个输入线都可以被独立的屏蔽。挂起寄存器保持着状态线的中断要求。

硬件中断选择:
通过下面的过程来配置19个线路做为中断源:
  􀁺   配置19 个中断线的屏蔽位(EXTI—IMR)
  􀁺   配置所选中断线的触发选择位(EXTI_RTSR 和EXTI_FTSR);
  􀁺   配置那些控制映像到外部中断控制器(EXTI)的NVIC 中断通道的使能和屏蔽位,使得19个中断线中的请求可以被正确地响应。
硬件事件选择
  通过下面的过程,可以配置19个线路为事件源
  􀁺   配置19 个事件线的屏蔽位(EXTI_EMR)
  􀁺   配置事件线的触发选择位(EXTI_RTSR and EXTI_FTSR)
软件中断/事件的选择
  19个线路可以被配置成软件中断/事件线。下面是产生软件中断的过程:
  􀁺   配置19 个中断/事件线屏蔽位(EXTI_IMR, EXTI_EMR)
  􀁺   设置软件中断寄存器的请求位(EXTI_SWIER)

相关寄存器:

  中断屏蔽寄存器(EXIT_IMR):

  上升沿触发中断寄存器()

  下降沿触发中断寄存器()

  软件中断事件寄存器(EXTI_SWIER)

  挂起寄存器(EXTI_PR)

 

中断编程逻辑:

  1、时钟配置;

  2、GPIO配置;

  3、如果用外部中断的话,配置EXTI配置;(选择那个IO口、清除中断标志、中断触发模式、)

  4、中断都是受内嵌的NVIC管理;所以要配置NVIC模块,(Group优先级配置,指定中断信息);

  5、在对应的位置编写中断服务子程序;

  

相关文章
|
2月前
STM32F103标准外设库——SysTick系统定时器(八)
STM32F103标准外设库——SysTick系统定时器(八)
72 0
STM32F103标准外设库——SysTick系统定时器(八)
|
4月前
|
传感器 数据采集 物联网
基于STM32的光敏传感器数据采集系统-嵌入式系统与设计课程设计2
基于STM32的光敏传感器数据采集系统-嵌入式系统与设计课程设计
218 0
|
1月前
|
存储 C语言 芯片
C/C++ stm32基础知识超详细讲解(系统性学习day14)
C/C++ stm32基础知识超详细讲解(系统性学习day14)
|
3月前
|
芯片
嵌入式系统中STM32时钟系统详解
嵌入式系统中STM32时钟系统详解
47 0
|
4月前
|
传感器 数据采集 物联网
基于STM32的光敏传感器数据采集系统-嵌入式系统与设计课程设计1
基于STM32的光敏传感器数据采集系统-嵌入式系统与设计课程设计
236 0
|
19天前
|
芯片
嵌入式STM32中时钟系统详细分析
嵌入式STM32中时钟系统详细分析
60 0
嵌入式STM32中时钟系统详细分析
|
6月前
|
存储 索引
STM32实战项目—停车计费系统
本文详细介绍了一个停车计费系统的任务要求,实现思路。最后,给出了详细的程序设计和测试结果。
131 2
STM32实战项目—停车计费系统
|
6月前
STM32实战项目—楼宇人员计数系统
本文介绍了一个基于红外对管的楼宇人员计数系统设计。简单介绍了一下红外对管的原理和使用方法。针对任务要求给出了详细的实现思路和程序设计。
33 3
STM32实战项目—楼宇人员计数系统
|
6月前
|
芯片
STM32速成笔记(四)—中断
本文介绍了中断的概念,中断的相关名词,STM32外部中断配置方法以及使用中断的注意事项。给出了外部中断点亮LED程序设计思路和关键代码。
164 0
STM32速成笔记(四)—中断