• stm32之中断


    1.中断的概念

    简单来说,中断就是可以打断真正执行的程序,让它先执行,当然,这个打断不是绝对的,权限没有别人高就打断不了。中断可以简单理解为信号,事件是脉冲。

    想了解中断详细内容,可以看下面的这篇博客。

    linux 0.11内核源码之中断_@seven@的博客-CSDN博客_linux中断源码

    2. NVIC 简介

    NVIC 是嵌套向量中断控制器,控制着整个芯片中断相关的功能,它跟内核紧密耦合,是内核里面的一个外设。但是各个芯片厂商在设计芯片的时候会对 Cortex-M3 内核里面的 NVIC 进行裁剪,把不需要的部分去掉,所以说 STM32的 NVIC 是 Cortex-M 3 的 NVIC 的一个子集。

    2.1.NVIC 的结构体定义

    1. typedef struct {
    2. __IO uint32_t ISER[8]; // 中断使能寄存器
    3. uint32_t RESERVED0[24];
    4. __IO uint32_t ICER[8]; // 中断清除寄存器
    5. uint32_t RSERVED1[24];
    6. __IO uint32_t ISPR[8]; // 中断使能悬起寄存器
    7. uint32_t RESERVED2[24];
    8. __IO uint32_t ICPR[8]; // 中断清除悬起寄存器
    9. uint32_t RESERVED3[24];
    10. __IO uint32_t IABR[8]; // 中断有效位寄存器
    11. uint32_t RESERVED4[56];
    12. __IO uint8_t IP[240]; // 中断优先级寄存器 (8Bit wide)
    13. uint32_t RESERVED5[644];
    14. __O uint32_t STIR; // 软件触发中断寄存器
    15. } NVIC_Type;

    在配置中断的时候,这么多寄存器,我们一般只用 ISER、ICER 和 IP 这三个寄存器,ISER 用来使能中断,ICER 用来失能中断,IP 用来设置中断优先级。

    2.1.1.优先级

    在 NVIC 有一个专门的寄存器:中断优先级寄存器 NVIC_IPRx,用来配置外部中断的优先级,IPR
    宽度为 8bit,原则上每个外部中断可配置的优先级为 0~255,数值越小,优先级越高。但是绝大
    多数 CM3 芯片都会精简设计,以致实际上支持的优先级数减少,在 F103 中,只使用了高 4bit

     用于表达优先级的这 4bit,又被分组成抢占优先级和子优先级。如果有多个中断同时响应,抢占
    优先级高的就会抢占抢占优先级低的优先得到执行,如果抢占优先级相同,就比较子优先级。如
    果抢占优先级和子优先级都相同的话,就比较他们的硬件中断编号,编号越小,优先级越高

     优先级的分组由内核外设 SCB 的应用程序中断及复位控制寄存器 AIRCR 的 PRIGROUP[10:8] 位
    决定,F103 分为了 5 组。

    2.2. NVIC 的函数

     函数都在这两个文件里面 

     3.中断编程

     安装上图的步骤进行配置使用即可。

    3.1.使能中断请求

    一.外设寄存器的使能

    二.NVIC寄存器的使能

    3.2.中断优先级

    1.分组 

    3.3初始化NVIC结构体 

    调用初始化函数

    3.4.中断服务函数

    函数名称,在向量表里面就已经确定了,要注意,写错了名字,编译器找不出来的。

    中断服务函数,一般写在stm32f10x_it.c文件里面。

     4.EXTI 简介

    EXTI(External interrupt/event controller)—外部中断/事件控制器,管理了控制器的 20 个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的
    检测。EXTI 可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触
    发事件的属性。

    4.1.EXTI框图

    红色:中断

    绿色:事件 

    EXTI:主要是配置寄存器模式,以及中断线。

     

     4.1.EXTI结构体

     AFIO寄存器确定是GPIO的引脚

     5.中断编程

    1)初始化时钟

    2) 初始化用来产生中断的 GPIO;
    3) 初始化 EXTI;
    4) 配置 NVIC;
    5) 编写中断服务函数;

    建议先配置NVIC,再配置EXTI,再配置中断线 (GPIO)

    5.1.编程

      初始化配置

     中断服务函数:

    注意:函数名字是在启动文件的向量表里面找,一定要对,不然就无法调用 

  • 相关阅读:
    树莓派使用docker搭建owncloud私有云--外挂硬盘
    湖北大学2024年成人高考函授报名高起专大数据与会计专业介绍
    【附源码】Python计算机毕业设计日租房管理系统
    Spring 从入门到精通 (二十二) 整合持久层框架细节
    Redis-企业级解决方案
    二维码登录的原理
    Nginx的进程结构
    Android 基础知识3-3(九妹)图怎么用呢?
    亚马逊、OZON、速卖通等跨境电商平台卖家怎样快速提高产品权重?
    Linux操作文档——jumpserver平台系统部署与使用
  • 原文地址:https://blog.csdn.net/m0_46392035/article/details/126942104