stm32-中断原理及代码解读

目录

一、综述

二、中断详解:

1NVIC:

1介绍

2中断优先级

2EXTI 

1介绍 

2原理分析   

 3中断处理函数


一、综述

        中断是什么,那么多中断由谁控制(NVIC),他是怎么被触发的(EXTI等)触发后发生什么。(中断处理函数)

二、中断详解:

        中断:程序运行中,出现特定触发条件(中断源),CPU暂停当前程序,转而去处理中断程序,处理完又返回原来被暂停的位置继续进行。

1NVIC:

1介绍

       向量中断控制器,控制着整个芯片中断相关功能。

2中断优先级

      事情有轻重缓急,中断也不能例外。面对多个中断同时发生的情况我们用优先级将他们划分成三六九等。于是高级有插队特权,低级只能默默等待。

        中断优先级寄存器NVIC_IPRx,IPR宽度为8位,在F103中,只使用了高4位。用于表达优先级的这4位,又被分成抢占优先级和子优先级两组。如果有多个中断同时响应,抢占优先级高的就会先于抢占优先级低的,优先得到执行,如果抢占优先级相同,就比较子优先级。如果抢占优先级和子优先级都相同的话,就比较它们的硬件中断编号,编号越小,优先级越高。

        一个中断优先级的具体配置我们放在一个结构体中。

typedef struct
{
  uint8_t NVIC_IRQChannel; //中断源                   
  uint8_t NVIC_IRQChannelPreemptionPriority; //抢占优先级 
  uint8_t NVIC_IRQChannelSubPriority;  //子优先级
  FunctionalState NVIC_IRQChannelCmd;   //中断使能 
} NVIC_InitTypeDef;
 

        分组:优先级的分组由内核外设SCB的应用程序中断及复位控制寄存器AIRCR的PRIGROUP [10:8]位决定,优先级分组可调用库函数NVIC_Priority Group Config()实现。

        于是我们得到了一个配置NVIC的模板:

NVIC_PriorityGroupConfig();
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = ;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= ;//抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = ;		//子优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQ通道使能
NVIC_Init(&NVIC_InitStructure);	//根据指定的参数初始化VIC寄存器

2EXTI 

1介绍 

        外部中断/事件控制器,管理了控制器的20个中断/事件线。

2原理分析   

框图

stm32-中断原理及代码解读_第1张图片

        先看起点和终点:1和5,8。换而言之:事件触发后可能产生两种结果。

        两种结果:5这一路代表产生了中断(与NVIC有关),8这一路表示产生了事件。

        它们对应函数为:(我们把他们都放进同一个结构体。)

EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line = ;//信号源
EXTI_InitStructure.EXTI_Mode = ;//中断或软件
EXTI_InitStructure.EXTI_Trigger = ;上升下降等
EXTI_InitStructure.EXTI_Line Cmd = ENABLE;
EXTI_Init(&EXTI_Init Structure);

        触发:以3为节点,我们看到了三种触发方式:上升沿,下降沿,软件。

        补充:3信号线上打一个斜杠并标注“20”字样,这个表示在,控制器内部类似的信号线路有20个。(其他斜杠同理)

        以1为节点:输入1的结构图20个信号线路其中通用I/O端口以下图的方式连接到16个外部中断/事件线上,另外四个EXTI线的连接方式如下: EXTI线16连接到PVD输出 EXTI线17连接到RTC闹钟事件 EXTI线18连接到USB唤醒事件 EXTI线19连接到以太网唤醒事件(只适用于互联型产品)

(16+4)

stm32-中断原理及代码解读_第2张图片

         我们看到所有Pn(1...15)通过AFIO过去,也就是说同一时间,A0,B0,C0...只有一路可以过去。

        实现这一功能对应函数为:

GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);

 3中断处理函数

        触发后会进入这里完成函数中的程序。在启动文件中 

        

你可能感兴趣的:(stm32基础知识,单片机,stm32,嵌入式硬件)