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

濮阳建设银行官方网站/做网络推广费用

濮阳建设银行官方网站,做网络推广费用,专业的网站建设哪家好,文学网站做编辑IIC总线 1 IIC总线概述 I2C总线两线制包括:串行数据SDA(Serial Data)、串行时钟SCL(Serial Clock)。总线必须由主机(通常为微控制器)控制,主机产生串行时钟(SCL&#x…

IIC总线

1 IIC总线概述

I2C总线两线制包括:串行数据SDA(Serial Data)、串行时钟SCL(Serial Clock)。总线必须由主机(通常为微控制器)控制,主机产生串行时钟(SCL)控制总线的传输方向,并产生起始和停止条件。

IIC总线特征:同步串行半双工(同一时刻只能是一种身份)

2 IIC总线拓扑图

img

SDA:双向串行数据线,数据是一位一位传输,既可以从主机发送到从机,也可以从从机发送到主机

SCL:时钟线(单向),驱动数据线SDA的信号由时钟线SCL提供,只能由主机发送,从机接收

主机:主机产生串行时钟(SCL)控制总线的传输方向,并产生起始条件(占用总线)和停止条件(释放总线)

从机:从机也能发送数据给主机,但是从机永远不会主动给主机发送数据。

主机是主宰

主机是如何找到从机来进行通信的呢?

2.1 主从设备通信

主机如何能找到对应的从机与其进行通信?

每个从机都有一个唯一的器件地址,主机就是通过这个器件地址去找到对应的从机与其通信。

器件地址谁分配?如何分配?(具体查看模块手册)

在IIC总线上,从机的器件地址可以为7位或者10位,一般情况下都是7位器件地址。

在器件地址中包含了固定地址(在高位,不可变)和可编程地址(在低位,可变)

器件地址的位数是由厂家决定

固定地址的位数和内容也是由厂家决定

可编程地址的位数由厂家决定

可编程地址的内容由使用者决定

img

3 IIC数据帧

img

UART数据帧格式:起始位+数据位(5~8)+校验位+停止位。

IC数据帧格式:起始条件+数据位(8位)+应答位+停止条件

起始条件:一次通信的开始(主机占用总线)

数据位:从发送器到接收器,连续的8位数据

应答位:当接收器成功接收到发送器的8位数据后,必须应答。0代表应答,1代表非应答。

停止条件:一次通信的结束(主机释放总线,双线电平拉高)

4 标准IIC协议

空闲状态

开始信号

停止信号

应答信号

数据的有效性

数据传输

4.1 空闲状态(都拉高,数据比时钟快)

空闲状态:此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。

4.2 起始条件(CD高D变低)和停止信号(C高D变高)

img

起始信号:当SCL为高期间,SDA由高到低的跳变;启动信号是一种电平跳变时序信号,而不是一个电平信号。

停止信号:当SCL为高期间,SDA由低到高的跳变;停止信号也是一种电平跳变时序信号,而不是一个电平信号。

起始条件伪代码

SCL=1SDA=1 //起始前都是高电平//延时,起始条件建立时间SDA=0//SDA变低,产生起始条件//延时,起始条件的保持时间SCL=0//一个周期的结束

停止条件伪代码

SCL=1SDA=0//低//延时,停止条件建立时间SDA=1//SDA变高 产生停止条件//延时,本次停止条件到下一个起始条件的时间间隔

4.3 位传输(C低D准备数据,C拉高读取D)

SCL串行时钟的配合下,在SDA上逐位地串行传送每一位数据。数据的准备是在SCL的低电平,数据位的传输是上边沿触发。

img

拉低准备数据,拉高采集数据

主机发送一位数据给从机:(主机输出)

SCL=0//主机拉低时钟线SDA=0/1//主机在总线上准备数据//延时,让数据稳定在数据线上SCL=1//主机拉高时钟线从机在时钟上升沿从总线上采集数据//延时,给时间从机采集数据

主机读取从机发送的一位数据:(主机输入)

SCL=0//主机拉低时钟线从机在总线上准备数据(从机自动进行,主机不动作)//延时,让数据稳定在数据线上SCL=1//主机拉高时钟线主机读取SDA//主机在时钟上升沿从总线上采集数据//延时,给时间主机机采集数据

4.4 应答位(第九位发送高(不应答)低(应答))

img

发送器每发送一个字节,就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。

应答信号为低电平时,规定为有效应答位(ACK简称应答位),表示接收器已经成功地接收了该字节;

应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功

主机读取从机的应答:(主机读取一位数据)

主机每发送1个字节给从机后,都必须通过这个应答位查看从机是否能正常收到,如果一旦读到的是非应答信号(‘1’),表明没有正常接收到当前字节数据,通信就要终止(主机发送停止信号)

SCL=0//主机拉低时钟线 (还是拉低给数据,拉高采集数据)从机根据自己接受的情况,给不给主机应答信号//延时,让数据稳定在数据线上SCL=1//主机拉高时钟线主机读取SDA//主机在时钟上升沿从总线上采集应答信号//延时,给时间主机机采集数据如果采集到的0,表示有应答,如果采集到的是1,表示非应答

主机发送一个应答给从机:(主机发送一位数据)

主机每读取完从机发送过来的一个字节数据后,都必须给从机一个应答信号。如果主机读取完当前字节后还想从机继续给它发下一个字节数据,就要给从机应答(‘0’),如果主机读取完当前字节后不想从机再给它发数据,那么主机发送非应答信号(‘1’)给从机。

SCL=0//主机拉低时钟线SDA=0/1//主机根据自己的情况,决定给不给应答从机//延时,让数据稳定在数据线上SCL=1//主机拉高时钟线从机在时钟上升沿从总线上采集应答位//延时,给时间从机采集数据

4.5 IIC延时根据

假如知道是400KHz最大值,400KHz,意味着数据是800KHz。那么一个命令或数据需要的时间是1.25um。延时的目的是,一个IIC外设命令到下一个命令之间,要有大概一个信号跳变间隔咯?

100KHZ意味着数据是200KHZ。需要延时5um

5 IIC的寻址方式

img

器件地址(8位)组成:7位从设备地址+1位方向位

从设备地址包含了固定地址和可编程地址

方向位决定有效数据位的传输方向,主机—》从机(主机写) 还是 从机----》主机(主机读)

5.1 IIC一次完整通信

\1. 主机发送起始条件(主机占用总线,唤醒总线所有的从机)

\2. 主机发送器件地址(总线上所有的从机就会拿这个器件跟自身进行比较,匹配成功的那个从机就会回复 一个应答信号给主机,并根据方向位来决定数据传输方向)

\3. 进行有效数据交流(每传输完一个直接数据都要给应答)

\4. 主机发送停止信号(释放总线,结束本次通信)

5.2 IIC三种通信方式

只读主机只读取数据

img

只写:主机仅发送数据

img

有读有写

img

6 GPIO口模拟IIC通信协议

GPIO初始化

作为SCL的GPIO口:时钟线SCL只能由主机(MCU)发出,SCL既有低电平也有高电平,所以这个GPIO口可以配置成推挽输出,另外总线结构本来就有上拉电阻,所以也可以配置成开漏输出。

作为SDA的GPIO口:数据线SDA是双向的,有时候需要从MCU发送,有时候又要输入到MCU里。刚好,在M4里面,当GPIO口配置成输出模式时,输入电路并没有被关闭。但是,当在采集输入信号的时候,IO口的输出电路就很有可能会影响到输入信号的采集,所以必须要配置成开漏输出,在读取输入信号前输出‘1’,目的是让输出电路从IO口中断开。

准备数据要延时,读取数据也要延时

起始条件

void IIC_Start(void){ IIC_SCL=1; IIC_SDA_OUT=1; Systick_Delay_us(1);//延时,起始条件建立时间 IIC_SDA_OUT=0;//产生起始条件 Systick_Delay_us(2);//延时,起始条件的保持时间 IIC_SCL=0;//一个周期的结束}

停止条件

void IIC_Stop(void){ IIC_SCL=1; IIC_SDA_OUT=0; Systick_Delay_us(1);//延时,停止条件建立时间 IIC_SDA_OUT=1;//产生停止条件 Systick_Delay_us(1);//延时,本次停止条件到下一个起始条件的时间间隔}

主机发送应答

void IIC_Send_ACK(u8 ack){ IIC_SCL=0;//主机拉低时钟线 if(ack)//主机根据自己的情况,决定给不给应答从机 { IIC_SDA_OUT=1; } else { IIC_SDA_OUT=0; } Systick_Delay_us(2);//延时,让数据稳定在数据线上 IIC_SCL=1;//主机拉高时钟线,从机在时钟上升沿从总线上采集应答位 Systick_Delay_us(1);//延时,给时间从机采集数据 }

主机读取应答

u8 IIC_Revice_Ack(void){ u8 ack=0; IIC_SCL=0;//主机拉低时钟线 IIC_SDA_OUT=1;//切换成读模式—让输出电路从IO口断开************************* //从机根据自己接受的情况,给不给主机应答信号 Systick_Delay_us(2);//延时,让数据稳定在数据线上 IIC_SCL=1;//主机拉高时钟线 if(IIC_SDA_IN)//主机在时钟上升沿从总线上采集应答信号 { ack=1; } Systick_Delay_us(1);//延时,给时间主机机采集数据 IIC_SCL=0;//完整周期 return ack; }

主机发送一个字节数据给从机

u8 IIC_Send_Byte(u8 data) { u8 i; for(i=0;i<8;i++) { IIC_SCL=0;//主机拉低时钟线 //主机在总线上准备数据 if(data&0x80) IIC_SDA_OUT=1; else IIC_SDA_OUT=0; Systick_Delay_us(2);//延时,让数据稳定在数据线上 IIC_SCL=1;//主机拉高时钟线 //从机在时钟上升沿从总线上采集数据 Systick_Delay_us(1);//延时,给时间从机采集数据 data<<=1;//让次高位成为最高位 } return IIC_Revice_Ack( );}

主机读取从机的一个字节数据

u8 IIC_Revice_Byte(u8 ack){ u8 i; u8 data=0; for(i=0;i<8;i++) { IIC_SCL=0;//主机拉低时钟线 IIC_SDA_OUT=1;//切换成读模式—让输出电路从IO口中断开*************************** //从机在总线上准备数据 Systick_Delay_us(2);//延时,让数据稳定在数据线上 IIC_SCL=1;//主机拉高时钟线 data<<=1;//空出最低位来接受数据 //主机在时钟上升沿从总线上采集数据 if(IIC_SDA_IN) { data |=1; } Systick_Delay_us(1);//延时,给时间主机机采集数据 } IIC_Send_ACK(ack); return data;}

7 IIC驱动温湿度传感器

img

7.1 SHT20命令

img

7.2 SHT20测量时序

img

7.3 示例代码

float Read_SHT20_Data(u8 cmd){ u8 ack; u16 data=0; float DATA; IIC_Start( );//起始信号 ack = IIC_Send_Byte(SHT20_ADDR&0XFE);//发送器件地址+写方向 if(ack)//没有应答 { IIC_Stop( ); return -1; } ack = IIC_Send_Byte(cmd);//发送测量命令 if(ack)//没有应答,等待从机应答 { IIC_Stop( ); return -1; } do { Delay_ms(10);//给时间测量 IIC_Start( ); //开始信号,测量中 ack = IIC_Send_Byte(SHT20_ADDR | 0x01);//发送器件地址+读方向 }while(ack);//没有应答则继续询问,知道有应答,表明测量结束 data |= IIC_Revice_Byte(0) <<8;//高位结果 data |= IIC_Revice_Byte(1) ; //低位结果 IIC_Stop( ); //------数字信号转换成模拟信号 data &=0xFFFC;//清除两位状态位 if(cmdT_MEASURE) { DATA=-46.85+175.72*data/65536.0; } else if(cmdRH_MEASURE) { DATA=-6.0+125.0*data/65536.0; } return DATA;}

/没有应答则继续询问,知道有应答,表明测量结束 data |= IIC_Revice_Byte(0) <<8;//高位结果 data |= IIC_Revice_Byte(1) ; //低位结果 IIC_Stop( ); //------数字信号转换成模拟信号 data &=0xFFFC;//清除两位状态位 if(cmdT_MEASURE) { DATA=-46.85+175.72*data/65536.0; } else if(cmdRH_MEASURE) { DATA=-6.0+125.0*data/65536.0; } return DATA;}

相关文章:

IIC总线概述和通信时序代码详细图文解析

IIC总线 1 IIC总线概述 I2C总线两线制包括&#xff1a;串行数据SDA&#xff08;Serial Data&#xff09;、串行时钟SCL&#xff08;Serial Clock&#xff09;。总线必须由主机&#xff08;通常为微控制器&#xff09;控制&#xff0c;主机产生串行时钟&#xff08;SCL&#x…...

EtherCAT 伺服控制功能块实现

EtherCAT 是运动控制领域主要的通信协议&#xff0c;开源EtherCAT 主站协议栈 IgH 和SOEM 两个项目&#xff0c;IgH 相对更普及一些&#xff0c;但是它是基于Linux 内核的方式&#xff0c;比SOEM更复杂一些。使用IgH 协议栈编写一个应用程序&#xff0c;控制EtherCAT 伺服电机驱…...

如何基于OpenCV和Sklearn算法库开展机器学习算法研究

大家在做机器学习或深度学习研究过程中&#xff0c;不可避免都会涉及到对各种算法的研究使用&#xff0c;目前比较有名的机器学习算法库主要有OpenCV和Scikit-learn&#xff08;简称Sklearn&#xff09;&#xff0c;二者都支持各种机器学习算法&#xff0c;主要有监督学习、无监…...

在 Node.js 中发出 HTTP 请求的 5 种方法

在 Node.js 中发出 HTTP 请求的 5 种方法 学习如何在 Node.js 中发出 HTTP 请求可能会让人感到不知所措&#xff0c;因为有数十个可用的库&#xff0c;每个解决方案都声称比上一个更高效。一些库提供跨平台支持&#xff0c;而另一些库则关注捆绑包大小或开发人员体验。 在这篇…...

pipeline agent分布式构建

开启 agent rootjenkins:~/learning-jenkins-cicd/07-jenkins-agents# docker-compose -f docker-compose-inbound-agent.yml up -d Jenkins配置添加 pipeline { agent { label docker-jnlp-agent }parameters {booleanParam(name:pushImage, defaultValue: true, descript…...

MySQL(17):触发器

概述 MySQL从 5.0.2 版本开始支持触发器。MySQL的触发器和存储过程一样&#xff0c;都是嵌入到MySQL服务器的一段程序。 触发器是由 事件来触发 某个操作&#xff0c;这些事件包括 INSERT 、 UPDATE 、 DELETE 事件。 所谓事件就是指用户的动作或者触发某项行为。 如果定义了触…...

挖掘PostgreSQL事务的“中间态”----更加严谨的数据一致性?

1.问题 今天在上班途中&#xff0c;中心的妹纸突然找我&#xff0c;非常温柔的找我帮忙看个数据库的报错。当然以我的性格&#xff0c;妹子找我的事情对我来说优先级肯定是最高的&#xff0c;所以立马放下手中的“小事”&#xff0c;转身向妹子走去。具体是一个什么样的问题呢…...

多种方法实现conda环境迁移

Conda 为包管理器和虚拟环境管理器。在配置完项目环境&#xff0c;进行了编写和测试代码&#xff0c;需要大量数据测试运行时&#xff0c;需要将其移至另一台主机上。Conda 提供了多种保存和移动环境的方法。 方法1&#xff1a; scp拷贝法&#xff0c;直接将envs的环境文件夹…...

C++ string类(一)

1.C语言中的字符串 C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c;但是这些库函数与字符串是分离开的&#xff0c;不太符 OOP(Object Oriented Programming)的思想&#xff0c;而且…...

系统时间和JVM的Date时间不一致问题解决

通过Java得到的时间与操作系统时间不一致&#xff0c;如何修改Java虚拟机时间&#xff1f; 造成这种问题的原因可能是&#xff1a;你的操作系统时区跟你JVM的时区不一致。 你的操作系统应该是中国的时区吧&#xff0c;而JVM的时区不一定是中国时区&#xff0c;你在应用服务器…...

23111701[含文档+PPT+源码等]计算机毕业设计javaweb点餐系统全套餐饮就餐订餐餐厅

文章目录 **项目功能简介:****点餐系统分为前台和后台****前台功能介绍&#xff1a;****后台功能介绍&#xff1a;** **论文截图&#xff1a;****实现&#xff1a;****代码片段&#xff1a;** 编程技术交流、源码分享、模板分享、网课教程 &#x1f427;裙&#xff1a;77687156…...

RabbitMQ 部署及配置详解(集群部署)

单机部署请移步&#xff1a; RabbitMQ 部署及配置详解 (单机) RabbitMQ 集群是一个或 多个节点&#xff0c;每个节点共享用户、虚拟主机、 队列、交换、绑定、运行时参数和其他分布式状态。 一、RabbitMQ 集群可以通过多种方式形成&#xff1a; 通过在配置文件中列出群集节点以…...

基于蝠鲼觅食算法优化概率神经网络PNN的分类预测 - 附代码

基于蝠鲼觅食算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于蝠鲼觅食算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于蝠鲼觅食优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…...

「分享学习」SpringCloudAlibaba高并发仿斗鱼直播平台实战完结

[分享学习]SpringCloudAlibaba高并发仿斗鱼直播平台实战完结 第一段&#xff1a;简介 Spring Cloud Alibaba是基于Spring Cloud和阿里巴巴开源技术的微效劳框架&#xff0c;普遍应用于大范围高并发的互联网应用系统。本文将引见如何运用Spring Cloud Alibaba构建一个高并发的仿…...

Vue|props配置

props是Vue中用于传递数据的属性。通过在子组件的选项中定义props属性&#xff0c;可以指定子组件可以接收的数据以及其他配置选项。父组件可以通过在子组件上使用特定的属性来传递数据。 目录 目录 App.vue 什么是App.vue 组件引用 props配置 组件复用 案例1&#xff1a…...

使用Microsoft Dynamics AX 2012 - 2. 入门:导航和常规选项

Microsoft Dynamics AX的核心原则之一是为习惯于Microsoft软件的用户提供熟悉的外观和感觉。然而&#xff0c;业务软件必须适应业务流程&#xff0c;这可能相当复杂。 用户界面和常见任务 在我们开始进行业务流程和案例研究之前&#xff0c;我们想了解一下本章中的常见功能。…...

【代码随想录】算法训练计划21、22

day 21 1、530. 二叉搜索树的最小绝对差 题目&#xff1a; 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数&#xff0c;其数值等于两值之差的绝对值。 思路&#xff1a; 利用了二叉搜索树的中序遍历特性用了双指…...

java实现钉钉机器人消息推送

项目开发中需要用到钉钉机器人发送任务状态&#xff0c;本来想单独做一个功能就好&#xff0c;但是想着公司用到钉钉机器人发送项目挺多的。所以把这个钉钉机器人抽离成一个组件发布到企业maven仓库&#xff0c;这样可以给其他同事用提高工作效率。 1.目录结构 2.用抽象类&…...

C语言之break continue详解

C语言之break continue 文章目录 C语言之break continue1. break 和 continue2. while语句中的break和continue2.1break和continue举例 3. for语句中的break和continue3.1break和continue举例 1. break 和 continue 循环中break和continue 在循环语句中&#xff0c;如果我达到…...

mysql group by 执行原理及千万级别count 查询优化

大家好&#xff0c;我是蓝胖子,前段时间mysql经常碰到慢查询报警&#xff0c;我们线上的慢sql阈值是1s&#xff0c;出现报警的表数据有 7000多万&#xff0c;经常出现报警的是一个group by的count查询&#xff0c;于是便开始着手优化这块&#xff0c;遂有此篇&#xff0c;记录下…...

Linux的几个常用基本指令

目录 1. ls 指令2.pwd命令3.cd 指令4. touch指令5.mkdir指令6.rmdir指令 && rm 指令7.man指令8.cp指令9.mv指令10.cat指令 1. ls 指令 语法&#xff1a; ls [选项][目录或文件] 功能&#xff1a;对于目录&#xff0c;该命令列出该目录下的所有子目录与文件。对于文件&…...

mac中安装Homebrew

1、Homebrew是什么&#xff1f; 软件安装管理工具 2、先检查电脑中是否已经安装了Homebrew 打开终端输入&#xff1a;brew 提示命令没有找到&#xff0c;说明电脑没有安装Homebrew 如果提示上述图片说明Homebrew已经安装成功 3、安装Homebrew 进入https://brew.sh/ 复制的命…...

Vue23的计算属性(computed)

Vue2&3的计算属性&#xff08;computed&#xff09; Vue2的计算属性 原理&#xff1a;data中的属性通过计算得到新的属性&#xff0c;称为计算属性&#xff08;computed&#xff09;。computed 具有 getter 和 setter 属性 getter 属性在使用时分别有两次调用&#xff1a…...

vue3中祖孙组件之间的通信provide和inject

一、在vue3中新增的祖孙之间通信的方式 provide和inject是Vue中的两个相关功能&#xff0c;它们一起提供了一种祖孙组件之间共享数据的方式。父组件可以使用provide来提供数据&#xff0c;而子孙组件可以使用inject来接收这些数据。 二、使用 父组件中部分代码 <script&g…...

月影下的时光机:Python中的日期、时间、农历、节气和时区探秘

前言 在现代软件开发中&#xff0c;对日期、时间和时区的准确处理至关重要。无论是全球化应用的开发&#xff0c;还是与时序数据相关的任务&#xff0c;都需要强大而灵活的工具。Python作为一门流行的编程语言&#xff0c;提供了丰富的标准库和第三方库&#xff0c;使得处理日…...

【Bazel】Bazel 学习笔记

本文简单记录下 Bazel 使用过程中的一些知识点。 目录 文章目录 目录Bazel 目录结构BUILD 构建规则常用构建规则 Bazel 命令bazel buildbazel query Mac 安装 Bazel Bazel 是谷歌推出的一个开源的构建工具&#xff0c;工作原理与 make、maven 或 gradle 等其他构建工具类似。但…...

2023年“华为杯”第二十届中国研究生数学建模成绩数据分析(末尾有吃席群)

目录 0引言1、数据大盘1.1 官方数据1.2 分赛题统计数据1.2.1 A-F 获奖数1.2.2 A-F 获奖率 2、分学校统计获奖情况&#xff08;数模之星没有统计&#xff09;3、 数模之星4、吃席群5、写在最后的话 0引言 2023年华为杯成绩于2023年9月22-26日顺利举行&#xff0c;来自国际和全国…...

Linux文件和文件夹命令详解

1.Linux文件类型详解 常见的Linux文件类型&#xff1a; 普通文件&#xff08;Regular File&#xff09;&#xff1a;&#xff08;例如文本文件、二进制文件、图片、视频和压缩文件等&#xff1b;&#xff09; 普通文件是最常见的文件类型&#xff0c;存储了实际的数据&#xf…...

MIKE水动力笔记20_由dfs2网格文件提取dfs1断面序列文件

本文目录 前言Step 1 MIKE Zero工具箱Step 2 提取dfs1 前言 在MIKE中&#xff0c;dfs2是一个一个小格格的网格面的时间序列文件&#xff0c;dfs1是一条由多个点组成的线的时间序列文件。 如下两图&#xff1a; 本博文内容主要讲如何从dfs2网格文件中提取dfs1断面序列文件。 …...

微服务nacos实战入门

注册中心 在微服务架构中&#xff0c;注册中心是最核心的基础服务之一 主要涉及到三大角色&#xff1a; 服务提供者 ---生产者 服务消费者 服务发现与注册 它们之间的关系大致如下&#xff1a; 1.各个微服务在启动时&#xff0c;将自己的网络地址等信息注册到注册中心&#x…...