首页 > 其他分享 >【stm32】I2C通信协议

【stm32】I2C通信协议

时间:2024-04-05 23:30:36浏览次数:29  
标签:SCL 高电平 主机 通信协议 低电平 stm32 从机 SDA I2C

【stm32】I2C通信协议

概念及原理

  • 如果我们想要读写寄存器来控制硬件电路,就至少需要定义两个字节数据

    • 一个字节是我们要读写哪个寄存器,也就是指定寄存器的地址

    • 另一个字节就是这个地址下存储寄存器的内容

      • 写入内容就是控制电路,读出内容就是获取电路状态

I2C硬件规定(硬件电路)

一主多从
  1. cpu就是我们的单片机,作为总线的主机

    1. 任何时候都是主机掌控SCL线

    2. 在空闲状态下,主机可以主动发起对SDA的控制

    3. 只有在从机发送数据和从机应答的时候,主机才会转交SDA的控制权给从机

    4. 对于从机在任何时候,都只能被动的获取SCL时钟线,从机不允许控制SCL线

    5. 对于SDA数据线,只有在主机发送读取从机的命令后,或者从机应答的时候,从机才能短暂的获取SDA的控制权

L2C的SCL和SDA的输入输出配置问题
  1. 为了避免总线没协调好导致电源短路这个问题(从机一个输出高电平一个输出低电平),I2C的设计是,禁止所有设备输出强上拉的高电平

  2. 采用外置弱上拉电阻加开漏输出的电路结构

    1. 在这里插入图片描述

    2. 就是设备的SCL和SDA均要配置成开漏输出模式

  3. 在这里插入图片描述

    1. 要是想输出,就去拉杆子或放手,操作杆子变化就行

    2. 要是像输入,就直接放手,观察杆子高低就行

    3. 因为开漏模式下,开漏模式下,输出高电平就相当于断开引脚

      1. 所以在输入之前,可以直接输出高电平

      2. 不需要再切换成输入模式了

关于SCL和SDA时序问题

  1. 拽下SCL是因为:

    1. 一方面是占用这个总线

    2. 另一方面也是方便我们这些基本单元的拼接

      1. 就是我们之后会保证,除了起始和终止条件,每个时序单元的SCL都是以低电平开始低电平结束
  2. 主机接收一个字节数据

    1. 在接收前需要释放SDA,释放SDA就相当于切换成输入模式

    2. 或者理解成,所有设备包括主机都处于输入模式,当主机需要发送的时候,可以主动拉低SDA,而主机在被动接收的时候,就必须先释放SDA

    3. 因为总线是线与的特征,任何一个设备拉低,总线就是低电平

如果有相同的芯片挂在同一条总线

  • 这就用到地址中的可变部分了

  • 一般器件的最后几位是可以在电路中改变的

  • 比如MPU6050地址的最后一位,就可以由板子上的AD0引脚确定

    • 这个引脚接低电平,那他的地址就是1101 000

    • 这个引脚接高电平,那他的地址就是1101 001

标签:SCL,高电平,主机,通信协议,低电平,stm32,从机,SDA,I2C
From: https://blog.csdn.net/weixin_52978505/article/details/137412279

相关文章

  • STM32串行通信驱动LCD12864(使用5V电源,驱动信号用5VFT的引脚(3.3V MCU))
    #include"spi.h"voidSPI_GPIO_Init(void){//hardwaremakePSBlowtoenableserialcommunicationGPIO_InitTypeDefGPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitStruct.GPIO_Mode=GPIO_Mo......
  • STM32F103通过labview上位机上传温湿度数据到OneNET物联网平台
    资料下载地址:STM32F103通过labview上位机上传温湿度数据到OneNET物联网平台本实验通过两个STM32单片机设备分别测量室内外的温湿度,并把数据发送到上位机上传到ONENET物联网平台。大体数据传输流程如下:首先是注册OneNET平台账号,进入https://open.iot.10086.cn/ 从开发者......
  • STM32学习(六)USART串口协议
    一、通信接口1.通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统。2.通信协议:制定通信的规则,通信双方按照协议规则进行数据收发。STMF103C8T6支持以下通信协议 如果需要蓝牙无线遥控功能,陀螺仪加速度计测量姿态的功能,STM32没有,只能通过外挂芯片完成,这时就需要将......
  • STM32F1系列硬件I2C移植MPU6050DMP库
    目录前言STM32CubeMX配置过程工程移植与使用前言配置好硬件I2C拿过来直接用就行,一点也不用改这段时间在移植正点原子的MPU6050的库函数,网络上的教程大部分都是标准库同时也是软件模拟I2C的形式,这里我把正点原子的函数移植成了HAL库的硬件I2C的,下面会附带工程源码STM3......
  • STM32入门篇(LED、蜂鸣器和面包板简介)
    LED·LED:发光二极管,正向通电点亮,反向通电不亮·引脚长的一端为正极,短的一端为负极·以下两张图,是用STM32GPIO口驱动LED灯 R1作用:①防止LED因为电流过大而烧毁 ②调整LED的亮度           低电平驱动的电路(低点亮)      ......
  • 基于STM32蓝牙控制小车系统设计(一)
    项目介绍    “基于stm32f4的蓝牙控制小车”是一个基于意法半导体与ARM公司生产的STM32F4开发板的集电机驱动模块、电源管理模块、stm32f4主控模块、蓝牙串口通信模块、android控制端模块。电机驱动模块使用了两个L298N芯片来驱动4路电机,使能端连接4路来自......
  • 基于STM32蓝牙控制小车系统设计(三)
    主控板程序设计设计基于主控板(STM32)的程序通常包括以下几个关键步骤:项目规划和需求分析:确定项目的功能和需求,包括所需的传感器、执行器、通信接口等。制定软件开发计划,包括项目时间表、任务分配等。环境搭建:配置开发环境,包括安装集成开发环境(IDE)和相关工具链。配置主控板......
  • 基于keil搭建stm32项目
    1.下载stm32cube的固件包1.1进入st的官网ST官网传送门1.2查找固件包 1.3找到自己的硬件对应的系列的固件包 1.4选择固件包点击进入后,点击获取软件 1.5选择版本下载 2.创建项目相关的目录2.1创建项目相关的目录 2.2给Drivers添加相关的驱动文件或者目录......
  • 初探STM32f407VET6
    一、买到了板子,自己分析引脚功能我在某宝上买到一块stm32f407vet6的板子,图便宜,结果遇上了个态度差的客服。没有说明,没有资料。不能退换,只能自己想办法分析引脚在嘉里创找到了芯片原理图(LQFP-100封装),想着看走线猜引脚,结果拿着放大镜找了许久没有进展。这板子上有许多过孔,走线......
  • STM32FATFS(未完待续)
    注意,本博客适合像我一样的小白,会的不多,但是想快速做些东西,不适合会写驱动的大佬。另外,示例代码中的注释有误(从多个项目中移植过来的,未做更改),请不要被误导!!!【免费】stm32f103c8t6SD卡驱动(Fatfs)资源-CSDN文库一、copy源码,移植我在CSDN上找到了一位大佬用HAL库和fatfs实现stm32f......