【嵌入式】化繁为简 UART、I2C、SPI整理

news2025/1/19 17:31:56

本文参考:浅谈单片机通信,化繁为简UART、I2C、SPI学习全家桶,你值得拥有!_哔哩哔哩_bilibili 

单片机的数据都是以0、1发送的,每一位发送多少时间取决于波特率 。

波特率是发送二进制数据位的速率,单位是bps,即每秒传输二进制位的数量,如256bps = 256bit/s,两个单片机要进行通信必须保持一致的通信波特率

UART

通用异步收发器,是一种通用串行、异步通信总线,该总线有两条数据线,可以实现全双工的发送和接收,常用于单片机与单片机或外部辅助设备之间的通信。

 下面我们用UART来发送0X96这个数据,UART发送数据时,先发低位再发高位

当总线在空闲状态时,线路保持高电平,发送数据前会先发送一个0(起始位),让总线从高电平变为低电平,提醒数据接收方做好准备,然后依次从低位到高位发送8位数据位, 8位数据完成传输后会发送一个1,让总线重新回到高电平状态(停止位)。所以UART传输数据时一次发8位,加上起始位和停止位 一共是10位数据。若要发送新的字节,需要重新发送起始位,并重复该过程

I2C

一种两线式、串行、半双工同步通信总线,可以挂载多个参与通信的器件,常用于板内通信,比如单片机与外围芯片之间短距离、低速的信号传输。

I2C总线有两条线,一条SCL时钟线用于同步,一条SDA数据线用于传输数据,I2C总线能挂载多个器件,且支持多主机模式,即线路上的任一器件都可以作为主机,但由于只有一根信号线,同一时刻,只能有一个主机,主机拥有该时刻下总线的控制权,也就是发起和结束一次通信的权利,而从机只能被主机呼叫。

主机如何识别自己要呼叫的从机呢?
在I2C总线中,每个器件都有一个固定的号码,它是一个七位的地址。
例如,当MCU为主机,要读取E2PROM里的数据时,先会向总线发送E2PROM的地址找到E2PROM。

I2C发送数据的规则和时序:
假设我们要向地址为0x31的E2PROM发送0x96这个8位数据。I2C是从高位到低位依次发送的,当总线空闲时,SCL时钟线和SDA数据线均保持高电平,当主机要开始传输数据时,会先将SDA电平拉低,而此时SDA这个从高到低的跳变沿就是起始位,接下来就是进行器件寻址,在SCL低电平时,以此发送七位地址位,0x32发送完毕后,主机会发送一个读写指示位,低电平表示要发送数据,高电平表示要请求数据,主机发送完以上数据,从机如果成功接收,会发送一个应答位到总线上,这里要特别注意的是,只有SCL低电平时,SDA才能发送变化,SCL高电平时,SDA需要保持,以方便数据接收方读取操作。

发完地址位,主机找到要发送的器件,主机开始正式发送数据,发送的过程和寻址过程一样。主要说明的是,当一个字节八位数据发送完后,要有一个应答才能发送下一个字节,当要传输的所有数据发送完毕后,主机要将SCL时钟电平拉到高电平,并将SDA数据线从低电平拉到高电平,这个从低到高的跳变沿表示停止位。

I2C 通信一般流程:
1、主机发送起始位并进行从机寻址
2、得到应答后主机开始发送/读取数据位
3、数据发送/读取完成主机发送停止位结束此次通信
 

SPI

串行外围设备接口,是一种高速、全双工、同步通信总线,常用于单片机和E2PROM、FLASH、实时时钟、数字信号处理器等器件的通信,它主要是主从方式通信,通常只有一个主机和数个从机。

标准的SPI有四根线,分别是SCLK、MOSI、MISO、CS

SCLK:时钟信号,由主机产生
MOSI:主机给从机发送指令或数据的通道
MISO:主机读取从机的状态或数据的通道
CS:从机片选使能信号
 

其中SCLK是必须的,其他三条线可以进行删减

在同一时刻,主机只能与一个从机进行通信,当总线存在多个从机时,需要进行片选,将从机的CS借口电平拉高或者拉低 (取决于从机的片选使能信号)

SPI和I2C一样,数据从高位到低位依次发送。

SPI的时钟线 SCLK在空闲时可以是高电平也可以是低电平。
以空闲时刻位高电平进行说明,空闲时刻为高电平,当SCLK出现下降沿从高电平跳到低电平时进行数据输出,当SCLK出现上升沿,从低电平跳变到高电平时进行数据采样 。和I2C相比,SPI没有起始位、结束位、应答位,规则上简单很多。

上述提到,SCLK在空闲时可以是高电平也可以是低电平,其实这反应了时钟的极性

CPOL时钟极性:
CPOL=0,SCLK空闲状态为低电平
CPOL=1,SCLK空闲状态为高电平

时钟的相位决定了什么时候进行数据传输、什么时候进行数据采样

CPHA时钟相位:
CPHA=0,每个周期的第一个跳变沿采样
CPHA=1,每个周期的第一个跳变沿输出

以上两两组合就构成了SPI通信的四种工作模式
 

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

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

相关文章

认识数据分析

文章目录 1. 认识数据分析1.1 数据自身的三大属性1.2 建数仓 数据分析的工程技术1.3 数据分析解决问题的原理1.4 数据分析的具体流程1.5 数据的中心化和智能化1.6 数据分析的四种类型和六个方向 1. 认识数据分析 1.1 数据自身的三大属性 客观:用数字衡量和表现一件…

vue2+three.js+blender(实现3d 模型引入并可点击效果)

2023.9.13今天我学习了如何把3d建模里面的模型引入到vue中&#xff0c;并可以实现拖动&#xff0c;点击的效果&#xff1a; 首先安装&#xff1a; npm install three 相关代码如下&#xff1a; <!--3d基础版&#xff0c;实现单个3d图形--> <template><div>&…

【服务器】ASUS ESC4000-E11 安装系统

ASUS ESC4000-E11说明书 没找到 ASUS ESC4000-E11的说明书&#xff0c;下面是ESC4000A-E11的说明书&#xff1a; https://manualzz.com/doc/65032674/asus-esc4000a-e11-servers-and-workstation-user-manual 下载地址&#xff1a; https://www.manualslib.com/manual/231379…

【PTA】PAT(甲级)2022年冬季考试自测

个人学习记录&#xff0c;代码难免不尽人意。 这次考试&#xff0c;e&#xff0c;第一题我看好多人都没理解题意做错了&#xff0c;还有第四题真的是比较意外&#xff0c;之前做的题都是给序列建树&#xff0c;但是这次让判断是否可以生成树&#xff0c;之前从来没有遇到过这类…

leecode 每日一题 2596. 检查骑士巡视方案

2596. 检查骑士巡视方案 骑士在一张 n x n 的棋盘上巡视。在 有效 的巡视方案中&#xff0c;骑士会从棋盘的 左上角 出发&#xff0c;并且访问棋盘上的每个格子 恰好一次 。 给你一个 n x n 的整数矩阵 grid &#xff0c;由范围 [0, n * n - 1] 内的不同整数组成&#xff0c;其…

pyechart练习(一):画图小练习

1、使用Map制作全球人口分布图 import math import osimport matplotlib.pyplot as plt from pyecharts.charts import Map from pyecharts import options as opts# 只有部分国家的人口数据 POPULATION [["China", 1420062022], ["India", 1368737513],…

【C++】拷贝构造函数调用时机 ② ( 对象值作为函数参数 | 对象值作为函数返回值 )

文章目录 一、拷贝构造函数概念二、对象值作为函数参数1、拷贝构造函数调用情况说明2、代码示例 - 对象值作为函数参数 三、对象值作为函数返回值1、拷贝构造函数调用情况说明2、代码示例 - 对象值作为函数返回值 博客总结 : " 拷贝构造函数 " 又称为 " 赋值构…

MySQL之分布式事务

写在前面 当数据库进行了分库分表 之后为了保证数据的一致性。不可变的就需要引入跨数据的事务解决方案&#xff0c;这种解决方案我们叫做分布式事务。本文就一起来看下分布式事务相关的内容。 在8.0 版本上学习。 1&#xff1a;实战 为了能够更好的理解理论知识&#xff0c;…

基于SSM的中小型企业财务管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

C++项目实战——基于多设计模式下的同步异步日志系统-②-前置知识补充-不定参函数

文章目录 专栏导读不定参函数C风格不定参函数不定参宏函数 专栏导读 &#x1f338;作者简介&#xff1a;花想云 &#xff0c;在读本科生一枚&#xff0c;C/C领域新星创作者&#xff0c;新星计划导师&#xff0c;阿里云专家博主&#xff0c;CSDN内容合伙人…致力于 C/C、Linux 学…

数据分析三剑客之Matplotlib

0.Matplotlib绘图和可视化 1.简介 我的前面两篇文章介绍了 Nimpy &#xff0c;Pandas 。今天来介绍一下Matplotlib。 简单来说&#xff0c;Matplotlib 是 Python 的一个绘图库。它包含了大量的工具&#xff0c;你可以使用这些工具创建各种图形&#xff0c;包括简单的散点图&…

Java多线程并发面试题

文章目录 Java并发基础并行和并发有什么区别&#xff1f;说说什么是进程和线程&#xff1f;Java线程创建方式&#xff1f;Runnable和Callable接口的区别&#xff1f;为什么调用start()方法时会执行run()方法&#xff0c;不直接调用run()方法&#xff1f;sleep()和wait()的区别&…

预约陪诊就诊小程序源码多城市开发版

陪诊小程序多城市版开发 小程序支持多城市开通&#xff0c;支持创建陪诊团队以及提成奖励设置&#xff0c;可以定义多种服务类型&#xff0c;订单流程简单明了&#xff0c;支持陪诊师手机端订单处理&#xff0c;家政类目可以轻松过审。 小程序市场前景&#xff1a; 人口老龄化…

强大:dynamsoft-barcode-reader-dotnet-9.6.30 Crack

dynamsoft-barcode-reader-dotnet 具有灵活 API 的强大条码扫描器 SDK 无论它是扭曲的、黑暗的、遥远的、模糊的、批量的还是移动的&#xff0c;我们都可以扫描它。速度快 条码扫描速度每分钟500 业界最快的扫描解码&#xff0c;可应用于不同场景&#xff1a; 多个条形码/二维…

【VS2022】调试

F9 创建或取消断点 ctrlF9 禁用断点 F5 开始调试&#xff08;到断点处停下来&#xff09; F10 逐过程&#xff08;不进入函数&#xff09; F11 逐语句 F5、F10、F11都可以直接进入调试 【调试】->【窗口】->【监视】&#xff0c;输入变量就可以观察到变量的值。 …

C语言数组和指针笔试题(二)(一定要看)

目录 字符数组二例题1例题2例题3例题4例题5例题6例题7总结 字符数组三例题1例题2例题3例题4例题5例题6例题7 字符数组二 char arr[] {a,b,c,d,e,f} 1:printf("%d\n", strlen(arr)); 2:printf("%d\n", strlen(arr0)); 3:printf("%d\n", strlen(…

Python小项目之Tkinter应用】随机点名/抽奖工具大优化:新增查看历史记录窗口!语音播报功能!修复预览文件按钮等之前版本的bug!

文章目录 前言一、实现思路二、关键代码查看历史记录按钮语音播报按钮三、完整代码总结前言 老生常谈,先看效果:(订阅专栏可获取完整代码) 初始状态下,我们为除了【设置】外的按钮添加弹窗,提示用户在使用工具之前要先【设置】。在设置界面,我们主要修改了【预览文件】…

每日一题 2596. 检查骑士巡视方案

难度&#xff1a;中等 很简单&#xff0c;从第 0 步开始模拟即可&#xff0c;唯一sb的就是测试用例中如果&#xff08;0&#xff0c;0&#xff09;处不为0的话就直接false&#xff0c;而不是去找0在哪 我的代码&#xff1a; class Solution:def checkValidGrid(self, grid: L…

2000-2021年上市公司全要素生产率数据OP法(含原始数据+计算代码+结果)

2000-2021年上市公司全要素生产率数据OP法&#xff08;含原始数据计算代码结果&#xff09; 1、时间&#xff1a;2000-2021年 2、指标&#xff1a;股票代码、年份、证券代码、固定资产净额、营业总收入、营业收入、营业成本、销售费用、管理费用、财务费用、支付给职工以及为…

防火墙 (五十四)

目录 前言 一、防火墙作用 二、防火墙分类 三、防火墙性能 四、硬件防火墙 五、软件防火墙 5.1 iptables 六、iptables应用 前言 本文就简单的介绍了防火墙的基础内容和一些简单案例的操作。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、防火墙…