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)输出。
时序图分析
起始信号与终止信号

- SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;
- SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号;
- 起始和终止信号都是由主机发出,起始信号产生后,总线就处于占用的态;
- 终止信号产生后,总线就处于空闲态。
数据传输时序

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

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

- I2C总线上传送的数据信号是广义的,既包括地址信号,又包括真正的数据信号。
- 主机在起始信号后必须传送一个从机的地址(7位),第8位是数据的传送方向位(R/W),用“0”表示主机发送数据(W),“1”表示主机接收数据(R)。
- 总线上的每个从机都将这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需要使用上拉电阻? 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发送手机短信息
目录 功能实现 范例运行环境 实现范例 类设计 类代码实现 调用范例 总结 功能实现 融合云通信服务平台,为企业提供全方位通信服务,发送手机短信是其一项核心功能,本文将讲述如何使用融合云服务API为终端手机用户发送短信信息…...
人工智能:重塑医疗、企业与生活的未来知识管理——以HelpLook为例
一、医疗行业:AI引领的医疗革新 随着人工智能(AI)技术的持续飞跃,我们正身处一场跨行业的深刻变革之中。在医疗健康的广阔舞台上,人工智能技术正扮演着日益重要的角色。它不仅能够辅助医生进行病例的精准诊断…...
MVVM(Model-View-ViewModel)模型
MVVM(ModelViewViewModel)模型是一种常用于软件开发中的架构模式,尤其在前端框架(如 Vue.js、React、Angular)中被广泛应用。它将程序的用户界面与业务逻辑分离,便于维护和扩展。 MVVM 的三个组成部分 1. …...
权限系统:权限应用服务设计
今天聊聊权限系统的应用服务设计。 从业务需求的角度来看,权限系统需要解决两个核心问题: 1、菜单渲染与动态展示 当用户成功登录并接入系统后,系统需要动态获取并展示该用户有权限访问的菜单项。 这一过程涉及前端系统与权限系统的交互。前端…...
Android音频架构
音频基础知识 声音有哪些重要属性呢? 响度(Loudness) 响度就是人类可以感知到的各种声音的大小,也就是音量。响度与声波的振幅有直接关系。 音调(Pitch) 音调与声音的频率有关系,当声音的频率越大时,人耳所感知到的音调就越高&a…...
AI 智享直播:开启直播新篇,引领未来互动新趋势!
在数字化浪潮席卷全球的今天,AI技术正以不可阻挡之势渗透进我们生活的方方面面,从智能家居到自动驾驶,从医疗健康到金融服务,无一不彰显着其强大的影响力和无限的潜力。而在这一波科技革新的洪流中,直播行业也迎来了前…...
【AIGC】国内AI工具复现GPTs效果详解
博客主页: [小ᶻZ࿆] 本文专栏: AIGC | GPTs应用实例 文章目录 💯前言💯本文所要复现的GPTs介绍💯GPTs指令作为提示词在ChatGPT实现类似效果💯国内AI工具复现GPTs效果可能出现的问题解决方法解决后的效果 …...
Charles抓https包-配置系统证书(雷电)
1、导出证书 2、下载 主页上传资源中有安装包,免费的 openssl 安装教程自己搜 openssl x509 -subject_hash_old -in charles.pem 3、修改证书名、后缀改成点0 雷电打开root和磁盘写入 4、导入雷电证书根目录 证书拖进去,基本就完成了ÿ…...
在卷积神经网络中真正占用内存的是什么
在卷积神经网络(CNN)中,占用内存的主要部分包括以下几个方面: 1. 模型参数(Weights and Biases) CNN 中的权重和偏置(即模型的参数)通常是占用内存的最大部分。具体来说࿱…...
2024 ECCV | DualDn: 通过可微ISP进行双域去噪
文章标题:《DualDn: Dual-domain Denoising via Differentiable ISP》 论文链接: DualDn 代码链接: https://openimaginglab.github.io/DualDn/ 本文收录于2024ECCV,是上海AI Lab、浙江大学、香港中文大学(薛天帆等…...
Elasticsearch 和 Kibana 8.16:Kibana 获得上下文和 BBQ 速度并节省开支!
作者:来自 Elastic Platform Product Team Elastic Search AI 平台(Elasticsearch、Kibana 和机器学习)的 8.16 版本包含大量新功能,可提高性能、优化工作流程和简化数据管理。 使用更好的二进制量化 (Better Binary Quantizatio…...
Linux 抓包工具 --- tcpdump
序言 在传输层 Tcp 的学习中,我们了解了 三次握手和四次挥手 的概念,但是看了这么多篇文章,我们也只是停留在 纸上谈兵。 欲知事情如何,我们其实可以尝试去看一下具体的网络包的信息。在这篇文章中将向大家介绍,在 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是做什么的? git config作用配置级别三种配置级别的介绍及使用,配置文件说明 使用说明git confi查看参数 默认/不使用这个参数 情况下 Git 使用哪个配置等级? 一些常见的行为查看配置信息设置配置信息删除配置信息 一些常用的配置信…...
计算机网络(7) 数据链路层
数据链路层的内容不学不知道,一学真的是吓一跳哦,内容真的挺多的,但是大家不要害怕,总会学完的。 还有由于数据链路层的内容太多,一篇肯定是讲不完的所以我决定把它分为好几个部分进行学习与讲解。大家可以关注以后文…...
2024年秋国开电大《建筑结构试验》形考任务1-4
形考作业一 1.下列选项中,( )项不属于科学研究性试验。 答案:检验结构的质量,说明工程的可靠性 2.下列各项,( )项不属于工程鉴定性试验。 答案:验证结构计算理论的假定 3.按试验目的进行分类,可将结构试验分成( )。 答案:工程鉴定性试验和科学研究性试验…...
【MySQL】explain之type类型
explain的type共有以下几种类型,system、const、eq_ref、ref、range、index、all。 system:当表中只有一条记录并且该表使用的存储引擎的统计数据是精确的,比如MyISAM、Memory,那么对该表的访问方法就是system。 constÿ…...
Llama架构及代码详解
Llama的框架图如图: 源码中含有大量分布式训练相关的代码,读起来比较晦涩难懂,所以我们对llama自顶向下进行了解析及复现,我们对其划分成三层,分别是顶层、中层、和底层,如下: Llama的整体组成…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...
Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...

