STM32学习(二)

一.NVIC介绍

NVIC被称为嵌套向量中断控制器,是STM32中掌管所有中断的控制者。NVIC在进行中断控制时,会根据程序员确定的优先级分组对各个中断予以相应,优先级分组与主优先级和子优先级之间之间的关系在手册中可以查出得到。

二.EXTI介绍

NVIC控制着各种中断,EXTI就是其中被NVIC控制的一种。EXTI被称为外部中断/事件控制器,管理控制器的20个中断/事件线,每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿检测。

                                              

由上图可知,外部产生的中断通过GPIO的输入到EXTI中,EXTI处理的结果再送入NVIC中,不过究竟是哪一个GPIO端口产生的中断需要AFIO进行选择。

三.EXTI软件编写

1.初始化GPIO(与上一节讲的内容一致)和AFIO

AFIO是选择哪一个GPIO端口产生的中断,它也是挂载在APB2总线上的

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);

2.初始化EXTI

①首先选择EXTI的信号源。这一步其实就是AFIO选择哪个GPIO端口产生的中断

GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource14);

②EXTI初始化

EXTI_InitTypeDef EXTI_InitStructure;                      
EXTI_InitStructure.EXTI_Line = EXTI_Line14;                 

EXTI_InitStructure.EXTI_LineCmd = ENABLE;                  
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;           
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;        
EXTI_Init(&EXTI_InitStructure);                                

3.NVIC配置

①首先对从EXTI来的中断进行中断分组,这一步是为了后续中如果有多种中断产生时可以合理地处理它们。

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

② NVIC初始化

NVIC_InitTypeDef NVIC_InitStructure;                       
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;        
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;            
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;    
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;         
NVIC_Init(&NVIC_InitStructure);                

在上述的①②③完成之后,当有外部中断产生时,CPU就会对其进行处理,中断主程序,跳转到中断产生位置执行相应的程序,至于跳转到的那个中断函数在触发中断时会自动跳转,无需软件编程。

但是,该中断函数的名称有严格的规定,具体在Start文件夹下的后缀为md.s的文件中可以查看,该函数名称不允许更改。 
  • 12
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值