江科大/江协科技 STM32学习笔记P9-11

文章目录

  • OLED
    • 1、OLED硬件
      • main.c
  • EXTI外部中断
    • 1、中断系统
    • 2、中断执行流程图
    • 3、STM32中断
    • 4、中断地址的作用
    • 5、EXTI
    • 6、EXTI基本结构
    • 7、AFIO复用IO口
    • 8、EXTI框图
      • 或门和与门
    • 9、旋转编码器介绍
    • 10、硬件电路


OLED

1、OLED硬件

在这里插入图片描述
SCL和SDA是I2C的通信引脚,需要接在单片机I2C通信的引脚上,在这里的驱动程序用的是GPIO口模拟的I2C通信,所以这两个端口可以接在任意的GPIO口上。

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"int main(void)
{/*模块初始化*/OLED_Init();		//OLED初始化/*OLED显示*/OLED_ShowChar(1, 1, 'A');				//1行1列显示字符AOLED_ShowString(1, 3, "HelloWorld!");	//1行3列显示字符串HelloWorld!OLED_ShowNum(2, 1, 12345, 5);			//2行1列显示十进制数字12345,长度为5OLED_ShowSignedNum(2, 7, -66, 2);		//2行7列显示有符号十进制数字-66,长度为2OLED_ShowHexNum(3, 1, 0xAA55, 4);		//3行1列显示十六进制数字0xA5A5,长度为4OLED_ShowBinNum(4, 1, 0xAA55, 16);		//4行1列显示二进制数字0xA5A5,长度为16//C语言无法直接写出二进制数字,故需要用十六进制表示while (1){}
}

EXTI外部中断

1、中断系统

在这里插入图片描述

2、中断执行流程图

在这里插入图片描述
在中断执行前会对程序的现场进行保护,中断执行后还原现场。
右边有中断函数,中断函数不需要我们调用,由硬件自动调用。

3、STM32中断

在这里插入图片描述

4、中断地址的作用

程序中的中断函数,它的地址是由编译器来分配的,是不固定的,但是中断跳转由于硬件的限制只能跳转到固定的地址执行程序,为了硬件能跳转到一个不固定的中断函数里,需要在内存中定义一个地址列表,这个列表地址是固定的,中断发生后就跳到这个固定位置,然后在这个固定位置,由编译器再加上一条跳转到中断函数的代码,这样中断跳转就可以跳转到任意位置了。说人话就是中断跳转认的固定地址由编译器担保,编译器对外用固定地址,对内自己再找地址存,类似中断向量表。
NVIC基本结构
在这里插入图片描述
在STM32中用来统一分配中断优先级和管理中断,NVIC是一个内核外设。为什么需要NVIC?因为STM32的中断非常多,如果都接到CPU上,CPU需要引出很多线,如果很多中断同时申请,或者中断很多产生了拥堵,难处理,所以需要NVIC。NVIC有很多输入口,只有一个输出口,NVIC根据每个中断的优先级分配中断的先后顺序,之后通过输出口让CPU处理中断。
NVIC优先级分组
在这里插入图片描述
类比医生看病,响应优先级高的可以等医生看完这个病人后优先看病,抢占优先级高的直接让正在看病的病人等着自己先看。
当抢占优先级和响应优先级均相同时,按上上图中表中的优先级顺序数字来排队,数字小的优先排队

5、EXTI

在这里插入图片描述
引脚电平变化,申请中断,上升沿,电平从低到高触发中断,下降沿,高到低触发中断,软件触发是引脚不变程序里的代码触发中断。
相同的Pin不能同时触发中断的意思是PA1、PB1、PC1这样的只能选1个作为中断引脚,所以如果有多个中断引脚,要选不同Pin的引脚,比如PA6和PA7、PA9和PB15这样的。
16个GPIO_Pin是外部中断的主要功能,后面四个是来外部中断“蹭网”的,为什么呢?因为外部中断有从低功耗模式的停止模式下唤醒STM32的功能,对于PVD电源电压监测,当电源从电压过低恢复时,需要PVD借助一下外部中断退出停止模式,对于RTC闹钟来说,有时为了省电,定一个闹钟后STM32进入停止模式,等到闹钟响的时候再唤醒,也需要借助外部中断。
中断响应:申请中断,让CPU执行中断函数。事件响应:当外部中断检测到引脚电平变化时,正常的流程是选择触发中断,但在STM32中也可以选择触发一个事件,如果触发事件那外部中断的信号就不通向CPU了,而是通向其他外设,用来触发其他外设的操作,比如触发ADC转化、触发DMA等。

6、EXTI基本结构

在这里插入图片描述
每个GPIO外设都有16个引脚,在AFIO中进行选择后接到EXTI边缘检测及控制电路,与下面4个蹭网的一起,经过EXTI电路后分为了两种输出,上面一直到ETH都是接NVIC用来触发中断,注意外部中断的9-5和15-10分到一个通道里,减少通道资源占用,也就是9-5触发同一个中断函数,编程时,在这个两个中断函数中需要再根据标志位来区分到底是哪个中断进来的。下面的20条输出线接到其他外设进行事件响应。

7、AFIO复用IO口

在这里插入图片描述
PA0、PB0…通过数据选择器接到EXTI0,这就清楚了为什么相同的Pin不能同时触发中断。

8、EXTI框图

在这里插入图片描述
输入线进入边沿检测电路,在上面的上升沿寄存器和下降沿寄存器选择触发方式,接着触发信号进入或门的输入端,通过或门后触发信号兵分两路,上面触发中断,下面触发事件。触发中断首先会置一个挂起寄存器,相当于中断标志位,读该寄存器可判断出是哪个通道触发的中断,如果寄存器置1就会继续向左走,和中断屏蔽寄存器共同进入一个与门,然后进NVIC中断控制器,这里的与门是开关的作用,只有中断屏蔽寄存器给1时才有可能让触发信号继续走。再看下面的触发事件的输出部分,首先是一个事件屏蔽寄存器进行开关控制,最后通过一个脉冲发生器到其他外设,脉冲发生器的作用是给一个电平脉冲,用来触发其他外设的动作。

或门和与门

或门一个为1则为1,与门一个为0就是0。

9、旋转编码器介绍

在这里插入图片描述
转动旋转编码器产生脉冲波形,信号突发,STM32不知道什么时候产生,同时是外部驱动,STM32只能被动读取,最后这个信号非常快,STM32稍晚一点读取就会错过很多波形。对于这种情况,考虑外部中断。
按键虽然也是外部驱动的突发事件,但外部中断不好处理按键抖动和松手检测的问题,对于按键来说,它的输出波形也不是转瞬即逝的,要求不高可以在主程序中循环读取,或定时器中断读取。
在这里插入图片描述
内部用金属触点进行通断,是一种机械触点式编码器,内侧的左右触电都接中间的C引脚,外侧的触电左接A引脚,右接B引脚,中间的圆的金属片是一个按键,可以按下,上面两根线引出。
右边是编码盘,是一系列金属触点,在旋转时依次通断两边的触点,还需注意金属盘的位置是经过设计的,能让两侧触点的通断产生一个90度的相位差,最终配合一下外部电路,两个输出AB就会输出如下,当正转时左边A相引脚输出一个方波信号,同时右边的B相引脚输出一个和它相位相差90度的波形,这种相位相差90度的波形叫正交波形,可以测方向,这就是单相输出和两相正交输出的区别。
在这里插入图片描述
我们用到的这种触点接触形式的旋转编码器适合调节音量但不适合测电机,另外几种非接触的形式可以用于电机测速。

10、硬件电路

在这里插入图片描述
编码器内部两个触点在旋转轴旋转时以相位相差90度的方式交替导通,需要配合外围电路输出高低电平,左图左下接10K的上拉电阻,默认不旋转时上拉为高电平,通过R3输出到A端口的也为高电平。当触电导通时,接到GND,低电平。R3是输出限流电阻,防止模块引脚电流过大,C1是输出滤波电容,可以防止输出信号抖动。
右边AC接两个引脚,C暂时不用。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习的运作原理和算法分类,让机器学习更加通俗易懂

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

微信扫码登陆验证在Go系统开发时的应用与实践

微信扫码登录实现 登录流程 总体来说,就是三步: 点击微信登录,跳转到微信页面微信扫码登录,确认登陆微信跳转回来 这里,我们就得,明确两个问题: 跳到微信界面,跳过去的 URL 是什…

异常处理和swagger使用

全局异常处理类 定义全局异常处理类,会将错误全部提交到这个异常处理类中进行处理,这个类会将处理的统一结果响应给前端,如果不添加异常处理类,异常不会按照统一的响应格式进行,前端无法识别,当然也可以在…

vue-快速入门

Vue 前端体系、前后端分离 1、概述 1.1、简介 Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,可以高效地开发用户界面。…

网络安全法规对企业做等保有哪些具体规定?

网络安全法规对企业做等保的具体规定 根据《中华人民共和国网络安全法》,企业作为网络运营者,需要履行网络安全等级保护制度的相关义务,确保网络安全和数据保护。具体规定包括: 网络安全等级保护制度:企业应根据网络安…

从统计学、到机器学习和ChatGPT

机器学习(Machine Learning,ML) 和统计学(Statistics)都是数据科学的重要组成部分。 机器学习的历史 早期的机器学习 1943年:沃尔特皮茨(Walter Pitts)和沃伦麦卡洛克(Warren McCulloch)在他们的论文《神经活动中的思想逻辑演算》(A Logical Calculus of the Idea…

什么是NIO

NIO(New Input/Output),也称为Java非阻塞IO,是从Java 1.4版本开始引入的一个新的IO API,旨在提供一种比传统的阻塞IO更高效、更灵活的IO操作方式。 一 NIO用法的详细介绍 NIO支持面向缓冲区的、基于通道的IO操作&…

浏览器的最大并发数(http1.1)

HTTP/1.1:每个资源请求通常需要单独的TCP连接,尽管支持Keep-Alive机制,允许在同一个TCP连接上连续发送多个请求。但通常浏览器限制并发TCP连接数(例如,每个域名最多6个并发连接)。 HTTP/2:引入…

HarmonyOS三方库的使用

系统组件难以提供比较优秀的界面,需要第三方库来实现一些比较好看的界面效果 三方库的获取: 开源社区支持OpenHarmony-TPC 和 Openharmony三方库中心仓 先目前已经拥有各种各样的三方库,包括UI 图片 动画 网络 数据存储 工具类 多媒体 安全等…

leetcode 2236.判断根节点是否等于字节点

1.题目要求: 给你一个 二叉树 的根结点 root,该二叉树由恰好 3 个结点组成:根结点、左子结点和右子结点。如果根结点值等于两个子结点值之和,返回 true ,否则返回 false 。2.思路: 直接数组前序遍历,然后判断后面两个…

unity美术资源优化(资源冗余,主界面图集过多)

图片资源冗余: UPR unity的性能优化工具检查资源 1.检查纹理读/写标记 开启纹理资源的读/写标志会导致双倍的内存占用 检查Inspector -> Advanced -> Read/Write Enabled选项 2.检查纹理资源alpha通道 如果纹理的alpha通道全部为0,或者全部为2…

UEFI DebugLib 介绍

1.我们调试中常用Debug 打印信息,这些会输出到BIOS串口日志中 EFI_STATUSEFIAPIHelloWorld2(IN EFI_HANDLE ImageHandle,IN EFI_SYSTEM_TABLE *SystemTable){EFI_STATUS Status;StatusEFI_SUCCESS;gST->ConOut->OutputString(gST->ConOut,L&q…

【vluhub】zabbix漏洞

介绍: zabbix是对服务器资源状态例如、内存空间、CPU、程序运行状态进行检测、设置预警值、短信设置等功能等一款开源工具。配置不当存在未授权,SQL注入漏洞 弱口令 nameadmin&passwordzabbix nameguest&password POST /index.php HTTP/1.1 Host: 192.1…

docker拉取错误解决

error pulling image configuration: download failed after attempts6: dial tc 首先,打开 Docker 的配置文件 daemon.json。 sudo nano /etc/docker/daemon.json 1 步骤二:添加国内镜像源 在配置文件中添加以下内容: {"registry-mir…

Flex布局中元素主轴上平均分布 多余的向左对齐

content:父元素 content-item: 子元素 主轴上子元素平均分布 .content {display: flex;flex-wrap: wrap;justify-content: space-between;.service-item {display: flex;flex-direction: column;justify-content: center;align-items: center;width: 80px;height:…

浅层深度学习的概述

在人工智能和机器学习的领域中,“深度学习”已成为一个热门话题。该术语通常与多层神经网络和复杂模型联系在一起,然而,“浅层深度学习”是指那些较为简单而且通常只有一两个隐藏层的神经网络。这种模型在许多任务中表现出色,同时…

【C++】19.红黑树模拟实现 set 和 map

我们想要实现STL中的set和map,那么第一步就需要看一下库函数是如何实现的: 通过查看源代码我们发现两个容器都包含了stl_tree.h,因此我们猜测此头文件实现的是红黑树。 但是set和map很显然不是使用同一棵树实现的,那么STL库是怎么…

微分方程的分类

按方程中未知函数导数的最高阶数分类: 一阶微分方程:只含有一个自变量、一个未知函数及其一阶导数的方程。 二阶微分方程:含有未知函数最高阶导数为二阶的微分方程。 高阶微分方程:含有未知函数导数高于二阶的微分方程。 按照…

vue3 Axios封装使用

先安装axios: npm install axios 第一步:项目src下创建一个名为request的文件夹(看一下示例图): 然后在request下创建两个api.ts和index.ts的文件 api.ts里的内容:(url写你自己的接口&#xff…

Vscode——如何快速搜索项目工程中的某个文件的位置

第一步:按 shift ctrl p 第二步:然后把 > 删除 第三步:输入文件名称即可