STM32F103ZE-中断

文章目录

  • 1
  • 2
    • 2.1
    • 2.2
    • 2.3
    • 2.4
    • 2.5
    • 2.6
      • 2.6.1
      • 2.6.2
  • 3
    • 3.1
    • 3.2
    • 3.3
    • 4.1
    • 4.3
  • 5
  • 6
  • 7
  • 8
    • 8.1
    • 8.2

在这里插入图片描述

  • NVIC 管理所有中断
  • EXTI 外部中断事件控制器 针对外部 可以看成NVIC 下属

1

在这里插入图片描述

  • 中断和 中止(不回去了)不一样

在这里插入图片描述

  • 搁一段时间就
  • 如果不用中断 用while() 可能夹半天 还没执行完下面的
  • 用while + if 的话 if前卡着 如 30ms 但接收数据只10ms 可能接受不到
    在这里插入图片描述
  • AFIO 把GPIO 映射到 EXTI
  • 后面会反向介绍

2

在这里插入图片描述

2.1

在这里插入图片描述

  • 和内核紧密耦合在一起 可以看成内核一部分
  • 内核由NVIC管理中断
  • ST 把256个优先级裁剪为16个
  • 没用的中断 保留
  • 中断服务函数 中断入口 执行相应程序 被定义在中断向量表里

在这里插入图片描述

  • 固定的 不是动态的
  • 4字节 因为32位 每次取地址也是这么多
  • 自动执行
  • 下面这几个handler都在.s文件里
  • 如果给main也分优先级 那它是最低的
    在这里插入图片描述
  • 启动文件里有 中断向量表 -> 中断服务函数
  • DCD 4字节对齐
  • 0 保留
  • 内核中断 外部中断
    在这里插入图片描述
  • 也可以去参考手册里找 中断服务函数
  • 灰色的是 内核中断

2.2

在这里插入图片描述

  • ISER 256位 对应外部中断 240个 16个保留

  • IPR 对应240个外部中断 只用高4位 2^4 对应16个中断优先级

  • nxp 和st都是 芯片公司
    在这里插入图片描述

  • 参考开发指南

  • IPR 4个位 又分为抢占优先级 和 响应优先级

  • 具体分配 由AIRCR分 控制五种分组

2.3

在这里插入图片描述

2.4

在这里插入图片描述
在这里插入图片描述

  • 自然优先级

2.5

在这里插入图片描述

  • 优先级分组本来8 种 但IPR削了四位
  • 不同的分组 总优先级个数居然不同
    在这里插入图片描述

在这里插入图片描述

2.6

  • 包含NVIC配置步骤 和 NVIC相关HAL库介绍

在这里插入图片描述

  • IRQ 是中断请求

2.6.1

在这里插入图片描述

  • NVIC函数 定义在这cortex
  • 这个 .c 文件对内核底层头文件进行重新封装
  • 参数有五个可选

在这里插入图片描述

  • 但是HAL_Init 中已设置分组为2

在这里插入图片描述

  • 上面那个是断言 判断形参是否有效 HAL库里经常用
  • 真正实现的是下面那个

在这里插入图片描述

  • 还有一层封装

在这里插入图片描述

  • m3 内核的头文件 包含内核里 所有底层函数?
  • 比较奇怪 函数放在.h里

2.6.2

在这里插入图片描述

  • 中断号 或者叫中断请求号

在这里插入图片描述

  • 对应中断向量表位置一栏

在这里插入图片描述

  • 感觉都是这种断言 + 真正实现(都在m3 那)所以cortex.c就是对cm3.h进行再次封装
  • 第一个是获取分组
  • 得到分组后通过最后一个设置

在这里插入图片描述

  • 一个外部 一个内核中断
  • 只用了IPR 60个寄存器

在这里插入图片描述

  • NVIC相关寄存器 以数组形式定义
  • IPR 8位
  • IP[0] 对应中断向量表位置为1的中断

在这里插入图片描述

  • 使能操作这个寄存器
    在这里插入图片描述

3

在这里插入图片描述

3.1

在这里插入图片描述

  • 两种叫法 扩展好像更合理
    在这里插入图片描述
  • 这是主线 具体对应哪一个port 后面映射说
  • F1虽然是20个线 但这就19个 因为正点这f1不是互联型的 线19 没勾上
  • EXTI 作用 管理芯片内部外部 唤醒事件或者中断

在这里插入图片描述

  • 底下是外设的信号 所以是内部

3.2

在这里插入图片描述

  • 好像是信号来了 EXTI 来产生 是中断 还是事件
  • 挂起状态位 对应寄存器位置1了 就说明 产生EXTI中断了

3.3

在这里插入图片描述

  • 输入线就是EXTI线
  • 上升沿和下降沿都是32位的 19个位有效 置1代表选择
  • 清中断 也是由请求挂起寄存器整的 变成0

在这里插入图片描述

  • 6个寄存器 主要用到4个 那两用的少

在这里插入图片描述

  • 线也是从0开始的 位也是 正好对上
  • 这个是 挂起寄存器

在这里插入图片描述

  • F1由AFIO来配置

4.1

在这里插入图片描述

  • 配置就是操作一些寄存器

4.3

在这里插入图片描述

  • 引脚号 和 分组号 这配置选的是分组 , 引脚号 和 线的那个是对应的
  • 分时一对一

在这里插入图片描述

  • 正好16个

5

介绍中断配置步骤和整体情况

在这里插入图片描述

在这里插入图片描述

  • 这个外设中断由其寄存器 开启
  • 直接到 NVIC 了 EXTI就像更硬件的去开启中断 这已经开启了 所以就不走了?

在这里插入图片描述
在这里插入图片描述

  • 5-9 10-15分别共用一个handler
  • handler 在.s 文件里面找

6

在这里插入图片描述

  • GPIO外部中断 用到 1 4 (为啥不用2 前面不都设置输入模式了)

7

在这里插入图片描述

  • 硬件中断服务函数 是因为 中断向量表 里位置固定?
  • 51里面一般服务函数 最后清标志位了
  • 如串口接收回调函数 串口发送回调函数 串口接收到一半也有回调函数

8

  • 按键来模拟上升沿和下降沿

在这里插入图片描述
在这里插入图片描述

8.1

在这里插入图片描述

  • 复制跑马灯的文件夹
  • BSP里新建EXTI

在这里插入图片描述

  • 再在keil里面添加分组

在这里插入图片描述

  • 固定开头整上
  • 初始化外部中断 写1哈
  • 把LED里的拷过来了 这里面包含 开启GPIO时钟和 HAL_GPIO_Init
    在这里插入图片描述
  • 中断 下面是事件
  • 又几把说输入了 输入不用 读函数?

在这里插入图片描述

  • 例程里面已设置分组 跳过这步

然后又设置勾子优先级
在这里插入图片描述

  • 说 PE4 对应这个EXTI4 我一看就几把4个 不是说好的 GPIO用16个吗 然后就觉得是映射的那个寄存器 后来一想是因为那后面的线共用了handler

在这里插入图片描述

去启动文件里找到 对应中断服务函数叫什么名
在这里插入图片描述

在这里插入图片描述

  • 公用处理函数在 hal_gpio.c 里
  • 因为这个 所以EXTI 0~15 驱动和GPIO 驱动写到一起了

在这里插入图片描述

  • 上面那个是判断那一位是否为1
  • 下面是往位里面写1(先几把别管为啥写1可以了 可能又有取反?)

在这里插入图片描述
在这里插入图片描述

  • 这个参数不一般

在这里插入图片描述

  • 很明显不是简单排的 估计和位置有关

在这里插入图片描述

  • 弱定义

  • 用户逻辑代码 在callback里完成

  • 要消抖 再加上include delay的头文件

在这里插入图片描述

  • 在led.h 里定义了LED0是PB5

在这里插入图片描述

  • 编译错了一次 回调函数刚才在这也加上weak了 重复了好像
  • 然后main.c 里include 调用exti_init(现在exti.h里声明)
  • 判断一下 这个引脚调用的callback

在这里插入图片描述

  • 中断服务函数已在.s 中声明

在这里插入图片描述

  • callback 已在gpio.h 里声明
    在这里插入图片描述
  • main.c这么写
  • led0 是红灯
  • 这回BSP里面就没KEY 感觉就是 实现了对应函数就行 (都写了GPIO)

8.2

在这里插入图片描述

  • 看着这个 又在自己上面那个里面服务函数加了这个
  • 也算按键在中断里消抖(后面的)

在这里插入图片描述

  • HAL库公用中断处理函数就是 先清中断 再调用回调

然后又试了一下优先级

在这里插入图片描述

  • 中断里不要延时 这只是演示(可能这就是中断 就要快? 理念?这蜂鸣器响了再按key1 在这5s里 按key up 没反应 这可能也是原因)
    在这里插入图片描述

== 懂了为啥没读函数(封装GPIO??)了 没有专门写一个函数就是为了读==

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/548350.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

中伟视界:智慧矿山智能化预警平台功能详解

矿山智能预警平台是一种高度集成化的安全监控系统,它能够提供实时的监控和报警功能,帮助企业和机构有效预防和响应潜在的安全威胁。以下是矿山智能预警平台的一些关键特性介绍: 报警短视频生成: 平台能够在检测到报警时自动生成短…

记录一次内存溢出

1、查看catalina相关日志,确定关键字相关行号 文件:catalina.out命令1:cat -n catalina.out |grep -a OutOfMemoryError与内存溢出相关的如上,每一个行号其实都对应到具体时间点。可以发现,这个范围相符合&#xff1…

Harbor安装手册

安装Docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager \ --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sed -i -e /mirrors.cloud.aliyuncs.com/d -e /mirrors.aliyuncs.com/d \ /etc/yum.repos.d/…

【御控物联】Java JSON结构转换(3):对象To对象——多层属性重组

文章目录 一、JSON结构转换是什么?二、案例之《JSON对象 To JSON对象》三、代码实现四、在线转换工具五、技术资料 一、JSON结构转换是什么? JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换,生成新的JS…

Centos Steam 8安装MariaDB报错

1:按照MariaDB的官网配置安装文件. 2 :使用安装命令安装出现下面错误。说“所有的匹配结果均已经被参数的模块化过滤条件除” 3:这个只需要禁用系统的安装模块即可。 yum module disable mariadb 4:再次安装就不会报错了。

C语言——内存函数的实现和模拟实现

1. memcpy 使用和模拟实现 void * memcpy ( void * destination, const void * source, size_t num ); 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。 这个函数在遇到 \0 的时候并不会停下来。 如果source和destination有任何的重叠&am…

2024“点点点”测试员如何上岸测试开发岗?附完整学习路线!

有很多人员会不断问自己,自己到底要不要学测试,或者要不要坚持做测试,测试的职业发展到底怎么样?如果你还在迷茫,在到处找各种大牛问类似的问题,我希望这篇文章,你看完能够结束你的这个烦恼&…

bugku-web-点login咋没反应

在页面源码中看到一个css文件 并看到构建的表是post请求 访问后看到一个注释,叫尝试?17026 在页面尝试 得到源码 这里让在cookie中添加参数BUGKU,并使参数为字符串类型ctf.bugku.com 这里有反序列化函数,先得到字符串ctf.bugku.com的序列号…

深度学习知识点:卷积神经网络(CNN)

深度学习知识点:卷积神经网络(CNN) 前言卷积神经网络(CNN)卷积神经网络的结构Keras搭建CNN经典网络分类LeNetAlexNetAlexNet 对比LeNet 的优势? VGGVGG使用2个33卷积的优势在哪里?每层卷积是否只…

Java开发从入门到精通(九):Java的面向对象OOP:成员变量,局部变量,实体类的案例

Java大数据开发和安全开发 (一)Java的变量1.1 成员变量和局部变量的区别1.2 成员变量1.3 局部变量1.4 实体类的案例 (一)Java的变量 1.1 成员变量和局部变量的区别 1、类中位置不同:成员变量(类中,方法外)、局部变量(常见于方法中)2、初始化…

多模态AnyGPT——整合图像、语音和文本多模态大规模语言模型算法原理与实践

概述 大规模语言模型在理解和生成人类语言方面具有非凡的能力,但迄今为止,它们的能力主要局限于文本处理。然而,现实世界是一个多模式的环境,信息通过视觉、听觉和触觉等多种感官进行交换。融入这种多样性是开发下一代系统的主要…

高效求解最长回文子序列:动态规划方法与C语言实现

高效求解最长回文子序列:动态规划方法与C语言实现 问题描述解决方案伪代码C代码示例算法分析进一步讨论 在计算机科学中,回文是一种有趣的字符串,它在正序和逆序下是相同的。例如,“civic”、"racecar"和"aibohpho…

解决Qt中文乱码

解决Qt中文乱码 编程环境解决方法设置编辑器的文件编码每个源文件中增加设置增加转码代码有中文的源文件添加UTF-8 BOM 编程环境 WindowsQCreatorQtMSVC 解决方法 设置编辑器的文件编码 项目->Project Settings->编辑器->文件编码: 1.设置默认编码为&a…

吴恩达机器学习:均值聚类法(K-means Clustering)

在本练习中,您将实现K-means算法并将其用于图像压缩。 您将从一个样本数据集开始,该数据集将帮助您直观地了解K-means算法的工作原理。之后,您将使用K-means算法进行图像压缩,将图像中出现的颜色数量减少到该图像中最常见的颜色。…

树--排序二叉树的删除

一、二叉排序树的删除 二叉排序树的删除情况比较复杂,有以下三种情况需要考虑。 删除叶子节点 (比如:2,5,9,10)删除只有一个子树的节点(比如:1)删除有两个子树的节点 (比如&#x…

【测试思考】当我给互联网姐妹解读电商大促规则

20年初,疫情开始,我和同事好不容易回家过年了,但是无法返沪,只能远程上班。 远程上班的效率比我想象的高很多,上班时间也比我想象的拉长很多,抛开这些扯远了,我们当时在做一个优惠券的项目。 下…

java学习——消息队列MQ

上一篇传送门:点我 目前只学习了RabbitMQ,后续学习了其他MQ后会继续补充。 MQ有了解过吗?说说什么是MQ? MQ是Message Queue的缩写,也就是消息队列的意思。它是一种应用程序对应用程序的通信方法,使得应用…

【解决】Spring Boot创建项目常见问题

🎥 个人主页:Dikz12🔥个人专栏:Spring学习之路📕格言:吾愚多不敏,而愿加学欢迎大家👍点赞✍评论⭐收藏 目录 idea无maven选项 无效发行版17 类⽂件具有错误的版本 61.0, 应为 …

基于PyAutoGUI图片定位的自动化截图工具--完成了

1、计划 压测完成后需要编写性能测试报告,报告中所需数据截图较多,使用自动化操作方便快捷,就编写一个界面工具以便后续复用。 基于PyAutoGUI图片定位的自动化截图工具–jmeter部分 基于PyAutoGUI图片定位的自动化截图工具–jmeter部分&#…

js纯前端实现语音播报,朗读功能(2024-04-15)

实现语音播报要有两个原生API 分别是【window.speechSynthesis】【SpeechSynthesisUtterance】 项目代码 // 执行函数 initVoice({text: 项目介绍,vol: 1,rate: 1 })// 函数 export function initVoice(config) {window.speechSynthesis.cancel();//播报前建议调用取消的函数…