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

嵌入式开发之STM32学习笔记day16

STM32F103C8T6 I2C通信协议

1 I2C简介

        I2C(Inter-Integrated Circuit)是一种两线制的串行通信协议,广泛应用于微控制器与外围设备之间的数据传输,它支持多主多从的通信模式,允许多个设备连接在同一总线上,通过7位或10位的唯一地址进行识别,数据传输与时钟信号同步,支持标准模式(100 kbit/s)、快速模式(400 kbit/s)和高速模式(3.4 Mbit/s),并且通过起始和停止条件来标识通信的开始和结束,以及通过应答信号(ACK/NACK)来确认数据接收,因其简单、可靠且成本效益高,I2C协议成为许多嵌入式系统和微控制器系统中首选的通信协议。

        I2C(Inter IC Bus)是由Philips公司开发的一种通用数据总线;两根通信线:SCL(Serial Clock)、SDASerial Data同步,半双工带数据应答;支持总线挂载多设备(一主多从、多主多从);所有I2C设备的SCL连在一起,SDA连在一起;设备的SCL和SDA均要配置成开漏输出模式;SCL和SDA各添加一个上拉电阻,阻值一般为4.7KΩ左右。

2 I2C时序基本单元

起始条件:SCL高电平期间,SDA从高电平切换到低电平

终止条件:SCL高电平期间,SDA从低电平切换到高电平

发送一个字节:SCL低电平期间,主机将数据位依次放到SDA线上(高位先行),然后释放SCL,从机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可发送一个字节

接收一个字节:SCL低电平期间,从机将数据位依次放到SDA线上(高位先行),然后释放SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA

发送应答:主机在接收完一个字节之后,在下一个时钟发送一位数据,数据0表示应答,数据1表示非应答;

接收应答:主机在发送完一个字节之后,在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA);

 指定地址写:对于指定设备(Slave Address),在指定地址(Reg Address)下,写入指定数据(Data

        这张图片显示的是I2C(Inter-Integrated Circuit)通信协议的波形图,它是一种用于连接微控制器和外围设备的两线制串行通信协议。图中展示了SCL(串行时钟线)和SDA(串行数据线)上的信号波形。

  1. 起始条件(S):通信开始于一个起始条件,由SDA线在SCL线为高电平时从高电平跳变到低电平。

  2. 发送字节(Send Byte)

    • 第一个发送的字节是0xD0,这通常包含从设备的地址和读/写(R/W)位。图中显示了7位地址后跟一个位R/W位,其中R/W位为0表示写操作。

    • 第二个发送的字节是0x19,这是寄存器地址,用于指定从设备中读取或写入数据的寄存器位置。

    • 第三个发送的字节是0xAA,这是要写入从设备的数据。

  3. 应答信号(RA:0):在每个字节发送后,从设备通过拉低SDA线来发送一个应答信号(ACK),表示已成功接收到该字节。

  4. 停止条件(P):通信结束于一个停止条件,由SDA线在SCL线为高电平时从低电平跳变到高电平。

当前地址读:对于指定设备(Slave Address),在当前地址指针指示的地址下,读取从机数据(Data

指定地址读:对于指定设备(Slave Address),在指定地址(Reg Address)下,读取从机数据(Data

http://www.xdnf.cn/news/774181.html

相关文章:

  • 初识Linux指令(笔记2)
  • Python_day43
  • 408考研逐题详解:2009年第28题
  • MCP调研
  • 揭秘 CompletedFuture 的设计精髓(基础)
  • 打卡day43
  • 第12次09:展示收货地址和新增地址
  • 基于vue3-elemenyui的动态列案例
  • 【C语言入门级教学】assert断⾔和指针的使用
  • linux学习第18天(fork函数)
  • 代码随想录算法训练营第六天| 242.有效的字母异位词 、 349. 两个数组的交集 、 202. 快乐数 、1. 两数之和
  • Cesium使用primitive添加点线面(贴地)
  • 【文献阅读】Learning Transferable Visual Models From Natural Language Supervision
  • 【网络信息安全体系结构】知识点总结
  • 每日算法-250602
  • 复变函数 $w = z^2$ 的映射图像演示
  • 电商 API 开发实战:唯品会商品详情页实时数据接口接入与调试
  • 【Python 进阶2】抽象方法和实例调用方法
  • 激光雷达的强度像和距离像误差与噪声分析(2)2025.6.2
  • ps反相调整
  • 西红柿番茄成熟度目标检测数据集介绍
  • RSCUcaller
  • C语言进阶知识:深入探索编程的奥秘
  • 免费的硬盘工具
  • c++ 赋值函数和拷贝构造函数的调用时机
  • 【Pytorch学习笔记】模型模块06——hook函数
  • ps色彩平衡调整
  • java反序列化: Transformer链技术剖析
  • DAX权威指南6:DAX 高级概念(扩展表)、DAX 计算常见优化
  • 集成测试的流程总结