STM32学习之I2C(理论篇)

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨

📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852

📢:文章若有幸对你有帮助,可点赞 👍 收藏 ⭐不迷路🙉

📢:内容若有错误,敬请留言 📝指正!原创文,转载注明出处

I2C答疑点

疑惑:这个函数已经声明了,为什么还是显示这个警告?

答复:原因是头文件里面的if def名称跟文件名没对上。

修改后,函数名显示正常,能正常跳转。

疑惑:I2C验证,如何接线,环境怎么搭建?

答复:

1、主板子的SCL引脚(时钟线)连接到从板子的SCL引脚。SCL用于同步主从设备之间的数据传输,确保数据在正确的时刻被接收和发送。

2、主板子的SDA引脚(数据线)连接到从板子的SDA引脚。SDA用于传输实际的数据,包括地址信息、控制指令和数据字节等。

将主版的数据线和子版的数据线连在一起,时钟和时钟线连在一起,然后再分别接一个上拉电阻

3、 还需要将主从板子的电源和电源引脚,地线和地线都要连在一起。

但是我看代码中选择SCL和SDA的PIN是根据I2C的类别来的,所以怀疑3609是不是支持多个I2C总线?

疑惑:I2C上拉电阻的作用?

答复:I2C协议规定总线处于空闲时为高电平状态。这样通过判断总线当前是否为空闲状态。

还有一个就是想要实现"线与"。

疑惑:什么是上拉电阻、下拉电阻?

答复:上拉电阻连接到电源正极,会使连接点的电平被拉高到电源电压附件。下拉电阻反之。

作用就是使与上下拉电阻相连的引脚处于高电平或是低电平的状态。

疑惑:I2C总线,为什么要实现"线与"?

答复:I2C总线允许多个主设备和从设备连接在同一个总线上。

借助"线与"机制,就可以避免访问冲突。

比如:两个主设备几乎同时想要向从设备发送数据,当其中一个主设备率先拉低总线时,另一个主设备通过检测总线电平变化,就知道当前总线已被占用,进而调整自身的发送时机。

疑惑:上下拉电阻值一般是多大?

答复:一般在1k欧到10k欧之间。

疑问:如何解决I2C总线上多个主机访问的冲突?

答复: 通过I2C总线仲裁。

疑问:详细解释下I2C的总线仲裁?

答复:当两个主机在总线空闲的时候都产生了一个有效的起始位,这种情况就需要决定由哪个主机来完成数据传输,也就是仲裁的过程。

仲裁的原则是"低电平优先",即谁先发送低电平谁就掌握了对总线的控制权。

其次,仲裁的过程跟从机无关。

疑问:一个I2C总线上最多可以挂载多少个从机?

答复:I2C从机的地址长度位7bit,因此理论上,只要地址不同,一个主机可以挂在2的7次方个从机,即128个。但是从机数量增加会导致总线寄生电容增大,影响通讯质量。因此在实际应用中,一般最多不超过8个,总线容量控制在400pF以内。

疑惑:I2C的应用场景有哪些?

答复:一般用于跟传感器通信。温湿度、气压、运动、红外等传感器。

疑惑:为什么I2C常用于传感器之间的通信?

答复:

1、 I2C只需要两根线就可以与设备连接,而传感器通常体积较小,引脚数量有限。

2、 I2C多主多从的结构,允许一个总线上挂在多个传感器,不需要额外的片选线,简化了布线。比如一个电路版上同时连接温度传感器和光传感器,共用I2C总线就能节省资源。

3、 I2C速度方面虽然不及SPI,但是对于大部分传感器都足够了。

4、 其次,功耗低。

疑惑:I2C在项目中如何体现使用经验?

答复:比如通过I2C协议控制XX传感器。这里尤其是摄像头,虽然我们之前有项目经验,但是对于图像数据的传输,I2C支持不了。

那就只能在其他项目中加入这个接口协议了。

疑惑:I2C时序问题?

答复:

开始信号:SCL为高电平时,SDA电平由高变低。即出现下降沿为开始。

结束信号:SCL为高电平时,SDA电平由低变高。即出现上升沿为结束。

读取数据:SCL为高电平时,SDA保持稳定。数据传输为MSB,高位优先。

应答机制:每传输8位数据,接收方就要发送一个应答信号ACK,即低电平,表示成功接收。

疑惑:单片机支持多个I2C接口吗?

答复:是的,大多数STM32系列至少支持2个独立I2C接口(I2C1、I2C2),高端型号会支持3个I2C接口,每个接口都有不同的引脚分配。

疑惑:I2C的速率只有一个吗?

答复:不是。有标准模式和快速模式,前者速度可达100kbit/s,后者可达1000kbit/s

疑惑:I2C主机和从机数据发送和接收是这样一个过程呢?

答复:

疑惑:如何界定主机和从机?

答复:

相关推荐
北芝科技17 小时前
AI在教育中的五大应用场景,助力教学与学习全面智能化解决方案
人工智能·学习
草原上唱山歌18 小时前
推荐学习的C++书籍
开发语言·c++·学习
安得权18 小时前
Azure Dataverse 权限设计学习
学习·flask·azure
做cv的小昊19 小时前
【TJU】信息检索与分析课程笔记和练习(6)英文数据库检索—web of science
大数据·数据库·笔记·学习·全文检索
Darkershadow19 小时前
蓝牙学习之uuid与mac
python·学习·ble
毛小茛19 小时前
芋道管理系统学习——项目结构
java·学习
北岛寒沫19 小时前
北京大学国家发展研究院 经济学原理课程笔记(第二十五课 开放宏观基本概念)
经验分享·笔记·学习
科技林总20 小时前
【系统分析师】2.3 预测与决策
学习
q行21 小时前
java学习日志--IO流(使用)
java·学习·io流
头疼的程序员21 小时前
计算机网络:自顶向下方法(第七版)第二章 学习分享(一)
学习·计算机网络