当前位置: 首页 > news >正文

day06(单片机)IIC+STH20

目录

IIC+SHT20

I2C基础简介

 为什么I2C需要使用上拉电阻?

I2C特点

时序图分析

起始信号与终止信号

数据传输时序

字节传输和应答信号·

I2C寻址

主机给从机发送一个字节

主机给从机发送多个字节

主机从从机接收一个字节

主机从从机接收多个字节

I2C寄存器

I2C_RXDR(I2C 接收数据寄存器)

I2C_TXDR(I2C 发送数据寄存器)

温度传感器实验

模块简介

SHT20通讯原理

起始和终止时序

通信时序

IIC地址

I2C相关命令

hold master通信时序

no hold master通信时序

SHT20信号转换

湿度转换

温度转换

硬件IIC实验-SHT20读取实验

引脚定位

cubeMX配置

驱动代码移植

重定向相关

程序编写


IIC+SHT20

I2C基础简介

IIC(Inter-Integrated Circuit)是一个多主从的串行总线,又叫I2C,是由飞利浦公司发明的通讯总线,属于半双工同步传输类型总线。IIC总线是非常常见的数据总线,仅仅使用两条线就能完成多机通讯,一条SCL时钟线,另外一条双向数据线SDA。不同的器件,都是并联接在这两条线上,I2C总线上的每个设备都自己一个唯一的地址,来确保不同设备之间访问的准确性。

SDA(Serial data)是数据线,D代表Data也就是数据,Send Data 也就是用来传输数据的

SCL(Serial clock line)是时钟线,C代表Clock 也就是时钟 也就是控制数据发送的时序的

 为什么I2C需要使用上拉电阻?

答:总线空闲的时候,SDA和SCL都是高电平。当其中一个设备拉低总线,整条线就全是低电平,器件与器件之间变为"与"关系。

为了避免总线信号收到从设备的干扰,各设备连接到总线的输出端时必须是漏极开路(OD)输出,即高阻态,无法主动输出高电平,需要外部上拉电阻才可以获得高电平。

I2C特点

通常我们为了方便把IIC设备分为主设备和从设备,基本上谁控制时钟线(控制SCL的电平高低变换)谁就是主设备。

  • IIC主设备功能:主要产生时钟,产生起始信号和停止信号
  • IIC从设备功能:可编程的IIC地址检测,停止位检测
  • IIC的一个优点是它支持多主控(multimastering),其中任何一个能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。
  • 支持不同速率的通讯速度,标准速度(最高速度100kHZ), 快速(最高400kHZ),比uart高,比spi低
  • SCL和SDA都需要接上拉电阻 (大小由速度和容性负载决定一般在3.3K-10K之间) 保证数据的稳定性,减少干扰。
  • IIC是半双工,而不是全双工 ,同一时间只可以单向通信,IIC协议首先是发送从机硬件地址,然后发送命令,再发送数据/寄存器编号或者读取数据。IIC协议可以多字节连续读写数据。
  • 各设备连接到总线的输出端时必须是漏极开路(OD)输出或集电极开路(OC)输出

时序图分析

起始信号与终止信号

  1. SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;
  2. SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号;
  3. 起始和终止信号都是由主机发出,起始信号产生后,总线就处于占用的态;
  4. 终止信号产生后,总线就处于空闲态。
     

数据传输时序

  1. I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定; 只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
  2. 在时钟为低电平期间,发送器向数据线上写入数据,因此数据线上的数据运行变化; 在时钟为高电平期间,接收器从数据线上读取数据,因此必须保持数据线上的数据稳定。
  3. 最终完成一个时钟周期内,发送器发生一个bit位数据,接收器接收一个bit位数据。

字节传输和应答信号·

  1. 每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。
  2. 在第9个时钟周期的低电平期间,接收器向数据线上写入数据。
  3. 在第9个时钟周期的高电平期间,发送器从数据线上读取数据。
  4. 如果读到的是低电平信号,表示应答信号。
  5. 如果读到的是高电平信号,表示非应答信号。

I2C寻址

  1. I2C总线上传送的数据信号是广义的,既包括地址信号,又包括真正的数据信号。
  2. 主机在起始信号后必须传送一个从机的地址(7位),第8位是数据的传送方向位(R/W),用“0”表示主机发送数据(W),“1”表示主机接收数据(R)。
  3. 总线上的每个从机都将这7位地址码与自己的地址进行比较,如果相同,则认为自己被主机寻址,根据R/W位将自己定为发送器或接收器。
主机给从机发送一个字节

主机给从机发送多个字节

主机从从机接收一个字节

主机从从机接收多个字节

I2C寄存器

I2C_RXDR(I2C 接收数据寄存器)

  • 位 31:8 保留,必须保持复位值。
  • 位 7:0 RXDATA[7:0]:8 位接收数据 (8-bit receive data) 从 I2C 总线接收的数据字节

I2C_TXDR(I2C 发送数据寄存器)

  • 位 31:8 保留,必须保持复位值。
  • 位 7:0 TXDATA[7:0]:8 位发送数据 (8-bit transmit data) 待发送到 I2C 总线的数据字节

温度传感器实验

模块简介

SHT20 温湿度传感器是一种数字式温湿度传感器,它采用超薄膜式湿度传感器和热敏电阻式温度传感器,在测量环境温度和湿度方面具有高精度和可靠性。

SHT20 传感器使用 I2C 总线接口进行数据通信,它能够快速、准确地测量环境的温度和相对湿度。

可知,该器件和主控单元采用IIC进行通信

可知,最小供电电压为2.1v,最大供电电压为3.6V,推荐供电电压为3.0V,符合单片机引脚供电范围,适配!

IIC通信引脚如图

SHT20通讯原理

起始和终止时序

SHT20 采用标准的 I2C 协议进行通讯,每个传输序列都以 Start 状态作为开始并以 Stop 状态作为结束。

启动传输状态: 当 SCL 为高电平时,SDA 由高电平转换为低电平:

停止传输状态: 当 SCL 高电平时,SDA 线上从低电平转换为高电平:

通信时序
IIC地址

开始传输后,随后先传输首字节包括 I2C 设备地址(7bit)和一个 SDA 方向位(R:1, W:0)。

一个时钟发送一个位,在第 8 个下降沿之后,通过拉低 SDA 引脚(ACK 位 为 0),只是传感器数据接收正常。

在发出测量命令之后(‘1110’‘0011’代表温度测量,‘1110’‘0101’代表相对湿度测量 ,这种为主机模式), MCU 必须等待测量完成。

I2C相关命令

SHT20命令从上到下依次是:

触发温度测量(保持主机模式)

触发湿度测量(保持主机模式)

触发温度测量(非保持主机模式)

触发湿度测量(非保持主机模式)

写用户寄存器

读用户寄存器

复位

命令又分为hold与no hold两种模式。

其中hold master 和 no hold master 的意思就是,如果是hold,那么在测量过程中SHT20会主导并占用着IIC的总线,IIC总线上的其他设备无法占用,而no hold就是测量过程中SHT20不占用IIC总线,那其他设备也可以使用该数据线。

常用no hold master,但如果IIC总线上就SHT20一个设备,那么其实无所谓用哪一种。

hold master通信时序

此时序图表示的是SDA总线的状态,浅色代表当前总线控制权在主机手里,相应的数据就是主机发送的,深色代表当前总线控制权在SHT20传感器手里,相应的数据就是SHT20发送的。

刚开始主机发送起始标志,然后发送了7位IIC地址+1位写标志,表示要向当前地址模块发出指令,从机回复确认

主机发送指令代码,此处发送的是11100101,根据前面提供的指令表可知,此时发送的控制指令是在holdmaster模式下读取湿度,SHT20模块回复确认SHT20模块控制着SDA总线开始进入采样测量阶段,并在测量期间将时钟线SCL拉低,由于IIC要求高电平读取数据,所以主机在测量期间无法接收任何数据。

当测量完毕后,SHT20会释放掉时钟线,此时SCL线被上拉电阻拉高,主机可以读取数据,SHT20先发高8位,主机回复确认后,SHT20模块再发低8位数据,此时主机可发送NACK+P停止接收,也可回复ACK,SHT20模块会继续发送8位的CRC校验,主机收到后发送NACK+停止位结束当前通信。(图上是按照接收CRC校验来的)

可知上图共收到三个字节的数据,包含2个字节的湿度信息+1个字节的CRC校验

湿度信息:0110001101010010,共16位,但需要注意的是

最大的分辨率只有14位(数据最多能解析出14位来),所以最后的两位不能算进去.

手册中说43、44着两位被用来表示状态信息,43是1表示当前测量的是湿度,是0的话表示当前测量的是温度,44位的0,目前还没有被分配用处

所以湿度数据最后两位必为10,温度必为00

这并不是说明我们需要把采集的16位数据当成14位数据来用,而是我们需要把最后两位给清0,也就是将(16位数据)& 0xFFFC(1111 1111 1111 1100

所以最后的湿度数据是0110001101010000

no hold master通信时序

刚开始主机发送起始标志,然后发送了7位IIC地址+1位写标志,表示要向当前地址模块发出指令,从机回复确认。然后主机发送指令代码,此处发送的是11110101,根据前面提供的指令表可知,此时发送的控制指令是在no holdmaster模式下读取湿度,主机等待20us后发送停止标志,由于是no holdmaster,可见在测量阶段颜色为浅色,SHT20让出了SDA总线控制,这样在测量期间主机就可以和其他从机通信了。

然后主机可以选择一个时间向SHT20发送起始标志+地址+读指令 来读取数据,如果发送时SHT20还没有测量完毕则主机收不到SHT20的ACK,SHT20会是NACK,主机收到NACK后发送停止位,再过一段时间主机会继续向SHT20发送起始标志+地址+读指令 来读取数据,如果此时SHT20测量完毕,则会回复ACK,然后主机让出SDA总线控制权,SHT20发送湿度数据。

剩下的跟上面一样,SHT20先发高8位,主机回复确认后,SHT20模块再发低8位数据,此时主机可发送NACK+P停止接收,也可回复ACK,SHT20模块会继续发送8位的CRC校验,主机收到后发送NACK+停止位结束当前通信。(图上是按照接收CRC校验来的)

同样,此时我们需要把最后两位给清0,也就是将(16位数据)& 0xFFFC(1111 1111 1111 1100),

最后的湿度数据是0110001101010000

SHT20信号转换
湿度转换

温度转换

硬件IIC实验-SHT20读取实验

引脚定位

PB7——I2C1_SDA

PB6——I2C1_SCL

​​​​​​​cubeMX配置

驱动代码移植

重定向相关

#include<stdio.h>
int fputc(int ch, FILE * p)
{
		while(!(USART1->ISR & 1<<7));//等待TDR为空,即TXE置1,跳出while,然后往TDR中放数据
		USART1->TDR=ch;
}

程序编写

效果

相关文章:

day06(单片机)IIC+STH20

目录 IICSHT20 I2C基础简介 为什么I2C需要使用上拉电阻&#xff1f; I2C特点 时序图分析 起始信号与终止信号 数据传输时序 字节传输和应答信号 I2C寻址 主机给从机发送一个字节 主机给从机发送多个字节 主机从从机接收一个字节 主机从从机接收多个字节 I2C寄存器 I2C_RXDR&…...

Bugku CTF_Web——文件上传

Bugku CTF_Web——文件上传 进入靶场 My name is margin,give me a image file not a php抓个包上传试试 改成png也上传失败 应该校验了文件头 增加了文件头也不行 试了一下 把文件类型改成gif可以上传 但是还是不能连接 将Content-Type改大小写 再把文件后缀名改成php4 成…...

C#版使用融合通信API发送手机短信息

目录 功能实现 范例运行环境 实现范例 类设计 类代码实现 调用范例 总结 功能实现 融合云通信服务平台&#xff0c;为企业提供全方位通信服务&#xff0c;发送手机短信是其一项核心功能&#xff0c;本文将讲述如何使用融合云服务API为终端手机用户发送短信信息&#xf…...

人工智能:重塑医疗、企业与生活的未来知识管理——以HelpLook为例

一、医疗行业&#xff1a;AI引领的医疗革新 随着人工智能&#xff08;AI&#xff09;技术的持续飞跃&#xff0c;我们正身处一场跨行业的深刻变革之中。在医疗健康的广阔舞台上&#xff0c;人工智能技术正扮演着日益重要的角色。它不仅能够辅助医生进行病例的精准诊断&#xf…...

MVVM(Model-View-ViewModel)模型

MVVM&#xff08;ModelViewViewModel&#xff09;模型是一种常用于软件开发中的架构模式&#xff0c;尤其在前端框架&#xff08;如 Vue.js、React、Angular&#xff09;中被广泛应用。它将程序的用户界面与业务逻辑分离&#xff0c;便于维护和扩展。 MVVM 的三个组成部分 1. …...

权限系统:权限应用服务设计

今天聊聊权限系统的应用服务设计。 从业务需求的角度来看&#xff0c;权限系统需要解决两个核心问题&#xff1a; 1、菜单渲染与动态展示 当用户成功登录并接入系统后&#xff0c;系统需要动态获取并展示该用户有权限访问的菜单项。 这一过程涉及前端系统与权限系统的交互。前端…...

Android音频架构

音频基础知识 声音有哪些重要属性呢&#xff1f; 响度(Loudness) 响度就是人类可以感知到的各种声音的大小&#xff0c;也就是音量。响度与声波的振幅有直接关系。 音调(Pitch) 音调与声音的频率有关系&#xff0c;当声音的频率越大时&#xff0c;人耳所感知到的音调就越高&a…...

AI 智享直播:开启直播新篇,引领未来互动新趋势!

在数字化浪潮席卷全球的今天&#xff0c;AI技术正以不可阻挡之势渗透进我们生活的方方面面&#xff0c;从智能家居到自动驾驶&#xff0c;从医疗健康到金融服务&#xff0c;无一不彰显着其强大的影响力和无限的潜力。而在这一波科技革新的洪流中&#xff0c;直播行业也迎来了前…...

【AIGC】国内AI工具复现GPTs效果详解

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | GPTs应用实例 文章目录 &#x1f4af;前言&#x1f4af;本文所要复现的GPTs介绍&#x1f4af;GPTs指令作为提示词在ChatGPT实现类似效果&#x1f4af;国内AI工具复现GPTs效果可能出现的问题解决方法解决后的效果 &#x1…...

Charles抓https包-配置系统证书(雷电)

1、导出证书 2、下载 主页上传资源中有安装包&#xff0c;免费的 openssl 安装教程自己搜 openssl x509 -subject_hash_old -in charles.pem 3、修改证书名、后缀改成点0 雷电打开root和磁盘写入 4、导入雷电证书根目录 证书拖进去&#xff0c;基本就完成了&#xff…...

在卷积神经网络中真正占用内存的是什么

在卷积神经网络&#xff08;CNN&#xff09;中&#xff0c;占用内存的主要部分包括以下几个方面&#xff1a; 1. 模型参数&#xff08;Weights and Biases&#xff09; CNN 中的权重和偏置&#xff08;即模型的参数&#xff09;通常是占用内存的最大部分。具体来说&#xff1…...

2024 ECCV | DualDn: 通过可微ISP进行双域去噪

文章标题&#xff1a;《DualDn: Dual-domain Denoising via Differentiable ISP》 论文链接&#xff1a; DualDn 代码链接&#xff1a; https://openimaginglab.github.io/DualDn/ 本文收录于2024ECCV&#xff0c;是上海AI Lab、浙江大学、香港中文大学&#xff08;薛天帆等…...

Elasticsearch 和 Kibana 8.16:Kibana 获得上下文和 BBQ 速度并节省开支!

作者&#xff1a;来自 Elastic Platform Product Team Elastic Search AI 平台&#xff08;Elasticsearch、Kibana 和机器学习&#xff09;的 8.16 版本包含大量新功能&#xff0c;可提高性能、优化工作流程和简化数据管理。 使用更好的二进制量化 (Better Binary Quantizatio…...

Linux 抓包工具 --- tcpdump

序言 在传输层 Tcp 的学习中&#xff0c;我们了解了 三次握手和四次挥手 的概念&#xff0c;但是看了这么多篇文章&#xff0c;我们也只是停留在 纸上谈兵。  欲知事情如何&#xff0c;我们其实可以尝试去看一下具体的网络包的信息。在这篇文章中将向大家介绍&#xff0c;在 L…...

Vector Optimization – Stride

文章目录 Vector优化 – stride跳跃Vector优化 – stride跳跃 This distance between memory locations that separates the elements to be gathered into a single register is called the stride. A stride of one unit is called a unit-stride. This is equivalent to se…...

git config是做什么的?

git config是做什么的&#xff1f; git config作用配置级别三种配置级别的介绍及使用&#xff0c;配置文件说明 使用说明git confi查看参数 默认/不使用这个参数 情况下 Git 使用哪个配置等级&#xff1f; 一些常见的行为查看配置信息设置配置信息删除配置信息 一些常用的配置信…...

计算机网络(7) 数据链路层

数据链路层的内容不学不知道&#xff0c;一学真的是吓一跳哦&#xff0c;内容真的挺多的&#xff0c;但是大家不要害怕&#xff0c;总会学完的。 还有由于数据链路层的内容太多&#xff0c;一篇肯定是讲不完的所以我决定把它分为好几个部分进行学习与讲解。大家可以关注以后文…...

2024年秋国开电大《建筑结构试验》形考任务1-4

形考作业一 1.下列选项中,( )项不属于科学研究性试验。 答案:检验结构的质量,说明工程的可靠性 2.下列各项,( )项不属于工程鉴定性试验。 答案:验证结构计算理论的假定 3.按试验目的进行分类,可将结构试验分成( )。 答案:工程鉴定性试验和科学研究性试验…...

【MySQL】explain之type类型

explain的type共有以下几种类型&#xff0c;system、const、eq_ref、ref、range、index、all。 system&#xff1a;当表中只有一条记录并且该表使用的存储引擎的统计数据是精确的&#xff0c;比如MyISAM、Memory&#xff0c;那么对该表的访问方法就是system。 const&#xff…...

Llama架构及代码详解

Llama的框架图如图&#xff1a; 源码中含有大量分布式训练相关的代码&#xff0c;读起来比较晦涩难懂&#xff0c;所以我们对llama自顶向下进行了解析及复现&#xff0c;我们对其划分成三层&#xff0c;分别是顶层、中层、和底层&#xff0c;如下&#xff1a; Llama的整体组成…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...