【正点原子】STM32开发板实验教程(F103)第52讲 I2C通信实验

2023-05-16

IIC通信

I2C(IIC,Inter-Integrated Circuit),两线式串行总线,由PHILIPS公司开发用于连接微控制器及外围设备。它是由数据线SDA和时钟线SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,告诉IIC总线一般可达400bps以上。

IIC是半双工通信方式

I2C协议

  1. 空闲状态
  2. 开始信号
  3. 停止信号
  4. 应答信号
  5. 数据的有效性
  6. 数据传输

1)空闲状态

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

2)起始信号与停止信号

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

3)应答信号ACK

发送器每发送一个字节,就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。应答信号为低电平时,规定为有效应答(ACK简称应答位),表示接收器已经成功地接收了该字节;应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。

对于反馈有效应答位ACK的要求是,接收器在第9个时钟脉冲之前的低电平期间将SDA拉低,并且确保在该时钟的高电平期间为稳定的低电平。如果接收器是主控器,则在它收到最后一个字节后,发送一个NACK信号,以通知被控发送器结束数据发送,并释放SDA线,以便主控接收器发送一个停止信号P。

4)数据有效性

I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
即:数据在SCL的上升沿到来之前就需要准备好。并在在下降沿到来之前必须稳定。

5)数据的传送

在I2C总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在SCL串行时钟的配合下,在SDA上逐位地串行传送每一位数据。数据位的传输是边沿触发。

//³õʼ»¯IIC
void IIC_Init(void)
{					     
	GPIO_InitTypeDef GPIO_InitStructure;
	//RCC->APB2ENR|=1<<4;//ÏÈʹÄÜÍâÉèIO PORTCʱÖÓ 
	RCC_APB2PeriphClockCmd(	RCC_APB2Periph_GPIOB, ENABLE );	
	   
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;   //ÍÆÍìÊä³ö
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
  GPIO_SetBits(GPIOB,GPIO_Pin_6|GPIO_Pin_7);


}
//²úÉúIICÆðʼÐźÅ
void IIC_Start(void)
{
	SDA_OUT();     //sdaÏßÊä³ö
	IIC_SDA=1;	  	  
	IIC_SCL=1;
	delay_us(4);
 	IIC_SDA=0;//START:when CLK is high,DATA change form high to low 
	delay_us(4);
	IIC_SCL=0;//ǯסI2C×ÜÏߣ¬×¼±¸·¢ËÍ»ò½ÓÊÕÊý¾Ý 
}	  
//²úÉúIICÍ£Ö¹ÐźÅ
void IIC_Stop(void)
{
	SDA_OUT();//sdaÏßÊä³ö
	IIC_SCL=0;
	IIC_SDA=0;//STOP:when CLK is high DATA change form low to high
 	delay_us(4);
	IIC_SCL=1; 
	IIC_SDA=1;//·¢ËÍI2C×ÜÏß½áÊøÐźÅ
	delay_us(4);							   	
}
//µÈ´ýÓ¦´ðÐźŵ½À´
//·µ»ØÖµ£º1£¬½ÓÊÕÓ¦´ðʧ°Ü
//        0£¬½ÓÊÕÓ¦´ð³É¹¦
u8 IIC_Wait_Ack(void)
{
	u8 ucErrTime=0;
	SDA_IN();      //SDAÉèÖÃΪÊäÈë  
	IIC_SDA=1;delay_us(1);	   
	IIC_SCL=1;delay_us(1);	 
	while(READ_SDA)
	{
		ucErrTime++;
		if(ucErrTime>250)
		{
			IIC_Stop();
			return 1;
		}
	}
	IIC_SCL=0;//ʱÖÓÊä³ö0 	   
	return 0;  
} 
//²úÉúACKÓ¦´ð
void IIC_Ack(void)
{
	IIC_SCL=0;
	SDA_OUT();
	IIC_SDA=0;
	delay_us(2);
	IIC_SCL=1;
	delay_us(2);
	IIC_SCL=0;
}
//²»²úÉúACKÓ¦´ð		    
void IIC_NAck(void)
{
	IIC_SCL=0;
	SDA_OUT();
	IIC_SDA=1;
	delay_us(2);
	IIC_SCL=1;
	delay_us(2);
	IIC_SCL=0;
}					 				     
//IIC·¢ËÍÒ»¸ö×Ö½Ú
//·µ»Ø´Ó»úÓÐÎÞÓ¦´ð
//1£¬ÓÐÓ¦´ð
//0£¬ÎÞÓ¦´ð			  
void IIC_Send_Byte(u8 txd)
{                        
    u8 t;   
	SDA_OUT(); 	    
    IIC_SCL=0;//À­µÍʱÖÓ¿ªÊ¼Êý¾Ý´«Êä
    for(t=0;t<8;t++)
    {              
        IIC_SDA=(txd&0x80)>>7;
        txd<<=1; 	  
		delay_us(2);   //¶ÔTEA5767ÕâÈý¸öÑÓʱ¶¼ÊDZØÐëµÄ
		IIC_SCL=1;
		delay_us(2); 
		IIC_SCL=0;	
		delay_us(2);
    }	 
} 	    
//¶Á1¸ö×Ö½Ú£¬ack=1ʱ£¬·¢ËÍACK£¬ack=0£¬·¢ËÍnACK   
u8 IIC_Read_Byte(unsigned char ack)
{
	unsigned char i,receive=0;
	SDA_IN();//SDAÉèÖÃΪÊäÈë
    for(i=0;i<8;i++ )
	{
        IIC_SCL=0; 
        delay_us(2);
		IIC_SCL=1;
        receive<<=1;
        if(READ_SDA)receive++;   
		delay_us(1); 
    }					 
    if (!ack)
        IIC_NAck();//·¢ËÍnACK
    else
        IIC_Ack(); //·¢ËÍACK   
    return receive;
}

EEPROM(24C02)

总容量是256(2K/8)个字节。
接口:IIC

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【正点原子】STM32开发板实验教程(F103)第52讲 I2C通信实验 的相关文章

随机推荐

  • Matlab中函数fopen、fread、fseek和fwrite的用法

    1 fopen 打开文件或获取关于打开文件的信息 xff0c 下面以使用最多的情况为例 xff1a fileID 61 fopen filename permission xff1a 打开文件 xff0c 成功时 xff0c 返回一个大于或
  • PCB设计-四层板变两层板

    四层板变成两层板原本思路是 xff1a 从原理图导出一份asc文件 xff0c 将原先四层板的PCB封装全部保存到一个库里面去 xff0c 然后在PADS里导入asc文件 xff0c 然后将原先的结构定位从原来的PCB板上复制过来 xff0
  • Pycharm导入Django项目

    Pycharm导入Django项目 添加项目 xff1a file gt open 找到项目所在的位置打开项目 添加django后台项目路径 file gt settings gt Languages amp Frameworks 找到Dj
  • Windows安装多个python解释器

    Windows安装多个python解释器 注 xff1a 此方法仅仅是针对安装多个需要配置环境变量的解释器 xff0c 意思是可以在cmd中可以使用并完美切换的 xff1b 针对一个环境变量的解释器无效 xff0c 只有一个环境变量的主解释
  • Go语言开发环境搭建

    一 Windows下安装 安装Go开发包 官网下载Go语言开发包 xff0c 安装方法就是next xff0c 除了安装位置选择 安装目录选定一个好记的 尽量不要放在C盘中 xff0c 除非你盘空间很大 xff0c 完全够用 此路径需要自己
  • Django Rest Framework的使用整理

    Django Rest Framework 一 Rest Framework的基本介绍 程序的客户端有很多 xff1a 硬件设备 xff0c 游戏 xff0c APP xff0c 软件 xff0c 其他的外部服务端 1 Web应用模式 在开
  • Linux部署Python项目

    项目部署 项目部署的操作通常是由运维人员来进行统一管理装配的 xff0c 但是对于一个开发人员来讲 xff0c 基础的项目部署还是要会的 这里我主要讲解python的项目是如何部署的 xff0c 至于项目哪里来的 xff0c 这就要看观众如
  • 2、机器学习简介及其分类

    简介 机器学习是指让机器从数据中自动学习规律和知识 并利用这些规律和知识进行预测或决策的技术 机器学习包括监督学习 无监督学习 强化学习 其中监督学习也被称作有监督的学习 有监督的意思就是预先知道据有什么样的目标 通过一些已经知道结果的数据
  • VScode启动Vue项目

    VScode启动Vue项目 1 使用VScode打开文件夹 2 找到运行按钮 3 判断有没有默认的配置文件存在 4 若文件夹存在就检查配置文件是否存在 xff08 1 xff09 打开launch json xff0c 把如下代码粘贴到里面
  • Gunicorn+django部署

    部署前提是服务器中要有项目中所需的其他服务 xff0c 例 xff1a mysql数据库 xff0c nginx xff0c python解释器等 xff0c 在其他环境搭好的情况下使用此方式可简单部署一个django项目 至于安装上面提到
  • Protobuf生成文件报错

    Mac下protobuf生成文件报错问题解决办法 xff0c windows下就不会这么麻烦了 xff0c 如果linux下出现类似报错信息按照下面的解决逻辑依然适用 1 由 go out引发的报错 1 报错信息 xff1a user 64
  • Git操作的基本命令

    git命令常用步骤 初始化 xff0c 把当前文件夹作为git本地仓库 git init 把本地仓库与选程仓库关联 git remote add origin http gitee com 把项目区中做了修改的文件添加到暂存区 git ad
  • grpc的使用

    需要保证电脑中安装了 xff1a protobuf安装教程如果出现报错请看博客 xff1a protobuf报错问题解决基本使用demo地址 xff1a demo安全传输 流式传输的demo地址 xff1a demo2 简介 xff1a r
  • Matlab找不到新添加在路径里的.m文件

    我是把文件放在matlab toolbox路径下了 xff0c 需要更新一下toolboxcache就可以了 使用命令的方式 xff1a rehash toolboxcache
  • C中字符串查找

    目录 1 查找单个字符 strchr strrchr 2 查找多个字符中任一字符 strpbrk 3 查找一个子串 strstr 4 逐个检查两个字符串 strspc strcspn 字符串查找分为 xff1a 在字符串中查找单个字符 xf
  • 神经网络中的epoch、batch、batch_size、iteration的理解

    神经网络中的epoch batch batch size iteration的理解 下面说说这三个区别 xff1a xff08 1 xff09 batchsize xff1a 批大小 在深度学习中 xff0c 一般采用SGD训练 xff0c
  • PyTorch源码解读(四)torchvision.models

    PyTorch框架中有一个非常重要且好用的包 xff1a torchvision xff0c 该包主要由3个子包组成 xff0c 分别是 xff1a torchvision datasets torchvision models torch
  • 3、AI的道德风险测试

    AI的道德性 AI系统的道德性如何保障是一个重要而复杂的问题 涉及到人工智能的发展 应用 监管 伦理 法律等多个方面 保障AI系统的道德性是一个很重要的问题 因为AI系统不仅会影响人类的生活和工作 也会涉及人类的价值观和伦理道德原则 针对这
  • 舵机单独供电时与单片机共地接线图

    转载 xff0c 原文链接为 xff1a https blog csdn net LUqingyaun article details 88600573 简单说 xff1a 外部电源两根线 xff0c VCC接舵机 xff0c GND接单片
  • 【正点原子】STM32开发板实验教程(F103)第52讲 I2C通信实验

    IIC通信 I2C xff08 IIC xff0c Inter Integrated Circuit xff09 xff0c 两线式串行总线 xff0c 由PHILIPS公司开发用于连接微控制器及外围设备 它是由数据线SDA和时钟线SCL构