STM32——关于I2C的讲解与应用

news2024/10/18 6:43:01

1、什么是I2C?

        I2C(Inter-Integrated Circuit)是一种通用的总线协议。它是由Philips(飞利浦)公司,现NXP(恩智浦)半导体开发的一种简单的双向两线制总线协议标准。是一种半双工的同步通信协议。

2、I2C协议标准  

      I2C协议使用两根总线线路,即时钟线(SCL)和数据线(SDA),用于在主设备和从设备之间传输数据。主设备负责生成时钟信号,并控制通信的起始和停止,从设备则负责响应主设备的指令和传输数据。

 对于I2C总线来说,支持总线挂载多设备(一主多从、多主多从),类似上面的就是一主多从。

        I2C协议支持多主设备和多从设备的连接,每个设备都有一个唯一的地址。主设备通过发送地址和数据来选择要与之通信的从设备,并可以进行读取和写入操作。I2C总线保持向下兼容性。

        I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。各设备连接到总线的输出端时必须是漏极开路(OD)输出或者集电极开路(OC)输出。

        在I2C的实际应用中,我们实际一般将软件模拟的I2C引脚定义为开漏输出(GPIO_Mode_Out_OD),将硬件模拟的I2C引脚定义为复用开漏输出( GPIO_Mode_AF_OD)

3、I2C的通信速率

  • 标准模式:100Kbps,采用7位寻址。
  • 快速模式:400Kbps,采用10位寻址。
  • 高速模式:3.4Mbps。

4、I2C总线的工作原理

        MCU与I2C芯片之间的通信,可以形象的比喻成两个人对话,因此必须遵循基本的规范;一是你说的话别人能够听懂,即双方要有约定的信号协议(通信协议);二是你的语速要能够被别人所接受,即双方满足时序要求。

5、I2C总线的信号要求

        I2C总线上可以挂多个设备,每个I2C设备都有固定的地址,只有当I2C两条线上传输的地址值等于某个I2C设备的地址时,该I2C设备才做出响应。数据传输后,必须要有应答信号(响应信号)。数据传输前必须有开始信号,传输结束后必须有结束信号。

  •  开始信号:I2C协议规定,SCL处于高电平时,SDA由高到低变化,这种信号是起始信号。当I2C总线上的设别检测到这个开始信号后,就知道该发送数据了。
  • 停止信号:I2C协议规定,SCL处于高电平,SDA由低到高变化,这种信号是停止信号。
  • 数据传输:I2C协议对数据的采样发生在SCL高电平期间,除了起始和停止信号,在数据传输期间,SCL为高电平时,SDA必须保持稳定,不允许改变,在SCL低电平时才可以进行变化。
  • 应答信号:处理器把数据发给从设备,如何知道从设备已经接收到数据呢?这就需要从设备回应一个信号给主机,因为当主机发送玩数据会后就不再驱动总线(SDA引脚由输出变为输入),而SDA和SCL硬件在设计时都有上拉电阻,所以这时SDA变为高电平。当一个字节的数据传输完成后,即在第九个SCL时钟周期内,此时主机需要释放SDA总线,把总线控制权交给从机,由于上拉电阻的作用,此时总线为高电平,如果从机正确的收到了主机发来的数据,会把SDA拉低,表示应答响应。当在第九个SCL时钟周期内,若SDA是高电平,则为无效应答,表示从机位接收到主机发送来的数据。

6、软件模拟I2C通信

首先我们设置软件I2C的引脚,将其定义为开漏输出
void Soft_I2C_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_InitStructure);

/*这里为什么两个引脚都设置为高电平,是由于I2C总线的要求,
在使用I2C协议时,当SCL和SDA处于高电平时,此时I2C总线为空闲状态。*/
    GPIO_SetBits(GPIOB, GPIO_Pin_10 | GPIO_Pin_11);
}
在这里我们定义SCL和SDA
void Soft_I2C_W_SCL(uint8_t BitValue)
{
	GPIO_WriteBit(GPIOB, GPIO_Pin_11, (BitAction)BitValue);
	Delay_us(10);
}

void Soft_I2C_W_SDA(uint8_t BitValue)
{
	GPIO_WriteBit(GPIOB, GPIO_Pin_12, (BitAction)BitValue);
	Delay_us(10);
}
I2C协议规定,SCL处于高电平时,SDA由高到低变化,这种信号是起始信号。
当I2C总线上的设别检测到这个开始信号后,就知道该发送数据了。
void Soft_I2C_Start(void)
{
	Soft_I2C_W_SDA(1);
	Soft_I2C_W_SCL(1);
	Soft_I2C_W_SDA(0);
	Soft_I2C_W_SCL(0);
}

当I2C准备发送一个字节时,SCL在低电平期间,主机会依次将数据位放到SDA线上(高位先行)
所以在这里我们将SCL拉到低电平,更便于我们理解。

void Soft_I2C_Stop(void)
{
	Soft_I2C_W_SDA(0);
	Soft_I2C_W_SDA(1);
	Soft_I2C_W_SCL(1);
}

当SCL低电平,变换数据,高电平,保持数据稳定
void Soft_I2C_SendByte(uint8_t Byte)
{
	uint8_t i;
	for(i = 0 ;i<8;i++)
	{
		当SCL低电平时,把Byte的最高位放在SDA线上(高位先行)
		Soft_I2C_W_SDA(Byte & (0x80 >> i));
		Soft_I2C_W_SCL(1);从机将在SCL高电平期间读取数据位
		Soft_I2C_W_SCL(0);当SCL低电平时,SDA会继续取下一位的数据
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2217594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Bilidown v1.2.4 B站在线视频下载解析工具中文单文件版

Bilidown是一款专为B站视频下载而设计的工具&#xff0c;一款简洁好用的B站视频下载工具&#xff0c;支持由UP主上传的单集&#xff0c;多集以及相关封面&#xff0c;弹幕&#xff0c;字幕&#xff0c;音乐&#xff0c;刮削等等&#xff0c;支持任意粒度批量组合&#xff0c;登…

10-Python基础编程之函数

Python基础编程之函数 概念基本使用参数单个参数多个参数不定长参数缺省参数注意事项 返回值使用描述偏函数高阶函数返回函数匿名函数闭包装饰器生成器递归函数函数的作用域 概念 写了一段代码实现了某个小功能&#xff1a;然后把这些代码集中到一块&#xff0c;起一个名字&am…

c++就业 创建新的设计模式

virtual自然生成虚函数表&#xff08;一维数组记录了虚函数地址 通过偏移可以调相对应的方法&#xff09; vp 编译的时候地址自然会赋值给相对应的对象 如何体现多态 没有虚函数重写 那么就是早绑定 就比如subject会转换成base类型 p指向base对象 有虚函数就是晚绑定 p指向subj…

深度学习神经网络的7大分类

深度学习中的神经网络可通过其结构和功能分为多种类型&#xff0c;每种都针对特定的数据特征和应用场景进行了优化。 深度学习7大神经网络如下&#xff1a; 01 前馈神经网络&#xff08;Feedforward Neural Networks, FNN&#xff09;&#xff1a; 这是最基本的神经网络形式…

AI周报(10.6-10.12)

AI应用-AI中医诊疗 AI中医诊疗通过整合中医“望、闻、问、切”的传统诊断方法&#xff0c;并结合现代AI技术&#xff0c;如自然语言处理和图像识别&#xff0c;来辅助医生进行更精准的诊断。 望诊&#xff0c;作为中医四诊之首&#xff0c;其精髓在于“司外揣内”。医者通过细致…

Git核心概念图例与最常用内容操作(reset、diff、restore、stash、reflog、cherry-pick)

文章目录 简介前置概念.git目录objects目录refs目录HEAD文件 resetreflog 与 reset --hardrevert(撤销指定提交)stashdiff工作区与暂存区差异暂存区与HEAD差异工作区与HEAD差异其他比较 restore、checkout(代码撤回)merge、rebase、cherry-pick 简介 本文将介绍Git几个核心概念…

centors7升级GLIBC2.18

错误来源&#xff1a;找不到GLIBC2.18&#xff0c;因为glibc的版本是2.17 网上大多教程方法&#xff0c;反正我是行不通&#xff1a; 方法1&#xff1a;更新源&#xff0c;然后使用yum安装更新 方法2&#xff1a;下载源码&#xff0c;configrue&#xff0c;make执行 wget h…

添加卡巴斯基杀毒软件(KES)的更新源

最近不知道怎么了&#xff0c;家里的电脑卡巴斯基&#xff08;KES&#xff09;怎么更新都更新不了&#xff0c;在网上找到了几个卡巴斯基的服务器: 添加步骤&#xff1a; 1.双击右下角的卡巴斯基图标。 2.依次按如下图示添加&#xff1a; 以下这步是最关键的&#xff0c;一定要…

原型基于颜色的图像检索与MATLAB

原型基于颜色的图像检索与MATLAB 摘要 基于内容的检索数据库(图像)已经变得越来越受欢迎。为了达到这一目的&#xff0c;需要发展算法检测/模拟工具&#xff0c;但市场上没有合适的商业工具。 本文介绍了一个模拟环境&#xff0c;能够从数据库中检索图像直方图的相似之处。该…

学习率 Learing Rate 的调整

&#x1f680; 机器学习系列前期回顾 1、初识机器学习 2、线性模型到神经网络 3、local minima 的问题如何解决 4、batch和momentum &#x1f680;在初识机器学习中&#xff0c;了解了机器学习是如何工作的并引入了线性模型&#xff0c; &#x1f680;在线性模型到神经网络这节…

远控代码的重构-远控网络编程的设计上

套路化代码 但是我们这是一个MFC工程,我们需要考虑不是所有操作都需要到main函数里面实现,有些操作可以在main函数之前完成,有些可以在main函数返回以后完成,静态全局变量满足这个需求,我们需要添加一个自己的类 编辑器细节1 添加类和添加类向导的区别,一个是添加自己的类,一…

Python之爬虫读取网页数据

目录&#xff1a; 1、简介2、代码示例3、验证4、项目示例5、网页数据提取 1、简介 选择Python作为爬虫开发的首选语言‌&#xff0c;主要是因为Python具有简洁易学的语法、丰富的库支持、跨平台特性、强大的社区支持、动态类型、可扩展性以及异步编程支持等优势。‌ ‌简洁易学…

4.7 大数据应用场景

文章目录 今天&#xff0c;我非常荣幸能与大家分享一个充满潜力和变革的主题——大数据的应用场景。在这个信息爆炸的时代&#xff0c;大数据已经成为推动各行各业发展的重要驱动力。接下来&#xff0c;我将带领大家探索大数据在不同行业中的神奇应用。 首先&#xff0c;让我们…

计算机领域快刊合集,无版面费,初审仅2天!

投稿选刊不迷路&#xff0c;就到科检易学术 本期主要给大家介绍&#xff0c;计算领域方向的期刊&#xff0c;无需版面费&#xff0c;非常适合正在毕业or晋升的学者。 期刊一 APPLIED INTELLIGENCE IF:3.4 JCR2区中科院3区 【自引率】11.8% 【年发文量】1000篇左右 初审…

python函数返回值是什么

函数返回值简介 1、简单介绍print和return的区别&#xff0c;print仅仅是打印在控制台&#xff0c;而return则是将return后面的部分作为返回值&#xff1a;作为函数的输出&#xff0c;可以用变量接走&#xff0c;继续使用该返回值做其它事。 2、函数需要先定义后调用&#xf…

详解Oracle审计(二)

题记&#xff1a; 本文将承接上篇详细介绍oracle的审计功能&#xff0c;基于11g版本&#xff0c;但对12c&#xff0c;19c也同样适用。 1. 语句审计实操演示实例 sqlplus / as sysdba show parameter audit_trail alter system set audit_traildb_extended scopespfile; star…

从0开始深度学习(11)——多层感知机

前面介绍了线性神经网络&#xff0c;但是线性模型是有可能出错的&#xff0c;因为线性模型意味着是单调假设&#xff0c;但是现实中往往很复杂。例如&#xff0c;我们想要根据体温预测死亡率。 对体温高于37摄氏度的人来说&#xff0c;温度越高风险越大。 然而&#xff0c;对体…

LeetCode 3200.三角形的最大高度:枚举

【LetMeFly】3200.三角形的最大高度&#xff1a;枚举 力扣题目链接&#xff1a;https://leetcode.cn/problems/maximum-height-of-a-triangle/ 给你两个整数 red 和 blue&#xff0c;分别表示红色球和蓝色球的数量。你需要使用这些球来组成一个三角形&#xff0c;满足第 1 行…

远距离长航时低成本泡沫垂直起降固定翼无人机技术详解

关于远距离长航时低成本泡沫垂直起降固定翼无人机技术&#xff0c;以下是一个详细的技术解析&#xff1a; 一、技术概述 远距离长航时低成本泡沫垂直起降固定翼无人机是一种结合了垂直起降技术和固定翼设计优势的无人机系统。该技术通过采用泡沫材料制造无人机机体&#xff0…

iOS IPA上传到App Store Connect的三种方案详解

引言 在iOS应用开发中&#xff0c;完成开发后的重要一步就是将IPA文件上传到App Store Connect以便进行测试或发布到App Store。无论是使用Xcode进行原生开发&#xff0c;还是通过uni-app、Flutter等跨平台工具生成的IPA文件&#xff0c;上传到App Store的流程都是类似的。苹果…