STM32学习--中断

2023-11-08

这里写目录标题

什么是中断?

中断是一个过程,STM32正在执行一个程序,当STM32正在执行程序时,有一个外部事件或者内部事件的发生导致STM32暂停当前正在执行的程序,转而去执行由内部事件或者外部事件发生产生的中断服务程序的这样的一个过程叫做中断。

中断的作用

中断所对应的中断服务函数的优先级要高于当前main()的优先级。
例如:在流水灯程序中需要获取KEY1按下的时间,需要在while(1)循环中反复去判断KEY1是否按下,会浪费cpu资源,而引入中断的时候,会在按键按下时跳出main()去执行获取KEY1按下的时间,运行完后再回到中断前的位置继续执行,节省反复判断的cpu资源。
中断优点:节约CPU资源,提高CPU工作效率
中断缺点:保护现场时,一些寄存器的值和变量的值会保存到栈区,栈区的空间一般默认是1KB,如果保存的内容过多可能会造成栈区溢出;理解起来比较困难。

中断的特点

1、触发源:触发产生中断的事件。

2、保护现场:程序运行到发生中断的位置

3、屏蔽中断
张三正在看书,门铃响了,但是张三没有去开门;

4、挂起中断
张三正在看书,门铃响了,张三没有开门,而是等到当前页看完之后再去开门;

5、中断优先级
如果有两个以上的中断同时发生,STM32会根据每个中断的优先级来判断是哪一个中断先发生。
1)抢占优先级(可以被编程)
2)响应优先级(可以被编程)
3)自然优先级(厂家固定,无法编程)
三者的权重关系:抢占优先级权重 > 响应优先级 > 自然优先级(数值越小,优先级越高)
抢占优先级可以嵌套,响应有优先级不可以嵌套。例如:事件1:抢占优先级1、响应优先级2,事件2:抢占优先级2、响应优先级2。当事件2发生时事件1发生会产生中断。
事件1:抢占优先级2、响应优先级2,事件2:抢占优先级2、响应优先级1。
当事件2发生时事件1发生不会产生中断。

STM32与中断

NVIC

NVIC:嵌套向量中断控制器(Nested Vectored Interrupt Controller),在Cortex-M4内核之中,主要作用管理中断。
对于几乎所有的微控制器,中断都是一种常见的特性。中断一般是由硬件(如外设和外部输人引脚)产生的事件,它会引起程序流偏离正常的流程(如给外设提供服务)。
中断过程示意图:
在这里插入图片描述
当外设或硬件需要处理器的服务时,一般会出现下面的流程:
(1)外设确认到处理器的中断请求。
(2)处理器暂停当前执行的任务。
(3)处理器执行外设的中断服务程序(ISR),若有必要可以选择由软件清除中断请求。
(4)处理器继续执行之前暂停的任务。

所有的Cortex-M处理器都会提供一个用于中断处理的嵌套向量中断控制器(NVIC)。除了中断请求,还有其他需要服务的事件,将其称为“异常”。按照ARM的说法,中断也是一种异常。Cortex-M 处理器中的其他异常包括错误异常和其他用于OS支持的系统异常(如SVC指令)。处理异常的程序代码一般被称作异常处理,它们属于已编译程序映像的一部分。

在这里插入图片描述

1、由处理器产生的事件导致中断的发生,称之为系统异常-----一般不配置
2、由SysTick定时器溢出产生的事件导致中断发生,称之为溢出中断-----可以配置
3、外设会产生NMI(不可屏蔽中断)-----看门狗产生
4、外设和IO端口产生中断请求(IRQ)
(1)由外设(USART,TIM,SPI等)产生的中断称之为外设中断
(2)由GPIO输入引脚(检测边沿)产生的中断称之为外部中断----exti

Cortex-M3和Cortex-M4最多支持240个中断请求,但是一般芯片没有这么多中断请求,具体的中断请求的数量是由芯片厂商决定的,当前芯片(STM32F407)的可屏蔽中断请求为82个。

中断通道

不同的外部中断需要通过不同的通道来向NVIC发送中断请求
stm32f407的通道
在这里插入图片描述

中断优先级

中断优先级寄存器有4位抢占如果占1位(0和1),响应占3位(0-7)
抢占如果占3位(0-7),响应占1位(0和1)
在这里插入图片描述
在这里插入图片描述

中断服务函数

当中断请求并没有被屏蔽的时候,就会进入中断服务函数
中断服务函数特点
1、无参无返回值
2、不需要声明
不能被调用—只要中断请求经过中断通道进入NVIC,经NVIC管理之后,NVIC会自动执行相匹配的中断服务函数。
例如SysTick触发异常(中断)就会进入 SysTick_Handler函数

void SysTick_Handler(void)
{
	//中断服务函数体
}

SysTick中断(内核中断)

之前介绍SysTick中的CTRL的第1位就是中断中断使能位,当使能之后当计数归零的时候就会发生中断(寄存器)
在这里插入图片描述
SysTick中断出发的过程:计时器发出中断信号,然后通过SysTick_IRQn中断通道发送给NVIC,然后执行中断服务函数,完成中断。

SysTick中断函数

在这里插入图片描述

NVIC库函数

NVIC和SCB位于系统控制空间(SCS),地址从0xE000E000开始,大小为4KB。SCS中和位于系统控制空间(SCS),地址从0xE000E000开始,大小为4KB。SCS中还有SysTick定时器、存储器保护单元(MPU)以及用于调试的寄存器等。该地址区域中基本上所有的寄存器都只能由运行在特权访问等级的代码访问。唯一的例外为软件触发中断寄存器(STIR),它可被设置为非特权模式访问。

NVIC初始化函数

void 	NVIC_Init (NVIC_InitTypeDef *NVIC_InitStruct)

Initializes the NVIC peripheral according to the specified parameters in the NVIC_InitStruct.
根据NVIC_InitStruct结构体中的成员来初始化NVIC
在这里插入图片描述

抢断优先级分组

void 	NVIC_PriorityGroupConfig (uint32_t NVIC_PriorityGroup)

Configures the priority grouping: pre-emption priority and subpriority.
根据填入的参数分配抢占优先级的位数
在这里插入图片描述

USART使能中断

void USART_ITConfig (USART_TypeDef *USARTx, uint16_t USART_IT, FunctionalState NewState)

Enables or disables the specified USART interrupts.
使能USARTx的中断

配置步骤(USART)

1、开启相应使能中断标志位=》TXEIE,TCIE,RXNEIE,IDLEIE
2、配置中断优先级分组–2
3、NVIC初始化=》通道,通道使能,抢占优先级,响应优先级

外部中断–EXTI

外部中断/事件控制器包含多达 23 个用于产生事件/中断请求的边沿检测器。每根输入线都可单独进行配置,以选择类型(中断或事件)和相应的触发事件(上升沿触发、下降沿触发或边沿触发)。每根输入线还可单独屏蔽。挂起寄存器用于保持中断请求的状态线。

EXTI 特性

EXTI 控制器的主要特性如下:
● 每个中断/事件线上都具有独立的触发和屏蔽
● 每个中断线都具有专用的状态位
● 支持多达 23 个软件事件/中断请求

外部中断/事件线

在这里插入图片描述另外七根 EXTI 线连接方式如下:
● EXTI 线 16 连接到 PVD 输出
● EXTI 线 17 连接到 RTC 闹钟事件
● EXTI 线 18 连接到 USB OTG FS 唤醒事件
● EXTI 线 19 连接到以太网唤醒事件
● EXTI 线 20 连接到 USB OTG HS(在 FS 中配置)唤醒事件
● EXTI 线 21 连接到 RTC 入侵和时间戳事件
● EXTI 线 22 连接到 RTC 唤醒事件

外部中断框图

在这里插入图片描述

EXTI寄存器

中断挂起寄存器

在这里插入图片描述
用来检测中断是否触发触发了就置为1

中断屏蔽寄存器(EXTI_IMR)

在这里插入图片描述用来屏蔽来自EXTIx的中断请求

事件屏蔽寄存器(EXTI_EMR)

在这里插入图片描述
用来屏蔽来自EXTIx上某个事件的请求

软件中断事件寄存器 (EXTI_SWIER)在这里插入图片描述

当此中断没有被屏蔽时,产生一个虚拟的中断

软件中断

软件中断事件寄存器产生的虚拟中断请求

EXTI库函数

EXTI初始化函数

void 	EXTI_Init (EXTI_InitTypeDef *EXTI_InitStruct)

Initializes the EXTI peripheral according to the specified parameters in the EXTI_InitStruct.
根据EXTI_InitStruct结构体中的成员来初始化EXTI
在这里插入图片描述
Line :EXTI_Line0 -EXTI_Line22
Mode:
EXTI_Mode_Interrupt 中断
EXTI_Mode_Event 事件
Trigger: EXTI_Trigger_Rising 上升沿
EXTI_Trigger_Falling 下降沿
EXTI_Trigger_Rising_Falling 上升和下降

清除普通标志位

void 	EXTI_ClearFlag (uint32_t EXTI_Line)

Clears the EXTI’s line pending flags.
清除line标记位

清除中断标志位

void 	EXTI_ClearITPendingBit (uint32_t EXTI_Line)

Clears the EXTI’s line pending bits

获取普通标志位

FlagStatus 	EXTI_GetFlagStatus (uint32_t EXTI_Line)

Checks whether the specified EXTI line flag is set or not.

获取中断标志位

ITStatus 	EXTI_GetITStatus (uint32_t EXTI_Line)

Checks whether the specified EXTI line is asserted or not.

产生软件中断

void 	EXTI_GenerateSWInterrupt (uint32_t EXTI_Line)

Generates a Software interrupt on selected EXTI line.

SYSCFG系统配置控制器

系统配置控制器主要用于管理对可执行代码的存储区域的地址重映射、选择以太网 PHY 接口以及管理 GPIO 的外部中断线连接。

SYSCFG寄存器

比如要映射PI0引脚 就需要在CR写入1000
在这里插入图片描述
在这里插入图片描述

SYSCFG库函数

void 	SYSCFG_EXTILineConfig (uint8_t EXTI_PortSourceGPIOx, uint8_t EXTI_PinSourcex)

选择GPIO引脚作为外部中断输入线

总结

优先级:抢占优先级可以嵌套,响应优先级不能嵌套
中断与异常:内核事件叫异常,外设和外部产生的事件叫中断

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

STM32学习--中断 的相关文章

  • 学习STM32正点原子好吗?

    今日话题 学习STM32正点原子好吗 正点原子的教程内容简单明了 代码也清晰直接 使初学者能够轻松理解其功能和使用方法 尤其对于需要快速完成大学作业等任务的大学生来说 可以直接借鉴并稍作修改 便可满足需求 正点原子提供的资料通俗易懂 适合用
  • 会stm32有机会进大公司吗?

    今日话题 会stm32有机会进大公司吗 我本科期间参与了飞思卡尔和电赛等比赛 使用过多种单片机 但渐渐发现单片机只是其中的一小部分 不要过分迷恋所谓的单片机基础和技巧 更值得深入研究的是C语言 如果你对此感兴趣 我愿意无偿分享一个资源包 其
  • 从外卖员到程序员,自学3年终于转行成功,三面“拿下”拼多多

    前言 先来自我介绍 老家农村 家里好不容易把我送到大城市读书 大学非985 211 但在我们老家 能出一个本科大学生也是非常不容易的 因为农村信息的相对闭塞 我对大学专业一无所知 加上分数并非前茅 最后被调剂一个我并不喜欢的专业 这里就不透
  • Java 学习路线 2024 最新版!

    又对上次分享的 Java 学习路线进行了简单修改完善 并增加了免登录下载和黑夜模式 这里重发一下 花了一个月零碎的时间 我根据当下 Java 后端求职和招聘的最新要求 对之前写的 Java 后端学习路线进行了全面的优化和改进 添加图片注释
  • 物联网项目分享 Stm32单片机的音乐播放器设计 - 物联网 嵌入式

    文章目录 0 前言 1 简介 2 主要器件 3 实现效果 4 设计原理 5 部分核心代码 6 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学弟学妹告诉
  • 【一份老网工珍藏多年的网络配置笔记,很重要!】

    01 交换机 路由器的几种配置模式及模式转换 1 用户模式 登录到交换机 路由器 时会自动进入用户模式 提示符为 switchname gt 在该模式下只能够查看相关信息 对 IOS的运行不产生任何影响 2 特权模式 用户模式下 键入 en
  • Arm:objcopy 如何知道 elf 中的哪些部分要包含在二进制或 ihex 中?

    我正在开发一个项目 其中涉及解析arm elf 文件并从中提取部分 显然 elf 文件中有很多部分没有加载到闪存中 但我想知道 objcopy 到底如何知道要在二进制文件中包含哪些部分以直接闪存到闪存中 以arm elf文件的以下reade
  • 【CTF必看】从零开始的CTF学习路线(超详细),让你从小白进阶成大神!

    最近很多朋友在后台私信我 问应该怎么入门CTF 个人认为入门CTF之前大家应该先了解到底 什么是CTF 而你 学CTF的目的又到底是什么 其次便是最好具备相应的编程能力 若是完全不具备这些能力极有可能直接被劝退 毕竟比赛的时候动不动写个脚本
  • 白帽子如何快速挖到人生的第一个漏洞 | 购物站点挖掘商城漏洞

    本文针对人群 很多朋友们接触安全都是通过书籍 网上流传的PDF 亦或是通过论坛里的文章 但可能经过了这样一段时间的学习 了解了一些常见漏洞的原理之后 对于漏洞挖掘还不是很清楚 甚至不明白如何下手 可能你通过 sql labs 初步掌握了sq
  • 库函数点亮Led

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 提示 这里可以添加本文要记录的大概内容 例如 随着人工智能的不断发展 机器学习这门
  • 网络安全(黑客)自学

    1 网络安全是什么 网络安全可以基于攻击和防御视角来分类 我们经常听到的 红队 渗透测试 等就是研究攻击技术 而 蓝队 安全运营 安全运维 则研究防御技术 2 网络安全市场 一 是市场需求量高 二 则是发展相对成熟入门比较容易 3 所需要的
  • Cortex-M3与M4权威指南

    处理器类型 所有的ARM Cortex M 处理器是32位的精简指令集处理器 它们有 32位寄存器 32位内部数据路径 32位总线接口 除了32位数据 Cortex M处理器也可以有效地处理器8位和16位数据以及支持许多涉及64位数据的操作
  • 项目文章 | IF=8.4&转录因子Egr-1是脑膜炎型大肠杆菌引起的血脑屏障损伤的关键调节因子

    2024年1月17日华中农业大学动科动医学院陈焕春院士 王湘如教授团队在期刊 Cell Communication and Signaling IF 8 4 发表了题为 Egr 1 is a key regulator of the blo
  • STM32 Nucleo 上的上升沿中断多次触发

    我正在使用 STM32 NUCLEO F401RE 微控制器板 我有一个扬声器 经过编程 当向上 向下推操纵杆时 可以按设定的量改变频率 我的问题是 有时 通常 当向上 向下推动操纵杆时 频率会增加 减少多次 这意味着 ISR 正在执行多次
  • 通过JTAG恢复STM32 MCU磨掉的标记

    我有一块可能带有 STM32 MCU 的板 我想为该板制作定制固件 因为库存板有很多问题 不幸的是 电路板制造商很友善地磨掉了所有标记 有没有办法通过 jtag 获取设备 系列 ID 并将其交叉引用到型号 我能找到的一切都是关于获取芯片的唯
  • STM32 上的 ADC 单次转换

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

    我对 STM32F7 设备 意法半导体的 Cortex M7 微控制器 上的时钟系统感到困惑 参考手册没有充分阐明这些时钟之间的差异 SYSCLK HCLK FCLK 参考手册中阅读章节 gt RCC 为 Cortex 系统定时器 SysT
  • 在 Contiki 程序中使用 malloc

    考虑以下 Contiki 程序 include
  • HAL_Delay() 陷入无限循环

    我被 HAL Delay 函数困住了 当我调用此函数 HAL Delay 时 控制陷入无限循环 在寻找问题的过程中 我发现了这个 http www openstm32 org forumthread2145 threadId2146 htt
  • 当端点和 PMA 地址均更改时,CubeMX 生成的 USB HID 设备发送错误数据

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

随机推荐

  • 合宙Air103

    基础资料 基于Air103开发板 Air103 LuatOS 文档 上手 开发上手 LuatOS 文档 探讨重点 对官方社区库接口RC522模块库调用及示例进行复现及分析 了解RDIF及非接触式IC卡的原理及操作方法 实现功能 利用已知的A
  • 单片机拟真电路图软件_电路仿真软件有哪些?6款常用的电路仿真软件推荐

    一些网友需要下载电路仿真软件这一类软件 但是 网络上寻找电路仿真软件却比较麻烦 那么 电路仿真软件有哪些 小编今天就给大家整理了6款常用的电路仿真软件推荐给大家 需要下载电路仿真软件的网友可以挑选一下 Machining 6款常用的电路仿真
  • Vue 监听localStorage

    1 在utils目录下建tool js文件 文件代码如下 重写setItem事件 当使用setItem的时候 触发 window dispatchEvent派发事件 function dispatchEventStroage const s
  • python turtle画海绵宝宝,python还能这么玩?帅呆了

    漫威还是DC 超人或者蝙蝠侠 火影忍者亦或死神 当然 所有这些讲的都是漫画 当我们还是孩子的时候 总是迷恋漫画书 当翻到我们的英雄们开始行动时会激动不已 大家总是争论谁是最厉害的超级英雄 认真地讨论他们的家族历史 或者梦想自己拯救高谭市 我
  • 容器编排学习(二)镜像制作和私有仓库介绍

    一 Dockerfile 1 概述 commit的局限 很容易制作简单的镜像 但碰到复杂的情况就十分不方便例如碰到下面的情况 需要设置默认的启动命令 需要设置环境变量 需要指定镜像开放某些特定的端口 Dockerfile就是解决这些问题的方
  • 悲剧的山寨采用的新芯片资料汇总(更新Rk3066)

    芯片名称 基友公司 上市前宣传主频 量产机最高主频 最高主频 GPU 备注 Rk3066 原道 酷比魔方 1 4GHz 2 1 6GHz 2 1 6GHz 2 Mali 400MP4 266MHz 旧固件 Mali 400MP4 399MH
  • 【Web Crawler】Scrapy vs BeautifulSoup:哪个是您业务的最佳选择?

    Beautiful Soup 可以帮助从目标网页中提取特定元素 而 Scrapy 可以管理异步数据检索 从而提高效率 不确定哪个选项最适合您的业务需求 本指南可以提供帮助 什么是Beautiful Soup Beautiful Soup 是
  • 数据挖掘——决策树和K近邻

    决策树和K近邻 一 线性回归 房价预测 第1关 线性回归算法思想 一 相关知识 1 gt 简单线性回归 2 gt 多元线性回归 二 编程要求 三 参考答案 第2关 动手实现线性回归 一 相关知识 1 gt 数据集介绍 2 gt 线性回归算法
  • android蓝牙支持双向,【玩机攻略】了解蓝牙LDAC,玩转双向蓝牙LDAC

    原标题 玩机攻略 了解蓝牙LDAC 玩转双向蓝牙LDAC LDAC是由SONY开发的一项蓝牙音频编码技术 它的最高传输速率可达990kbps 相当于普通蓝牙的3倍 文件采样率最高可支持96 khz 而即使是aptX HD 其最高所能支持的文
  • Windows 在CMD 终端中使用SS代理

    打开CMD后先分别输入下面两条命令 set http proxy 127 0 0 1 1080 set https proxy 127 0 0 1 1080 其中的本地IP 地址和端口号如果你没有改过的话应该是没问题的 改过的话就填改过的
  • 新版-C语言学生信息管理系统

    拥有基本的学生信息系统的功能 功能点如下所示 1 添加学生信息 2 修改学生信息 3 删除学生信息 4 查看学生信息 5 搜索学生信息 6 查看系统学生总人数 7 学生信息排序 8 保存学生信息 保存在D students txt 9 导入
  • C++ string类型的字符串长度获取的三种方法

    1 用string的成员方法length 获取字符串长度 length 比较直观 表示的就是该字符串的长度 cpp
  • 【踩坑篇】代码中使用 Long 作为 Map的Key存在的问题

    本周的工作结束 详述一些在项目代码中实际遇到的一些坑 代码中遇到这样一个场景 有个业务接口 接口返回的值是一个JSON格式的字符串 通过JSON解析的方式 解析为格式为 Map
  • 在STM32CubeIDE中使用IAR编译器

    在STM32CubeIDE中使用IAR编译器 一 前言 IAR编译器的大名早有耳闻 但本人一直未深度使用 主要有以下三点原因 首先 它收费 因此笔者更倾向于使用免费的GCC工具链 其次 作为嵌入式开发来说 IAR封装了太多底层细节 要深入了
  • Android开发学习笔记:Service的简介和启动方式

    一 Service的简介 1 Service 介绍和作用 Service是Android系统中的四大组件之一 它是一种长生命周期的 没有可视化界面 运行于后台的一种服务程序 比如我们播放音乐的时候 有可能想边听音乐边干些其他事情 当退出播放
  • 什么是实体-联系图(ER图)

    实体 联系图 ER图 数据模型中包含3种相互关联的信息 数据对象 数据对象的属性及数据对象彼此间相互连接的关系 1 数据对象 数据对象是对软件必须理解的复合信息的抽象 所谓符合信息是指具有一系列不同性质或属性的事物 仅有单个值得事物 例如
  • 安天逆向教程——常用汇编语句

    一 汇编基础 二 条件分支 反汇编时更多关注这些条件分支 如果看懂这些条件分支 会对程序的大体逻辑有一个整体的了解 至于程序里面的细节 有时会省略掉 往往关键的跳转理解了甚至进行一点点的改动 就会使得程序发生翻天覆地的变化 三 栈和函数调用
  • PO模式-unittest

    PO模式是指将页面元素的定位以及元素的操作分离出来 测试用例脚本直接调用这些封装好的元素操作来组织测试用例 从而实现了测试用例脚本和元素定位 操作的分离 本文采用PO模式和unittest框架 对readmine系统执行了两条测试用例 文件
  • MATLAB三维绘图基础meshgrid函数的用法解析

    MATLAB三维绘图基础meshgrid函数的用法解析 MATLAB中meshgrid函数是用来生成网格的 函数用法是 X Y meshgrid x y 这种是最常用的一种用法 x和y分别是两个向量 使用示例 结果 A中的每个点对应的是x轴
  • STM32学习--中断

    这里写目录标题 什么是中断 中断的作用 中断的特点 STM32与中断 NVIC 中断通道 中断优先级 中断服务函数 SysTick中断 内核中断 SysTick中断函数 NVIC库函数 NVIC初始化函数 抢断优先级分组 USART使能中断