STM32F103学习笔记-中断与中断的控制

一、中断的定义及其种类

  中断是指当 CPU 执行程序时,由于发生了某种随机的事件(外部或内部),引起 CPU 暂时中断正在运行的程序转去执行一段特殊的服务程序(中断服务子程序或中断处理程序),以处理该事件,该事件处理完后又返回被中断的程序继续执行。其中,引发中断的随机事件被称为中断源。中断的示意图如下:


中断示意图

  另外,还有一种特殊的中断类型——中断嵌套,其指有些中断还能够被其他高优先级的中断所中断,即类似于C语言中的if嵌套。

  对于Cortex-M3系列来说,其内核支持256个中断,其中包含了16个内核中断和240个外部中断。但事实上,STM32F103并没有包含以上所有中断,它只有60个可屏蔽中断。这些中断中,除了三个优先级极高的中断为系统固定外,大部分中断优先级都可以由用户编程确定。

  具体中断类型、名称、说明都可以在《STM32F10X中文参考手册》-9 中断和事件上查找到,这里就不在赘述。

二、NVIC

  NVIC英文全称是Nested Vectored Interrupt Controller,中文意思就是嵌套向量中断控制器,它属于M3内核的一个外设,控制着芯片的中断相关功能。core_cm3.h内定义了NVIC结构体类型,内包括中断使能、中断清除、中断优先级在内的多种寄存器。

三、中断优先级

  中断优先级表示的是不同的中断在同时发生时,进行中断的优先顺序。STM32F103的中断优先级寄存器包含4位,而优先级又可分为抢占式优先级指定响应优先级,这就代表了两种优先级所占的位数可以有5种情况,如下:

STM32F103中断响应优先级分组

  其中,抢占优先级的优先性大于指定响应优先级(下简称“响应优先级”)。下将分两种情况讨论:

  1. 当两个中断同时发生时,系统将会先处理抢占优先级高的,若两中断抢占优先级相同,则先处理响应优先级高的;
  2. 在A中断程序运行时,B中断启动,则:若A的抢占优先级大于或等于B,则B中断程序暂不运行;若A的抢占优先级小于B,则A中断程序会停止运行,而B中断程序开始运行。

  由以上讨论,我们可以看出优先级的重要作用。那么我们应该如何配置优先级分组呢?

四、中断优先级分组的配置

  中断优先级分组的配置可以大致分为以下几步:

  1. 按照需要确定抢占优先级和响应优先级的相应位数
  2. 将NVIC中断相关的库文件misc.c和misc.h放置到工程中,以备调用
  3. 调用优先级分组配置库函数NVIC_PriorityGroupConfig()实现配置

  从STM32固件库使用手册中,我们可以查询到NVIC_PriorityGroupConfig()的相关信息,现摘录如下:

NVIC_PriorityGroupConfig()的相关信息

  而函数的形参u32 NVIC_PriorityGroup实质上就是第三节所述的优先级分组的五种类型,详情如下:

NVIC_PriorityGroup的值

五、中断配置

  作为偏重实用性的人,我对中断的内部机理并没有研究过于深入,而首先将目光放在了中断的配置上面,我们可以大致归纳出中断配置的几个步骤:

  1. 使能外设某个中断, 这个具体是由外设相关中断使能位来控制
  2. 设置中断优先级分组, 初始化 NVIC_InitTypeDef 结构体, 设置抢占优先级和响应优先级, 使能中断请求
  3. 编写中断服务函数

  该节所述的中断配置过程只是一个配置的大体思路,中断配置的相关操作将在日后的学习笔记中详细阐述。

六、中断的作用

  编者按:其实这段还是很难写的,因为作为一个对STM32F103系列的初学者,对中断的接触和了解还不够深入,而且由于对项目接触不深,对中断的使用也不是很清楚。所以这段会先写一点自己对中断应用的看法,后期随着对STM32F103的了解加深,再改动本节。

  由现象看本质,由定义看作用。中断作为一个能切换程序运行的重要操作,有以下几个作用:

  1. 及时终止损坏时钟、硬件系统的程序运行。我们从参考手册上可以看到,优先级为固定的几个中断都有保护时钟及硬件系统的终止作用。这说明中断是单片机的一种自我保护机制的体现
  2. 作为一种特殊的开关。我们可以看到,NVIC很重要的一个功能即是通过上升沿\下降沿来判断中断是否开启,若开启(且中断不被屏蔽)则进行中断程序。中断因为这种性质,故可以作为一种特殊的开关。
  3. 定时器的控制。利用中断可以构造一个定时器,当达到初始定时时间时,即开启中断完成中断程序。

  总而言之,中断是包括STM32在内的单片机系统里非常重要的一种操作。

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值