STM32F103系列单片机中断总结:概念和使用方法
发布日期:2021-05-07 02:09:29 浏览次数:34 分类:精选文章

本文共 2463 字,大约阅读时间需要 8 分钟。

文章目录

  • 前言
  • 一、中断の概念
    • 术语解释
    • 个人理解
  • 二、中断相关的寄存器及其设置方法 -寄存器概述 -中断优先级 -中断嵌套
  • 三、配置中断的步骤及其库函数 -配置步骤 -中断服务函数 -编写中断配置函数
  • 四、中断配置的模板

前言

中断是单片机处理程序运行中出现的“紧急事件”整个过程,程序运行过程中,系统外部、系统内部或者现行程序本身若出现紧急事件,单片机立即中止现行程序的运行,自动转入相应的处理程序(中断服务程序),待处理完后,再返回原来的程序运行,这整个过程称为程序中断。

中断可分为可屏蔽中断和不可屏蔽中断两类:可由程序控制其屏蔽的中断称为可屏蔽中断,屏蔽时,单片机将不接受中断(即不进入中断服务程序),反之,不能由程序控制其屏蔽,单片机一定要立即处理的中断称为不可屏蔽中断。


一、中断の概念

术语解释

中断可分为可屏蔽中断和不可屏蔽中断两类:可由程序控制其屏蔽的中断称为可屏蔽中断,屏蔽时,单片机将不接受中断(即不进入中断服务程序),反之,不能由程序控制其屏蔽,单片机一定要立即处理的中断称为不可屏蔽中断。


个人理解

通过对比学习法,中断可以类比委托式事件处理:为单片机的特定组件指定中断的触发条件,编写中断服务函数处理发生的中断,这样编写单片机程序时即可站得高,望得远,把握主流程,从细枝末节中抽身。


二、中断相关的寄存器及其设置方法

寄存器概述

core_cm3.h 中定义了 NVIC_Type 结构体,包含多个寄存器:

  • ISER:中断使能寄存器
  • ICER:中断清除寄存器
  • ISPR:中断使能悬起寄存器
  • ICPR:中断清除悬起寄存器
  • IABR:中断有效位寄存器
  • IP:中断优先级寄存器
  • STIR:软件触发中断寄存器

在配置中断时,通常只需使用 ISERICERIP 三个寄存器。

中断优先级

中断优先级由 NVIC_IPRx 寄存器控制,宽度为 8bit,每个外部中断可配置的优先级为 0~255,数值越小,优先级越高。

中断优先级分为抢占优先级(主优先级)和子优先级。为了管理优先级组,STM32F103系列支持四种优先级组:

  • NVIC_PriorityGroup_0:0 bits for pre-emption priority,4 bits for subpriority
  • NVIC_PriorityGroup_1:1 bits for pre-emption priority,3 bits for subpriority
  • NVIC_PriorityGroup_2:2 bits for pre-emption priority,2 bits for subpriority
  • NVIC_PriorityGroup_3:3 bits for pre-emption priority,1 bits for subpriority
  • NVIC_PriorityGroup_4:4 bits for pre-emption priority,0 bits for subpriority

通常选择 NVIC_PriorityGroup_2 作为默认优先级组。

中断嵌套

中断嵌套是指单片机正在执行中断1的服务函数过程中,接收到中断2的请求。中断2的主优先级如果低于中断1的主优先级,单片机会暂停中断1的服务函数,进入中断2的服务函数。若中断2的主优先级高于中断1的主优先级,则必须等待中断1的服务函数执行完毕才能响应中断2。


三、配置中断的步骤及其库函数

配置步骤

  • 确定中断源:根据外设类型确定中断源。例如,I2C、SPI、USART 等外设的发送完成、中断、接收完成中断,GPIO 的上升沿、下降沿中断,定时器的计时中断等。

  • 初始化 NVIC:使用 NVIC_InitTypeDef 结构体配置中断优先级分组,设置抢占优先级和子优先级,使能中断请求。

  • 编写中断服务函数:在 stm32f10x_it.c 中编写中断服务函数,确保函数名与启动文件预先设置的一致。

  • 使能外设中断:调用外设相关的中断使能函数。

  • 中断服务函数

    中断服务函数的实现步骤如下:

    // 示例中断服务函数
    void外设名_IRQHandler(void) {
    if ((外设名_GetITStatus(中断标志位) != RESET) {
    // 依据具体外设处理中断
    外设名_ClearITPendingBit(中断标志位);
    // 做不耗时操作
    }
    }

    四、中断配置的模板

    以下是一个中断配置的示例模板:

    /** 配置嵌套向量中断控制器NVIC */
    static void NVIC_Configuration(void) {
    NVIC_InitTypeDef NVIC_InitStructure;
    // 配置为优先级组2
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    // 设置中断源
    NVIC_InitStructure.NVIC_IRQChannel = 中断源;
    // 设置抢占优先级
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    // 设置子优先级
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    // 使能中断通道
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    }

    总结

    本文总结了 STM32F103 系列单片机中断的相关知识,包括中断的概念、寄存器配置方法、配置步骤以及中断服务函数的编写。通过本文,读者可以掌握中断的设置方法,并能够在实际项目中灵活应用。

    上一篇:广工电科0809考研经验&专业课资料
    下一篇:STM32的GPIO模式设置&两只三极管常见组合电路

    发表评论

    最新留言

    能坚持,总会有不一样的收获!
    [***.219.124.196]2025年05月08日 09时59分37秒