单片机
返回首页

I2C、IIC通讯(填坑作,MPU6050数据读取,STM32主控,附源码)

2025-11-06 来源:bilibili

上图的VCC 接 3.3V,GND接地,SCL和SDA分别接上单片机引脚,并加上上拉电阻,AD0接地。

代码链接:https://pan.baidu.com/s/1AvuMYvgX8Xy8g81S0Ay5Yg 

提取码:sce0 

初始化单片机引脚,并置1

程序里引脚的变化顺序还有延时的位置一定不要错。

IIC起始信号;SDA置零,等待,SCL置零

写入一次数据,IIC每次写入的数据长度都是8Bit,写入顺序是从最高位写到最低位。

SCL置0,SDA存放数据的最高位,数据左移1位,等待,SCL置1,数据起效,等待。

右移7位:1000 0000会变成0000 0001。(0X80 >> 0X01) 

左移1位:1101 0000会变成1010 0000。(0XD0 >> 0XA0) 

每次写完数据都要接收一次 “应答信号” ,把SDA改为输入模式并置1,等待,SCL置1,如果这时SDA收到0就算收到应答。

以下为IIC通讯的测试程序,IIC通讯的首个数据一定是芯片地址,手册上MPU6050的默认地址是1011 00xx,第一个x由AD0引脚决定,这里我把它接到了GND,所以这个x就是0,第二个x由你的目的决定,如果你打算写入,这个x就是0,如果你打算读取,这个x就是1,所以这里写入的最终数据是0XD0。

如果通讯成功了,LED就会闪烁,如果LED不闪烁,就检查芯片地址对不对,AD0引脚和芯片地址是否相符,通讯程序是否正确,每次延时给得够不够。

指定时间内接收  “应答信号” ,若等待超时就当通讯失败,并停止通讯。

每次通讯的最后一定是停止信号;把SDA设为输出模式,SCL置0,SDA置0,等待,SCL先置1,SDA再置1,等待。

有了这些就可以进行一次完整的写入了,下面的程序只修改一个寄存的数据,

发起起始信号;写入芯片地址,接收应答,写入寄存器地址,接收,写入数据,接收应答,停止通讯,返回"NICE",每次接收应答的失败都会导致通讯停止。

读取一次数据;先设SDA为输入模式,把SCL设为0,等待,把SCL设为1,等待,数据左移1位,把SDA的状态放到数据的最低位,循环八次,最后发送应答。

如果读取的是最后一个数据或只读取一个数据,就发送 “非应答信号”;SCL置0,SDA置为输出并置1,等待,SCL置1,等待,SCL置0。

读取芯片的单个数据;发起起始信号,写入芯片地址,写入寄存器,发起起始信号,写入(芯片地址+1)表示读取,读取数据,并选择“非应答信号”,停止通讯,返回“NICE”表示成功。

有了这些就可以完成MPU6050的数据读取了,首先是MPU6050写入和读取程序的定义

MPU6050初始化和数据读取

主函数


进入单片机查看更多内容>>
相关视频
  • 【TI MSPM0 应用实战】智能小车+工业角度编码器+血氧仪+烟雾探测器!硬核参考设计详解!

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

  • 直播回放: Microchip Timberwolf™ 音频处理器在线研讨会

  • 基于灵动MM32W0系列MCU的指夹血氧仪控制及OTA升级应用方案分享

精选电路图
  • 1瓦线性调频增强器

  • 1瓦四级调频发射机

  • 500W MOS场效应管电源逆变器,12V转110V/220V

  • 红外开关

  • LM317过压保护

  • 0-30V/20A 大功率稳压电源(采用LM338)

    相关电子头条文章