近日公司的项目重心要往米思齐的Arduino图形化编程上转移了,需要我将STM32和Arduino的IIC通讯调通。之前Arduino并没怎么使用过,仅仅是将超声波的代码移植成TOF激光测距而已。网上并没见到STM32与Arduino的IIC通讯实例,唯一的线索是APM中有这部分代码,因为APM的超声波模块与飞控之间是有一个Arduino芯片进行信息交互的,而飞控与Arduino的通讯方式就是IIC。

  在直接使用之前MPU6050的IIC协议与Arduino进行通讯无反应之后,懒得去查看APM源码找其IIC驱动,所以直接上逻辑分析仪分析波形,把飞控读取Arduino的超声波数据的波形采集进行分析。

  

  上图即APM飞控作为IIC主设备读取一次Arduino数据的过程。一开始我极为迷惑的是,Arduino作为从设备代码中设置的从设备地址是0x70,为什么到这里读取的指令变成了0xE1?调试到最后恍然大悟:地址是7位的数据,最后一位是用来标志读写指令的。0x70的二进制编码是 0111 0000,实际IIC主设备的会将地址放在高位,即将其左移一位变成 1110 0000,然后最后一位置1的话就是读取0x70地址的命令,置0的话是写0x70的命令。

  根据波形来看,发送读取命令之后并不需要发送读取的地址,这一点和MPU6050是不同的,因为MPU6050紧接着需要发送读取的地址,从这里看来每个不同的设备都有不同的IIC协议的规则,需要具体查阅手册。后面的写命令比较疑惑,不知道是出于什么目的需要将0x51写入Arduino。

  上图为我使用STM32与Arduino进行IIC采集到的波形。

STM32作为主设备,Arduino作为从设备进行IIC通讯的注意要点的更多相关文章

  1. [ARM-Linux开发] 主设备号--驱动模块与设备节点联系的纽带

    一.如何对设备操作 linux中对设备进行操作是通过文件的方式进行的,包括open.read.write.对于设备文件,一般称其为设备节点,节点有一个属性是设备号(主设备号.次设备号),其中主设备号将 ...

  2. Linux:主设备号和次设备号

    http://www.linuxidc.com/Linux/2011-03/33863.htm     Linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录下,称为设备 ...

  3. linux设备管理之主设备号与次设备号

    主设备号和次设备号 一个字符设备或者块设备都有一个主设备号和次设备号.主设备号和次设备号统称为设备号.主设备号用来表示一个特定的驱动程序.次设备号用来表示使用该驱动程序的其他设备.(主设备号和控制这类 ...

  4. 【Arduino】使用C#实现Arduino与电脑进行串行通讯

    在给Arduino编程的时候,因为没有调试工具,经常要通过使用串口通讯的方式调用Serial.print和Serial.println输出Arduino运行过程中的相关信息,然后在电脑上用Arduin ...

  5. iNeuOS工业互联平台,聚合和变化率计算、设备IO和通讯状态、组态快捷键、创建文件夹、选择应用图标等,发布:v3.6版本

    目       录 1.      概述... 2 2.      平台演示... 2 3.      聚合和变化率计算... 2 4.      设备IO和通讯状态监测... 3 5.      组 ...

  6. STM32 HAL SPI读取MPU6500的设备ID异常

    1.问题背景 近前,使用STM32F4 HAL库的SPI读取MPU6500出现异常. 现象:读取ID失败,返回0,以为硬件焊接问题,各种排查,最后为了示波器测试方便,把读取ID的函数放到While(1 ...

  7. Arduino基础入门—3.连接 IIC 1602 LCD显示文字

    1. IIC转接板介绍 Arduino Uno R3开发板的外部IO口是非常有限的.在驱动LCD1602时,尽管我们的数据线使用了4线,相对于8线方式减少一半,但是在需要外接多种传感器的应用中,4线驱 ...

  8. Ardupilot设备驱动 IIC、SPI、USART

    设备代码层次结构 ​ Ardupilot设备驱动代码的层次结构采用 前端实现 和 后端实现 分割,前端库主要供机器代码层调用,后端库主要供前端调用.这里前端可以理解为应用层,后端理解为驱动层,前端调用 ...

  9. 如何快速掌握plc或工控机与其他设备的modbus通讯协议?包括格式与实际过程 RT,本人从事工控行业多年,对于PLC与触摸屏也算比较熟悉,唯独对这个通讯协议比较难理解,请教高人指导,从什么地方开始下手,或者是说如何正确理解报文格式或正确写入

    Modbus协议是OSI模型的第七层的应用层通讯协议,定义了不同类型设备间交换信息方式,以及信息的格式. Modbus的工作方式是请求/应答,每次通讯都是主站先发送指令,可以是广播,或是向特定从站的单 ...

随机推荐

  1. python学习(三)

  2. CF 3-6 2级组 D题 STRESSFUL TRAINING 紧张的比赛

    题目大概是这样的: 给出一个数列a[n] ,对于每一个数 a [i] 来说 都会在 T - - 时 -= b[i] 每个数都在任何时刻不能小于0 你可以在每次T - - 之前时给 一 个 a[i] + ...

  3. Winform关于未找到元数据文件.exe和不包含适合于入口点的静态“Main”方法

    在三层架构中ItcastCaterModel项目是被其他项目引用的,所以输出类型为类库.

  4. webpack配置接口路径

    比如在webpack.config.js中的plugins中加入 new webpack.DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify(' ...

  5. python-模块2

    from collections import namedtuple # # 类 # p = namedtuple("Point", ["x", "y ...

  6. 打开本页N秒后跳转页面

    在head标签里面 <meta http-equiv="refresh" content="4;url=" />

  7. 一个简易的allocator

    #include <vector> #include <iostream> #include <algorithm> using namespace::std; t ...

  8. GOPATH

    环境变量 GOPATH 的值可以是一个目录的路径,也可以包含多个目录路径,每个目录都代表 Go 语言的一个工作区(workspace).这些工作区用于放置 Go 语言的源码文件(source file ...

  9. 一十九条优雅Python编程技巧

    1.交换赋值 #不推荐 temp = a a = b b = a #推荐 a , b = b , a #先生成一个元组(tuple)对象,然后在unpack 2.Unpacking #不推荐 l = ...

  10. 周强 201771010141 《面向对象程序设计(java)》 第二周学习总结

    第一部分:理论知识学习部分 第三章 java的基本程序设计结构 本章主要学习数据类型.变量.运算符.类型转换.字符串.输入输出.控制流程.大数值.数组等内容. 1.基本知识 (1)标识符:由字母.下划 ...