stm32中断设置

NVIC优先级分组方式

中断可分为内核中断、内核外设中断和外部外设中断。
stm32使用4位来设置中断优先级分组,就是说可以设置5种不同优先级设置方式。
主优先级不同时,正在执行低优先级中断时高优先级中断进入,高优先级中断会破坏低优先级中断;主优先级相同时,会等低优先级中断完成再执行高优先级中断;当两个中断设置的优先级相同时,通过中断映射寄存器地址确定先执行哪个。
通过NVIC_PriorityGroupConfig(NVIC_PriorityGroup_x)可以设置中断优先级分组方式。

void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)
{
  /* Check the parameters */
  assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup));
  /* Set the PRIGROUP[10:8] bits according to NVIC_PriorityGroup value */
  SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup;
}

在NVIC_PriorityGroupConfig函数中可以看到,实际的优先级设置是写在SCB寄存器的AIRCR中的。这个优先级分组是对内核和外部外设中断都通用的。其中内核外设会有一个默认值。
在这里插入图片描述

外部中断设置方法

首先要在RCC中开启相应外设时钟,之后使用结构体对外设进行初始化,在NVIC_Init()函数中对相应的外设进行初始化,设置优先级,开启外设中断要使用的中断标志,编写中断服务程序。

内核外设中断设置方法

外部中断要设置NVIC_InitStructure结构体、在NVIC中使能相应外设,再用NVIC_Init()进行初始化。
内核中断有默认的优先级编号,不用像外设一样自己用结构体配好在初始化,只要直接调用库函数初始化就行。
内核外设初始化函数应该在core_cm3.h中,如果要自己修改寄存器设置的话最好不要直接在core_cm3.h中的初始化函数中改。另外,内核外设已经配有默认的中断优先级,如果要修改的话,应该在调用完初始化函数后用NVIC_SetPriority()函数直接修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值