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

做名片的网站叫什么来着html网页制作代码大全

做名片的网站叫什么来着,html网页制作代码大全,徐州 网站制作,怎么用h5做网站早上好啊大伙,这一期也是stm32的基础教学,这一期说的是 —— I2C通信协议。 文章目录 一、I2C协议概述二、物理层特性硬件结构速率模式 三、协议层机制起始与停止信号数据帧结构应答机制时钟同步与仲裁 四、通信协议1. 起始信号(START Condit…

早上好啊大伙,这一期也是stm32的基础教学,这一期说的是 —— I2C通信协议。

请添加图片描述

文章目录

  • 一、I2C协议概述
  • 二、物理层特性
    • 硬件结构
    • 速率模式
  • 三、协议层机制
    • 起始与停止信号
    • 数据帧结构
    • 应答机制
    • 时钟同步与仲裁
  • 四、通信协议
    • 1. 起始信号(START Condition)
      • 关键作用:
    • 2. 地址帧传输:寻址目标从机
      • 地址帧组成
      • 1位读写控制位:
      • 传输规则
    • 应答机制(ACK/NACK)
      • ACK(应答)
      • NACK(非应答)
    • 4. 主机读写数据(Master Transmitter)
      • 主机写数据(Master Transmitter)
      • 主机读数据(Master Receiver)
    • 5. 通信终止:停止信号(STOP Condition)
      • 作用:
  • 五、示例代码
    • MyI2C.c
    • MyI2C.h
  • 感谢大伙观看,别忘了三连支持一下
  • 大家也可以关注一下我的其它专栏,同样精彩喔~
  • 下期见咯~

一、I2C协议概述

I2C(Inter-Integrated Circuit)是一种由飞利浦(现NXP半导体)于1982年设计的同步、半双工、多主从结构的串行通信协议,广泛应用于传感器、存储器、显示屏等低速设备的短距离通信。其核心优势在于仅需两根信号线(SCL时钟线和SDA数据线)即可实现多设备通信,且支持多主机和从机的灵活配置17。

二、物理层特性

硬件结构

两根总线:SCL(串行时钟线)用于同步,SDA(串行数据线)传输数据。两者均为开漏输出结构,需外接上拉电阻(通常4.7kΩ)以实现高电平16。

线与逻辑:所有设备的SDA和SCL通过线与逻辑连接,任一设备拉低总线时,总线即处于低电平9。

速率模式

标准模式:100kbps

快速模式:400kbps

高速模式:3.4Mbps(部分设备支持)

极速模式:5Mbps(较少见)27。

三、协议层机制

起始与停止信号

起始信号:SCL高电平时,SDA从高到低跳变16。

停止信号:SCL高电平时,SDA从低到高跳变69。

数据帧结构

I2C通信以消息为单位,每个消息包含以下部分:

地址帧:7位或10位从机地址 + 1位读写控制位(0为写,1为读)17。

数据帧:8位数据,高位先传,后跟1位应答(ACK/NACK)69。

应答机制

每传输完一个字节,接收方需发送ACK(拉低SDA)确认,否则发送NACK(保持高电平)终止通信69。

时钟同步与仲裁

时钟同步:从机可通过拉低SCL延长低电平时间,强制主机等待89。

总线仲裁:多主机竞争时,通过检测SDA电平冲突实现仲裁,未冲突的主机继续通信17。

四、通信协议

I2C通信的核心流程围绕起始信号、地址帧传输、数据帧传输、应答机制和停止信号展开。

1. 起始信号(START Condition)

触发条件:主机在SCL高电平时,将SDA线从高电平拉低。
在这里插入图片描述

关键作用:

标志通信开始;

通知所有从机进入监听状态;

若总线已占用(如多主机竞争),触发仲裁机制

2. 地址帧传输:寻址目标从机

地址帧组成

7位从机地址(如0x68)或10位地址(高5位固定0b11110,后跟扩展地址)。

1位读写控制位:

0:主机向从机写数据(Write Mode);

1:主机从从机读数据(Read Mode)。

传输规则

主机按高位先传(MSB First)发送地址和读写位;

每个时钟脉冲(SCL高电平)传输1位数据,共9个时钟周期(7位地址+1位读写+1位ACK)。

应答机制(ACK/NACK)

ACK(应答)

触发条件:从机收到匹配地址后,在第9个时钟周期将SDA拉低。

作用通知主机继续发送数据。
在这里插入图片描述

NACK(非应答)

触发条件:从机未响应(地址不匹配或忙),SDA保持高电平。

结果:主机终止通信或重试。
在这里插入图片描述

4. 主机读写数据(Master Transmitter)

主机写数据(Master Transmitter)

主机发送起始信号;

发送从机地址(写模式);

收到ACK后,发送8位数据;

从机每接收完1字节返回ACK;

重复步骤3-4直至数据发送完毕;

主机发送停止信号。
在这里插入图片描述

主机读数据(Master Receiver)

  1. 主机发送起始信号;

  2. 发送从机地址(读模式);

  3. 收到ACK后,从机开始发送数据;

  4. 主机每接收1字节后发送ACK(继续接收)或NACK(终止接收);

  5. 主机发送停止信号。
    在这里插入图片描述

5. 通信终止:停止信号(STOP Condition)

触发条件:SCL高电平时,SDA从低电平跳变到高电平。
在这里插入图片描述

作用:

释放总线,结束本次通信;

从机复位状态,等待下一次通信。

五、示例代码

MyI2C.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "MyI2C.h"void MyI2C_W_SCL(uint8_t BitValue)
{GPIO_WriteBit(I2C_SCL_GPIO_PORT, I2C_SCL_GPIO_PIN, (BitAction)BitValue);		//根据BitValue,设置SCL引脚的电平Delay_us(10);												//延时10us,防止时序频率超过要求
}void MyI2C_W_SDA(uint8_t BitValue)
{GPIO_WriteBit(I2C_SCL_GPIO_PORT, I2C_SDA_GPIO_PIN, (BitAction)BitValue);		//根据BitValue,设置SDA引脚的电平,BitValue要实现非0即1的特性Delay_us(10);												//延时10us,防止时序频率超过要求
}uint8_t MyI2C_R_SDA(void)
{uint8_t BitValue;BitValue = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11);		//读取SDA电平Delay_us(10);												//延时10us,防止时序频率超过要求return BitValue;											//返回SDA电平
}void MyI2C_Init(void)
{/*开启时钟*/RCC_APB2PeriphClockCmd(I2C_SCL_GPIO_CLK, ENABLE);	//开启SCL的对应时钟RCC_APB2PeriphClockCmd(I2C_SDA_GPIO_CLK, ENABLE);	//开启SCL的时钟/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Pin = I2C_SCL_GPIO_PIN;GPIO_Init(I2C_SCL_GPIO_PORT, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = I2C_SDA_GPIO_PIN;GPIO_Init(I2C_SDA_GPIO_PORT, &GPIO_InitStructure);					//将SCL和SDA引脚初始化为开漏输出/*设置默认电平*/GPIO_SetBits(I2C_SCL_GPIO_PORT, I2C_SCL_GPIO_PIN);GPIO_SetBits(I2C_SDA_GPIO_PORT, I2C_SDA_GPIO_PIN);
}void MyI2C_Start(void)
{MyI2C_W_SDA(1);							//释放SDA,确保SDA为高电平MyI2C_W_SCL(1);							//释放SCL,确保SCL为高电平MyI2C_W_SDA(0);							//在SCL高电平期间,拉低SDA,产生起始信号MyI2C_W_SCL(0);							//起始后把SCL也拉低,即为了占用总线,也为了方便总线时序的拼接
}void MyI2C_Stop(void)
{MyI2C_W_SDA(0);							//拉低SDA,确保SDA为低电平MyI2C_W_SCL(1);							//释放SCL,使SCL呈现高电平MyI2C_W_SDA(1);							//在SCL高电平期间,释放SDA,产生终止信号
}void MyI2C_SendByte(uint8_t Byte)
{uint8_t i;for (i = 0; i < 8; i ++)				//循环8次,主机依次发送数据的每一位{MyI2C_W_SDA(Byte & (0x80 >> i));	//使用掩码的方式取出Byte的指定一位数据并写入到SDA线MyI2C_W_SCL(1);						//释放SCL,从机在SCL高电平期间读取SDAMyI2C_W_SCL(0);						//拉低SCL,主机开始发送下一位数据}
}uint8_t MyI2C_ReceiveByte(void)
{uint8_t i, Byte = 0x00;					//定义接收的数据,并赋初值0x00,此处必须赋初值0x00,后面会用到MyI2C_W_SDA(1);							//接收前,主机先确保释放SDA,避免干扰从机的数据发送for (i = 0; i < 8; i ++)				//循环8次,主机依次接收数据的每一位{MyI2C_W_SCL(1);						//释放SCL,主机机在SCL高电平期间读取SDAif (MyI2C_R_SDA() == 1){Byte |= (0x80 >> i);}	//读取SDA数据,并存储到Byte变量//当SDA为1时,置变量指定位为1,当SDA为0时,不做处理,指定位为默认的初值0MyI2C_W_SCL(0);						//拉低SCL,从机在SCL低电平期间写入SDA}return Byte;							//返回接收到的一个字节数据
}void MyI2C_SendAck(uint8_t AckBit)
{MyI2C_W_SDA(AckBit);					//主机把应答位数据放到SDA线MyI2C_W_SCL(1);							//释放SCL,从机在SCL高电平期间,读取应答位MyI2C_W_SCL(0);							//拉低SCL,开始下一个时序模块
}uint8_t MyI2C_ReceiveAck(void)
{uint8_t AckBit;							//定义应答位变量MyI2C_W_SDA(1);							//接收前,主机先确保释放SDA,避免干扰从机的数据发送MyI2C_W_SCL(1);							//释放SCL,主机机在SCL高电平期间读取SDAAckBit = MyI2C_R_SDA();					//将应答位存储到变量里MyI2C_W_SCL(0);							//拉低SCL,开始下一个时序模块return AckBit;							//返回定义应答位变量
}

MyI2C.h

#ifndef __MYI2C_H
#define __MYI2C_H#define  I2C_SCL_GPIO_CLK           (RCC_APB2Periph_GPIOB)
#define  I2C_SDA_GPIO_CLK           (RCC_APB2Periph_GPIOB)
#define  I2C_GPIO_APBxClkCmd        RCC_APB2PeriphClockCmd#define  I2C_SCL_GPIO_PORT         GPIOB   
#define  I2C_SCL_GPIO_PIN          GPIO_Pin_10
#define  I2C_SDA_GPIO_PORT         GPIOB
#define  I2C_SDA_GPIO_PIN          GPIO_Pin_11void MyI2C_Init(void);
void MyI2C_Start(void);
void MyI2C_Stop(void);
void MyI2C_SendByte(uint8_t Byte);
uint8_t MyI2C_ReceiveByte(void);
void MyI2C_SendAck(uint8_t AckBit);
uint8_t MyI2C_ReceiveAck(void);#endif

感谢大伙观看,别忘了三连支持一下

大家也可以关注一下我的其它专栏,同样精彩喔~

下期见咯~

请添加图片描述

http://www.dtcms.com/wzjs/122665.html

相关文章:

  • 网站建设在国外爱站网长尾关键词搜索
  • 挂机宝可以做网站吗seo教程自学入门教材
  • 网站建设栏目怎么介绍工具站seo
  • 邳州做网站pzwode百度官网下载安装
  • 做网站 报价 需要了解免费p站推广网站入口
  • 手机网站备案密码找回的方法东莞seo建站公司哪家好
  • 网站建设商业计划书百度搜索数据统计
  • 湖南做网站 联系磐石网络网络销售工作靠谱吗
  • 大浪网站建设电脑优化软件哪个好用
  • 旅游网站建设凡科建站客服电话
  • 梅山建设局网站进入百度app查看
  • 公司建网站多指数函数图像及性质
  • 做网站首页ps分辨率多少关键词优化价格表
  • 黄冈网站制作站长统计入口
  • 济南做网站的公司百度推广怎么赚钱
  • 怎么做跑腿网站营销型网站案例
  • 专做特产的网站重庆网站外包
  • 株洲建设网站的公司口碑好的设计培训机构
  • 制作网站专业公司吗app拉新推广平台渠道商
  • php 手机网站广告联盟官网入口
  • 机械行业做网站百度建立自己的网站
  • 网页传奇游戏黑屏怎么解决李飞seo
  • html5手机网站分辩率做一个网站的步骤
  • 山西宏图建设集团有限公司网站百度指数使用指南
  • wordpress 本地运行深圳市企业网站seo营销工具
  • 做购物平台网站需要多少资金剪辑培训班一般学费多少
  • 关于建设商城网站费用cdq百度指数
  • 如何做学校的网站设计广州网站建设技术外包
  • 广州网站开发哪家公司好今日足球赛事分析推荐
  • 苏州姑苏区专业做网站中国国家数据统计网