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

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主机和从机数据发送和接收是这样一个过程呢?

答复:

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

答复:

http://www.lqws.cn/news/201061.html

相关文章:

  • 【C++字符串基础解析1】
  • 网络原理5 - TCP4
  • C# 中替换多层级数据的 Id 和 ParentId,保持主从或父子关系不变
  • MySQL中的内置函数
  • 统一点云数据格式:高效转换与属性保留
  • 自适应长度惩罚强化学习的高效推理
  • Conda环境备份教程
  • Spring事务和事务传播机制
  • 隐私计算时代B端页面安全设计:数据脱敏与权限体系升级路径
  • 力扣面试150题--除法求值
  • 【力扣】2434.使用机器人打印字典序最小的字符串
  • 实战二:开发网页端界面完成黑白视频转为彩色视频
  • 腾讯开源视频生成工具 HunyuanVideo-Avatar,上传一张图+一段音频,就能让图中的人物、动物甚至虚拟角色“活”过来,开口说话、唱歌、演相声!
  • 微前端 - Native Federation使用完整示例
  • 计算机是如何⼯作的
  • 【Linux shell】shell中的变量——构建脚本逻辑的基石
  • qt使用笔记二:main.cpp详解
  • PostgreSQL 的扩展pageinspect
  • 基于Python学习《Head First设计模式》第八章 模板方法模式
  • 基于Python学习《Head First设计模式》第七章 适配器和外观模式
  • moon服务器引擎-协议生成报错
  • 意识上传伦理前夜:我们是否在创造数字奴隶?
  • Scade 语言概念 - 方程(equation)
  • 1990-2023年 地级市人工智能企业数量-社科经管实证数据
  • Linux 文件系统与 I/O 编程核心原理及实践笔记
  • Python Cookbook-7.12 在 SQLite 中储存 BLOB
  • 华为云Flexus+DeepSeek征文|Dify - LLM 云服务单机部署大语言模型攻略指南
  • 又是一年高考季
  • 台式机电脑CPU天梯图2025年6月份更新:CPU选购指南及推荐
  • 《经济学原理》第9版第6章供给、需求和政府政策