嵌入式学习-STM32F103ZE中断配置

2023-05-16

目录

一、中断概念

二、中断类型

三、NVIC

四、中断优先级

五 中断编程顺序

1.使能中断请求

2.中断优先级配置

3.初始化NVIC_InitTypeDef结构体

4.中断服务函数

六、总结


一、中断概念

中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。

二、中断类型

本文主要关于stm32f103ze系列中的关于中断的一些介绍和编程顺序。

1.系统中断

内核中的中断,其中复位的优先级最高

2外部中断

外设中的中断

在此只分大类,详细想要知道可以参考中文手册里面的中断向量表,在启动文件STARTUP中也可找到中断向量表。因为启动文件会初始化中断向量表。

三、NVIC

NVIC(嵌套向量中断控制器),属于内核外设,作用是管理内核和片上外设所有的中断相关的功能。关于更多的NVIC的信息,可以参考内核编程手册(如果你买了板子的话,或者可以找资料),或者在core_cm3.h中可以找到定义的结构体。如下图,其中最常用到是中断优先级寄存器。

   一般内核中有个十个中断寄存器,外设有60个。但ARM公司给了240个。还有就有个值得注意的是ARM公司给了8位的寄存器,但ST公司只用了高四位。

  在学习过程中,遇到关于内核相关的函数,通常要到core_cm3.h和misc.h中找。关于NVIC所有的固件库函数都在misc.h中

四、中断优先级

优先级的设定:NVIC->IPRx 即通过操作IPR这个寄存器

优先级分组:SCB->AIRCR:PRIGROUP

 对于优先级,优先级数值越小,优先级别越高

原则1:组别优先级,Group0最大,然后以此类推。

原则2:组别优先级>抢占优先级>响应优先级。

原则3:当A和B中断都是Gruop0,且抢占优先级和响应优先级都一样,即软件优先级一样,那么就需要去中断向量表中比较他们硬件的中断编号,同样数值越小,优先级越高。

五 中断编程顺序

1.使能中断请求

就是指外设中的中断,那就要配置外设寄存器。

2.中断优先级配置

SCB->AIRCR:PRIGROUP 就是配置这个寄存器

但要通过固件库编程,就要去配置上述提到过的misc.h中的 NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)函数 。本质上是一致的,都是操作寄存器。

3.初始化NVIC_InitTypeDef结构体

同样在misc.h中可以找到这个结构体,如上图。 

 关于里面的参数,第一个中断源可以在stm32f10x.h中找到,寻找过程中要注意你所选用的是flash大小,是LD、MD还是HD。第二个是抢占优先级,这个是根据前面的优先级分组来配置的。第三个是响应优先级的配置。最后一个是使能,即大门。(前面说了使能中断请求时小门,即外设发送请求,这个使能时NVIS中的,也就是内核中的)。

上述配置完成后,需要调用misc.h中的NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)函数去完成初始化。

4.中断服务函数

启动文件中,将中断向量表中的函数名都是初始化好了,c语言中,函数的名称即函数的地址,也就是启动文件已经规定了这些中断服务函数的地址。也对这些函数名进行了弱定义,你可以在其他文件定义,并优先在定义的文件中使用,但要是名称编写错误,则进行启动文件中的中断服务函数。

中断服务函数需要写在stm32f10x_it.c文件中。

六、总结

比较重要的就是NVIC(嵌套向量中断控制器),属于内核外设,关于内核相关的可在core_cm3.h和misc.h中找。其次就是中断优先级,当软件优先级相同时,需要去查中断向量表,比较硬件编号的大小。最后就是中断编程顺序。首先要使能中断请求;随后配置中断优先级,先分组,再配置中断源(在stm32f10x.h中),然后配置抢占优先级和副优先级;最后NVIC使能、初始化。还有一点值得注意的就是编写中断服务函数时,启动文件中可以找到中断服务函数名,不要写错。

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

嵌入式学习-STM32F103ZE中断配置 的相关文章

  • 课后作业之几何图形

    题目 xff1a 通过程序设计几何图形 xff08 Shape xff09 矩形 xff08 Rectangle xff09 圆形 xff08 Circle xff09 正方形 xff08 Square xff09 几种类型 xff0c 能
  • 七牛云免费对象存储,并绑定到cloudreve中

    之前开通了腾讯云的对象存储COS并使用中 xff0c 不过之前主要将它当作云盘使用 xff0c 这两天再做博客系统时发现也可以将它作为网站的图库 xff0c 这样对网站的访问效率也会提高 今天了解到七牛云有免费的对象存储可以使用 xff0c
  • [蓝桥杯]七段码(Python 实现)

    题目 xff1a 问题描述 小蓝要用七段码数码管来表示一种特殊的文字 上图给出了七段码数码管的一个图示 xff0c 数码管中一共有 7 段可以发光的二极管 xff0c 分别标记为 a b c d e f g 小蓝要选择一部分二极管 xff0
  • Anaconda变量配置

    1 首先鼠标右击打开 此电脑 的属性 xff0c 选择高级系统设置 2 选择环境变量 xff0c 并找寻系统环境变量中的Path 3 单击选中Path xff0c 选择编辑 xff0c 然后选择新建 xff0c 将路径复制到新建的位置 xf
  • java使用MySQL和HQL数据去重

    思路 先查询出满足某种条件的数据的最小ID xff0c 然后删除最小ID以外的数据就实现了去重 实例 查询最小ID的重复数据 select from oms relation model orm where orm fd id 61 sel
  • 在VS2017上配置CMake并生成OpenCV源代码工程的解决方案

    这篇博客是对之前博客 在win10下配置VS2017搭载OpenCV4 0 的补充 xff0c 还没有配置好VS2017 43 OpenCV的小伙伴可以参考一下我之前的博客 一 为什么用CMake xff1f 想要在 Windows 平台下
  • 链表,结构体,文件混合操作

    span class token macro property span class token directive keyword include span span class token string lt stdio h gt sp
  • 设置CentOS不启用图形界面 CentOS只启动后端

    CentOS不要图形界面 xff0c CentOS只开启终端就行 我用的是CentOS8 方法 xff1a vi etc inittab 以前旧的这种直接改 etc inittab方式已经不支持了 vi etc inittab initta
  • yum安装mysql简单配置版

    yum安装mysql简单配置版 yum y install mysql server root 64 bogon vi etc my cnf 在 client 之后添加一行 xff1a default character set 61 ut
  • 第一次使用GitHub

    GitHub可能是当今开源社区最火爆的版本控制和源代码托管平台 xff0c 也不知道这句话是否正确 对GitHub还很陌生 xff0c 不过其确实很热 咱跟着潮流 xff0c 也注册了账号 一 注册 登录GitHub官方网站https gi
  • 彻底关闭Windows更新

    第一级 在控制面板中 xff0c 关闭Windows更新 xff0c 次方法在Windows7之前的系统是可用的 xff0c 从Windows10开始 xff0c Windows更新放在了设置里 第二级 在此电脑 管理 服务和应用程序 wi
  • 端口被占用,简单快捷的解决方法

    步骤 xff1a 1 键盘上按住Win 43 R xff0c 在弹框里输入cmd并点击Enter键 2 根据自己被占用的端口号输入以下命令 xff08 测试 xff1a 被占用的8080端口 xff09 netstat ano findst
  • MySQL的操作系统和硬件优化

    MySQL服务器性能受制于整个系统最薄弱的环节 xff0c 承载它的操作系统和硬件往往是限制因素 磁盘大小 可用内存和CPU资源 网络 xff0c 以及所有连接它们的组件 xff0c 都会限制系统的最终容量 因此 xff0c 需要小心地选择
  • java连接mysql数据库useSSL问题

    背景 Java spring程序 xff0c Java版本 java version 34 1 8 0 301 34 JDBC驱动版本5 1 40 mysql connector java 5 1 40 jar xff0c 连接 proxy
  • 机器阅读理解(MRC)和问答(QA)在信息抽取中的应用

    一 机器阅读理解 xff08 MRC xff09 问答系统 xff08 QA xff09 与信息抽取 最近实体关系抽取任务和命名实体识别任务的SOTA模型排行榜中 xff0c 有很多模型使用到了机器阅读理解 xff08 MRC xff09
  • 【前端面经】Vue-Vue中的 $nextTick 有什么作用?

    Vue js 是一个流行的 JavaScript 框架 xff0c 它提供了许多实用的功能 xff0c 其中之一就是 nextTick 方法 在 Vue js 中 xff0c nextTick 方法可以确保我们在更新 DOM 之后再去执行某
  • archlinux安装virtualbox+WindowsXP虚拟机

    文章目录 概述安装vituralbox安装windows xp虚拟机virtualbox虚拟机配置安装增强工具包 xff08 Guest Additions 设置虚拟机与宿主机共享文件夹 概述 Thinkpad T400笔记本 xff0c
  • WSL2的安装与使用-Windows与Linux双系统的新选择

    文章目录 WSL2的安装与使用 Windows与Linux双系统的新选择1 WSL是什么2 为什么会有WSL3 为要选择WSL2作为开发环境3 1 WSL与WSL2有什么区别3 2 Windows与Linux系统的抉择 4 WSL2的安装4
  • IOCP编程注意事项

    虽说我的昵称是EasyIOCP xff0c 但是用好IOCP还是不容易的 xff0c 有很多要注意的地方 xff0c 长话短说 xff08 不涉及细节 xff09 xff1a 1 每个连接同时最好只有一个待决的WSARecv IOCP不保证
  • cin的错误标记和缓冲区清空

    先看下面的代码 xff1a vector lt int gt intVtr intVtr insert intVtr end istream iterator lt int gt cin istream iterator lt int gt

随机推荐