STM32-中断优先级

   中断作为系统资源里面尤为重要的一种系统资源,可以对于硬件的运行发挥着不可或缺的地位。基本每一个硬件都会有相应的中断,只不过是中断类型和中断数量多少的问题。像51单片机的硬件就拥有比较简单中断类型,例如定时器中断、串口接收中断、外部中断等几个简单中断,用起来也是十分简单。
   对于STM32来说因为它使用的基于M3和M4的内核,就M3内核而言,支持256个中断其中包含了16个内核中断和240个外部中断,而且具有256级的可编程中断设置。但是STM32并没有将这些中断都添加到自身的硬件资源中而是使用了其中的部分中断,一种拥有84个中断,包括了16个内核中断和68个可屏蔽中断,具有16级可编程的中断优先级。103系列只有60个可屏蔽中断。可见下图:
这里写图片描述
这里写图片描述
上图包含了103系列的60个全部中断,但是如何使用呢?这么多的中断如果准确的使用呢?其实使用起来还是相对简单的,首先STM32将所有的中断进行分组,给每个中断添加两个属性,可以称为先占优先级和从优先级。具体区别可以去百度一下。需要记住的是如果需要使用中断在系统开始或者初始化的时候就要将系统的中断分组设置好,而且不宜更改。如果更改可能会出现中断系统的麻烦。先来看一下中断相关的寄存器和函数表:
这里写图片描述
这里写图片描述
第一步先初始化中断优先级分组利用NVIC_PriorityGroupConfig()
具体参数可以参照手册,一共有5种模式分别对应不同的先占优先级和从优先级。
这里写图片描述

设置好优先级就可以对每个中断进行单独的设置了假设我想对我的串口中断进行设置,使用void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);就可以了。这样才能在每个中断程序中使能或者打开对应的相应中断的对应中断函数。

#include "stm32f10x.h"
#include "GPIO.h"
#include "USART.h"
#include "SysTick.h"
#include "NVIC.h"

int main()
{   
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);     //设置中断优先级的分组
        NVIC_init(USART1_IRQn,1,1,ENABLE);                              //设置串口中断的优先级和从优先级并使能
        //在串口初始化函数中使能串口接收中断 并在接收中断函数中填写相应代码
        UART_init(115200,USART_WordLength_8b,USART_StopBits_1,USART_Parity_No,USART_Mode_Tx|USART_Mode_Rx);
        SysTick_init();
        while(1)
        {
            delay_ms(1000);
            delay_ms(1000);
            printf("sss");
            delay_ms(1000);
            delay_ms(1000);
        }

}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值