STM32_中断

2023-05-16

STM32——中断

一.介绍

1.1解释

打断CPU执行正常的程序,转而处理紧急程序,然后返回原暂停的程序继续运行,就叫中断

1.2作用和意义

作用:

实时控制:在确定时间内对相应事件作出响应,如:温度监控

故障处理:检测到故障,需要第一时间处理,如:电梯门夹人了

数据传输:不确定数据何时会来,如:串口数据接收

意义:

高效处理紧急程序,不会一直占用CPU资源

1.3流程简图

信号接入后通过AFIO接入EXTI,由NVIC进行中断配置

二.NVIC

2.1基本概念

2.1.1NVIC

STM32型号

内核中断

外部中断

中断优先级

STM32F103xx

10

60

16

STM32F407xx

10

82

16

STM32F429xx

10

91

16

STM32F750xx

10

98

16

STM32F767xx

10

110

16

STM32H743xx

10

150

16

STM32H750xx

10

150

16

Nested vectored interrupt controller,嵌套向量中断控制器,属于内核

NVIC支持:256个中断(16内核 + 240外部),支持:256个优先级,允许裁剪!

2.1.2中断向量列表

定义一块固定的内存,以4字节对齐,存放各个中断服务函数程序的首地址

中断向量表定义在启动文件,当发生中断,CPU会自动执行对应的中断服务函数

2.2NVIC寄存器

NVIC相关寄存器

位数

寄存器个数

备注

中断使能寄存器(ISER)

32

8

每个位控制一个中断

中断除能寄存器(ICER)

32

8

每个位控制一个中断

应用程序中断及复位控制寄存器(AIRCR)

32

1

位[10:8]控制优先级分组

中断优先级寄存器(IPR)

8

240

8个位对应一个中断,而STM32只使用高4位

2.3NVIC工作原理

2.4NVIC中断优先级

  1. 抢占优先级(pre):高抢占优先级可以打断正在执行的低抢占优先级中断

  1. 响应优先级(sub):当抢占优先级相同时,响应优先级高的先执行,但是不能互相打断

  1. 抢占和响应都相同的情况下,自然优先级越高的,先执行

  1. 自然优先级:中断向量表的优先级

  1. 数值越小,表示优先级越高

抢占优先级>响应优先级

优先级分组

AIRCR[10:8]

IPR****x **bit[7:4]**分配

分配结果

0

111

None :[7:4]

0位抢占优先级,4位响应优先级

1

110

[7] :[6:4]

1位抢占优先级,3位响应优先级

2

101

[7:6] :[5:4]

2位抢占优先级,2位响应优先级

3

100

[7:5] :[4]

3位抢占优先级,1位响应优先级

4

011

[7:4] :None

4位抢占优先级,0位响应优先级

2.5NVIC的使用

功能

HAL

设置中断分组

HAL_NVIC_SetPriorityGrouping

设置中断优先级

HAL_NVIC_SetPriorit

使能中断

HAL_NVIC_EnableIRQ

三.EXTI

3.1基本概念和特性

概念:External(Extended) interrupt/event Controller,外部(扩展)中断事件控制器

中断和事件的理解:

中断:要进入NVIC,有相应的中断服务函数,需要CPU处理

事件:不进入NVIC,仅用于内部硬件自动控制的,如:TIM、DMA、ADC

EXTI支持的外部中断/事件请求

中断线

F1

F4

F7

H7

EXTI线0~15:对应GPIO PIN 0~15

EXTI线16:PVD输出

参考H7参考手册(中文版)657页

EXTI线17:RTC闹钟事件

EXTI线18:USB OTG FS唤醒事件

EXTI线19:以太网唤醒事件

EXTI线20:USB OTG HS唤醒事件

EXTI线21:RTC 入侵和时间戳事件

EXTI线22:RTC 唤醒事件

EXTI线23:LPTIM1 异步事件

特性:

F1/F4/F7系列每条EXTI线都可以单独配置:选择类型(中断或者事件)、触发方式(上升沿,下降沿或者双边沿触发)、支持软件触发、开启/屏蔽、有挂起状态位

H7系列由其它外设对 EXTI 产生的事件分为可配置事件和直接事件。可配置事件:简单概括,基本和F1/F4/F7系列类似直接事件:固定上升沿触发、不支持软件触发、无挂起状态位(由其它外设提供)

3.2基本原理

边沿检测:检测信号进入后,判断是否满足触发,如果不满足则边沿检测电路不可通过

软件触发:当无输入信号时,通过软件触发,或门即可通过

中断屏蔽/清除:产生中断时会挂起寄存器并给标志位置一

事件屏蔽:事件寄存器置一后进入脉冲发生器

3.3EXTI和IO的映射

3.3.1 AFIO

Alternate Function IO,即复用功能IO,主要用于重映射和外部中断映射配置

功能

介绍

调试IO配置

配置JTAG/SWD的开关状态

重映射配置

部分外设IO重映射配置

外部中断配置

配置EXTI中断线0~15对应具体哪个IO口

特别注意:

配置AFIO寄存器之前要使能AFIO时钟,方法如下:__HAL_RCC_AFIO_CLK_ENABLE();

3.3.2 SYSCFG

System configuration controller,即系统配置控制器,用于外部中断映射配置等

特别注意:

配置SYSCFG寄存器之前要使能SYSCFG时钟,方法如下:__HAL_RCC_SYSCFG_CLK_ENABLE();

3.3.3EXTO与IO关系

Px0映射到EXTI0 Px1映射到EXTI1 ...Px14映射到EXTI14 Px15映射到EXTI15

四.中断使用

4.1流程图

4.2 STM32 EXTI的配置步骤(外部中断)

步骤

操作

解释

1

使能GPIO时钟

使能GPIO时钟

2

设置GPIO输入模式

上/下拉/浮空输入

3

使能AFIO/SYSCFG时钟

设置AFIO/SYSCFG时钟开启寄存器

4

设置EXTI和IO对应关系

选择PA~PK到底哪组IO对应EXTI输入线,AFIO_EXTICR/ SYSCFG_EXTICR

5

设置EXTI屏蔽,上/下沿

设置EXTI对应通道的屏蔽和上升沿/下降沿触发,IMR、 RTSR/FTSR

6

设置NVIC

分3步,见前面内容,即:设置优先级分组、设置优先级、使能中断

7

设计中断服务函数

编写对应中断的中断服务函数!清中断标志!

步骤2 - 5使用HAL_GPIO_Init一步到位

4.3 STM32 EXTI的HAL库设置步骤(外部中断)

步骤

操作

解释

1

使能GPIO时钟

使用:__HAL_RCC_GPIOx_CLK_ENABLE

2

GPIO/AFIO(SYSCFG)/EXTI

使用:HAL_GPIO_Init,一步到位

3

设置中断分组

使用:HAL_NVIC_SetPriorityGrouping,此函数仅需设置一次!

4

设置中断优先级

使用: HAL_NVIC_SetPriority

5

使能中断

使用: HAL_NVIC_EnableIRQ

6

设计中断服务函数

编写:,中断服务函数,清中断标志!

STM32仅有:EXTI0~4、EXTI9_5、EXTI15_10,7个外部中断服务函数

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32_中断 的相关文章

  • STM32在Debug时程序运行时间不对,Debug时定时器中断每次进入断点时间不对,定时器一开启就进入中断的解决办法

    一 Debug时程序时间不对解决办法 1 点击魔术棒 2 点击Debug 点击Settings 3 点击Trace 在Core Clock里修改为你的系统时钟 二 Debug时定时器中断每次进入断点时间不对 在Debug时 程序停下来 定时
  • 处理器指令周期执行时间

    我的猜测是 no operation 内在 ARM 指令应花费 1 168 MHz 来执行 前提是每个NOP在一个时钟周期内执行 我想通过文档验证这一点 有关处理器指令周期执行时间的信息是否有标准位置 我试图确定 STM32f407IGh6
  • STM32 F072上的软件如何跳转到bootloader(DFU模式)?

    STM32应用笔记2606对此进行了讨论 但没有简单的代码示例 该答案已使用 IAR EWARM 在 STM32F072 Nucleo 板上进行了测试 这个答案使用 STM32标准外设库 仅此而已 请注意 验证您是否成功进入引导加载程序模式
  • 135-基于stm32单片机超声波非接触式感应水龙头控制系统Proteus仿真+源程序

    资料编号 135 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 电机 超声波传感器 制作一个基于stm32单片机超声波非接触式感应水龙头控制系统Proteus仿真 2 通过DHT11传感器检测当前
  • HAL库STM32常用外设教程(二)—— GPIO输入\输出

    HAL库STM32常用外设教程 二 GPIO输入 输出 文章目录 HAL库STM32常用外设教程 二 GPIO输入 输出 前言 一 GPIO功能概述 二 GPIO的HAl库驱动 三 GPIO使用示例 1 示例功能 四 代码讲解 五 总结
  • rt-thread studio中新建5.0不能用

    文章目录 一 版本对比 二 文件和文件夹打斜杠 在使用RT Thread studio创建新工程5 0版本的时候 结果发现新建完成之后程序不能正常运行 但是创建4 10版本的时候却能运行 那肯定是新版本出现了BUG 一 版本对比 首先对比了
  • STM32用一个定时器执行多任务写法

    文章目录 main c include stm32f4xx h uint32 t Power check times 电量检测周期 uint32 t RFID Init Check times RFID检测周期 int main Timer
  • STM32超声波——HC_SR04

    文章目录 一 超声波图片 二 时序图 三 超声波流程 四 单位换算 五 取余计算 六 换算距离 七 超声波代码 一 超声波图片 测量距离 2cm 400cm 二 时序图 1 以下时序图要先提供一个至少10us的脉冲触发信号 告诉单片机我准备
  • [屏驱相关]【SWM166-SPI-Y1.28C1测评】+ 有点惊艳的开箱

    耳闻华芯微特许久了 看到论坛得评测活动赶紧上了末班车 毕竟对有屏幕得板子也是很喜欢得 京东快递小哥客客气气 微笑着把快递给了我 好评 直接拆了包 在此之前没看过视频号 所以这个圆盘盘得模具还是有点惊喜的 正面照如下 开机有灯光秀 还有动画
  • [MM32硬件]搭建灵动微MM32G0001A6T的简易开发环境

    作为学习单片机的经典 自然是通过GPIO点亮LED 或者是响应按钮的外部中断例程 这我们看看SOP8封装的芯片MM32G0001A6T得引脚 除了VDD和GND固定外 我们可以使用PA14 PA1 PA13 PA15 PA2 PA3这六个G
  • 解决KEIL编译慢问题

    两种方案 使用v6版本的ARM Compiler 如果v6版本编译不过 必须使用v5版本的 则可以勾选掉Browse Information选项 提升很明显 1分多钟能优化到几秒 看代码量 但是这个有个弊端 在KEIL中会影响函数跳转 建议
  • 1.69寸SPI接口240*280TFT液晶显示模块使用中碰到的问题

    1 69寸SPI接口240 280TFT液晶显示模块使用中碰到的问题说明并记录一下 在网上买了1 69寸液晶显示模块 使用spi接口 分辨率240 280 给的参考程序是GPIO模拟的SPI接口 打算先移植到FreeRtos测试 再慢慢使用
  • 1.69寸SPI接口240*280TFT液晶显示模块使用中碰到的问题

    1 69寸SPI接口240 280TFT液晶显示模块使用中碰到的问题说明并记录一下 在网上买了1 69寸液晶显示模块 使用spi接口 分辨率240 280 给的参考程序是GPIO模拟的SPI接口 打算先移植到FreeRtos测试 再慢慢使用
  • STM32F207 I2C 测试失败

    我正在使用 STM32F207 微控制器在 STM3220G EVAL 板上学习嵌入式开发 我尝试通过连接同一芯片上的两个 I2C2 和 I2C3 模块并发送 接收字符来测试 I2C 接口 这是我当前编写的代码 使用 mdk arm 5 i
  • STM32H5 Nucleo-144 board开箱

    文章目录 开发板资料下载 目标 点亮LD1 绿 LD2 黄 和LD3 红 三个LED灯 开箱过程 博主使用的是STM32CubeMX配置生成代码 具体操作如下 打开STM32CubeMX File gt New project 选择开发板型
  • 特殊寄存器

    特殊寄存器 文章目录 前言 一 背景 二 2 1 2 2 总结 前言 前期疑问 STM32特殊寄存器到底是什么 特殊寄存器怎么查看和调试代码 本文目标 记录和理解特殊寄存器 一 背景 最近在看ucosIII文章是 里面提到特殊寄存器 这就进
  • 从没有中断引脚并且在测量准备好之前需要一些时间的传感器读取数据的最佳方法

    我正在尝试将压力传感器 MS5803 14BA 与我的板 NUCLEO STM32L073RZ 连接 根据 第 3 页 压力传感器需要几毫秒才能准备好读取测量值 对于我的项目 我对需要大约 10 毫秒来转换原始数据的最高分辨率感兴趣 不幸的
  • STM32 上的 ADC 单次转换

    我正在研究 STM32 F103x 上的 ADC 编程 并从最简单的情况 单次转换开始 测量内部温度传感器 连接到 ADC1 的值 并使用 USART 将其发送到 COM 端口 目标似乎很明确 但是当我尝试将源代码下载到闪存时 它不会向 C
  • 在 Contiki 程序中使用 malloc

    考虑以下 Contiki 程序 include
  • 当端点和 PMA 地址均更改时,CubeMX 生成的 USB HID 设备发送错误数据

    我正在调试我正在创建的复合设备的问题 并在新生成的仅 CubeMX 代码中重新创建了该问题 以使其更容易解决 我添加了少量代码main 让我发送 USB HID 鼠标点击 并在按下蓝色按钮时使 LED 闪烁 uint8 t click re

随机推荐

  • FreeRTOS — 消息队列

    以下内容转载自安富莱电子 xff1a http forum armfly com forum php FreeRTOS 的一个重要的通信机制 消息队列 xff0c 消息队列在实际项目中应用较多 1 消息队列 1 1 消息队列的概念及其作用
  • 学校人力资源管理系统——物理结构设计

    新 建学校人力资源管理系统 数据库 1 创建相关表 1 1 创建部门信息表 部门信息表的创建代码如下 xff0c 部门信息表在SQL中的信息显示如图6 1所示 create table 部门信息表 部门编号 char 6 not null
  • python 安装serial模块

    想用Python来实现对串口的控制 xff0c 写好了脚本 xff0c 现在将这个脚本拿到另外一个电脑上去运行 xff1b 运行时提示错误 xff0c 说是没有安装serial模块 xff0c 于是乎安装 pip install seria
  • Doxygen使用教程(个人总结)

    简介Doxygen 一 xff0e 什么是Doxygen Doxygen 是一个程序的文件产生工具 xff0c 可将程序中的特定批注转换成为说明文件 通常我们在写程序时 xff0c 或多或少都会写上批注 xff0c 但是对于其它人而言 xf
  • STM32F401 I2S(full duplex)全双工示例代码

    USER CODE BEGIN Header 64 file main c 64 brief Main program body This notice applies to any and all portions of this fil
  • 一、认识与学习Linux中的BASH 之 1.1 什么是bash

    1 1 什么是bash 1 1 1 什么是bash bash全称为The Bourne Again shell xff0c 是Bourne Shell的扩展 xff0c 是基于GUN构架发展出来的语言 xff0c 有很灵活和强大的编程接口
  • 阿里云ECS服务器环境搭建(1) —— ubuntu 16.04 图形界面的安装

    阿里云ECS服务器环境搭建 xff08 1 xff09 ubuntu 16 04 图形界面的安装 1 背景 在我们购买阿里云ECS服务器之后 xff0c 默认的系统环境是很干净的 xff0c 我购买的是ubuntu16 04 xff0c 远
  • Python+pandas+每天股票涨了多少

    第一步 xff1a 得到某支股票历年来的交易数据 方法见 xff1a https blog csdn net zwy 0309 article details 108217342 在此 xff0c 我使用以下脚本得到股票 xff08 代码
  • 2021-06-02

    在ROS中仿真模型中添加gps传感器 获取gps传感器模型包为自己的机器人添加gps传感器将gps之中的经度纬度坐标转化为自己地图中的坐标 1 获取gps传感器模型包 link http wiki ros org hector gazebo
  • Dockerfile如何编写(指令详解)

    本文个人博客地址 xff1a https www leafage top posts detail 21525V8AP Dockerfile Dockerfile 描述了组装镜像的步骤 xff0c 其中每条指令都是单独执行的 除了FROM指
  • 关于Home Lab的搭建——硬件选择篇(迷你主机)(一)

    关于Home Lab 这个名词出自哪里 xff0c 我也不清楚 不过 xff0c 可以这样来理解Home Lab xff0c Home Lab是一台作为实验使用的电脑 xff0c 试验的内容多数是关于计算机网络的搭建 系统安装 测试 xff
  • Adaboost基本二分类算法

    最早类型的Adaboost是由Yoav Freund和Robert E Schapire提出的 xff0c 一种用于二分类的boosting集成学习方法 也是李航 统计学习方法 中所介绍的Adaboost 它将一系列弱分类器的线性组合 xf
  • Springboot 项目金蝶中间件AAS-9.0启动报错 javax.persistence.Table.indexes()[Ljavax/persistence/Index 问题解决

    Springboot 项目金蝶中间件AAS 9 0启动报错 java lang NoSuchMethodError javax persistence Table indexes Ljavax persistence Index问题解决方法
  • CMakeLists配置(常用的)

    一 xff1a 最小组成 cmake 最小版本需求 cmake minimum required VERSION 2 8 project 名字 project MyEsp32AllCode 可执行文件生成 add executable PR
  • SLAM学习笔记(四)定位

    原创博客 xff1a http blog csdn net renshengrumenglibing viewmode 61 contents 机器人定位的目的是为了知道 自己在什么地方 xff0c 目前 xff0c 机器人定位的方法可以分
  • SLAM实习岗位面经

    一 地平线 一面主要是在问关于SLAM岗位的技术问题 xff0c 然后还问了一些比较简单的C 43 43 基础知识 其实总体而言 xff0c 面试的问题都比较基础 xff0c 比较考验SLAM基本功 xff0c 如果只知道一些SLAM皮毛的
  • Canal数据库监听

    1 什么是canal canal是用java开发的基于数据库增量日志解析 xff0c 提供增量数据订阅 amp 消费的中间件 目前 xff0c canal主要支持了MySQL的binlog解析 xff0c 解析完成后才利用canal cli
  • linux下安裝mitmproxy 详解傻瓜式文档

    前言 xff1a mitmproxy 就是用于 MITM 的 proxy xff0c MITM 即中间人攻击 xff08 Man in the middle attack xff09 用于中间人攻击的代理首先会向正常的代理一样转发请求 xf
  • ROS学习笔记(2)——ROS架构

    ROS学习笔记 xff08 2 xff09 ROS架构 0 学习来源1 ROS架构2 文件系统级2 1 工作空间 3 计算图级4 ROS开源社区级4 1 发行版 xff08 Distribution xff09 4 2 软件库 xff08
  • STM32_中断

    STM32 中断 一 介绍 1 1解释 打断CPU执行正常的程序 xff0c 转而处理紧急程序 xff0c 然后返回原暂停的程序继续运行 xff0c 就叫中断 1 2作用和意义 作用 xff1a 实时控制 xff1a 在确定时间内对相应事件