嵌入式02 STM32 实验11 NVIC和中断总结

一、基础知识

  1、cortex-m3支持256个中断,其中包含了16个内核中断,240个外部中断

  2、STM32只有84个中断,包括16个内核中断和68个可屏蔽中断

  3、STM32F103上只有60个可屏蔽中断(本文重点讲解F103)

  4、先占优先级和次占优先级

    先占优先级(抢占优先级):抢占优先级不同,会涉及到中断嵌套抢占优先级高的会优先抢占优先级低的,优先得到执行。抢占优先级相同,不涉及到中断嵌套,响应优先级不同,响应优先级高的先响应。

    次占优先级(响应优先级/亚优先级/副优先级):只在同一先占优先级中的中断同时触发时起作用先占优先级相同,则优先执行响应优先级高的中断次占优先级不会造成中断嵌套,如果两个优先级都一样,则优先执行中断向量表中编号小的(中断编号越小,优先级越高)

    中断优先级高低判断:优先级数字越小,优先级越高。

  5、挂起:当位置中断挂起寄存器的时候,相应的中断将会被挂起,这不是这个中断不执行,而是等待可执行的时候再执行;比如高低级别的中断同时产生,就挂起低级别的中断,等高级别的中断执行完毕,解除并执行低级中断。

二、NVIC(嵌套向量中断控制器)

  用于为中断分组,从而分配抢占优先级和响应优先级

              ***中断优先级参数表***

  

三、中断程序设计四步

  A、使能相应外设时钟,根据对应的中断使能位控制

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);     //相应的外设时钟使能

  B、配置中断优先级分组

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //设置NVIC中断分组2(2位抢占优先级,2位响应优先级)

  C、初始化NVIC_InitTypeDef结构体,根据上方设置的中断优先级分组来配置抢占优先级和相应优先级,并使能相应的通道

   NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;           //TIM3中断
   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;        //先占优先级0级
   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;          //从优先级3级
   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;        //中断使能或取消使能
   NVIC_Init(&NVIC_InitStructure);                   //初始化NVIC寄存器

  D、编写中断服务函数,在startup_stm32f10x_hd.s文件中,都有一个根据中断向量表设置的空的中断服务函数,需要我们重新编写,我们拷贝过来根据自己想要实现的内容编写。

原文地址:https://www.cnblogs.com/ksht-wdyx/p/11668143.html