STM32中断设置以及中断优先级设置-不含代码例程

本项目使用到的是STM32F030C8型号的MCU,我们可以从官方下载到的标准库文件中的启动汇编文件中,查看到本型号单片机的外部中断向量表。(如下图所示)

在这里插入图片描述

首先,我们了解一下NVIC是什么,在core_cm0.h文件中的标准库中的NVIC结构体。

在这里插入图片描述

其中,我们一般只用到ISER、ICER、IP这3个寄存器。ISER用于使能中断,ICER用来清除中断,IP用来设置中断优先级。

其次,我们了解一下中断优先级,中断优先级寄存器NVIC_IPRx,本寄存器宽度为8位,原则上每个外部中断可配置的优先级为0~255,实际上精简了,只用到了它的高4位。这4位,又被分成了抢占优先级和响应优先级两组,然后,中断优先级有分为以下几种情况:

1、抢占优先级不同,会涉及到中断嵌套,抢占优先级高的会优先抢占优先级低的,优先得到执行。(注意:优先级数字越小,优先级越高)

2、抢占优先级相同,不涉及到中断嵌套,响应优先级不同,响应优先级高的先响应。(例如:两个中断同时响应,这里就会先执行响应优先级高的那个中断)(注意:优先级数字越小,优先级越高

3、抢占优先级和响应优先级都相同,则比较它们的硬件中断编号,中断编号越小,优先级越高。(硬件中断编号从中断向量表当中查看)

中断优先级分组,因为中断优先级只使用了高4位,所以,中断优先级的分组分别有以下几种情况:

优先级分组抢占优先级响应优先级描述
NVIC_PriorityGroup_000到15的取值高4位全部是响应优先级,无抢占优先级
NVIC_PriorityGroup_10到1的取值0到7的取值抢占优先级为1位,响应优先级为3位
NVIC_PriorityGroup_20到3的取值0到3的取值抢占优先级为2位,响应优先级为2位
NVIC_PriorityGroup_30到7的取值0到1的取值抢占优先级为3位,响应优先级为1位
NVIC_PriorityGroup_40到15的取值0高4位全部是抢占优先级,无响应优先级

最后,总结一下中断编程的三步曲:

第一步:使能外设某个中断,具体由对应的中断使能位控制。

(例如:我们使用到GPIO之前必须开启GPIO端口的时钟,用到EXTI必须开启AFIO时钟)

第二步:初始化NVIC_InitTypeDef结构体,配置中断优先级分组,设置抢占优先级和响应优先级,使能中断请求。

库函数:

NVIC_IRQChannel()设置不同的中断源,在IRQn_Type IRQn结构体寻找自己对应的中断源。

NVIC_IRQChannelPreemptionPriority()设置抢占优先级

NVIC_IRQChannelCmd() 中断使能或者取消使能

第三步:编写中断服务函数,在stm32f0xx_it.c文件中,都有一个根据中断向量表,实现的一个空的中断服务函数,需要我们自己重新编写。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ltqshs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值