STM32作为主设备,Arduino作为从设备进行IIC通讯的注意要点
近日公司的项目重心要往米思齐的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通讯的注意要点的更多相关文章
- [ARM-Linux开发] 主设备号--驱动模块与设备节点联系的纽带
一.如何对设备操作 linux中对设备进行操作是通过文件的方式进行的,包括open.read.write.对于设备文件,一般称其为设备节点,节点有一个属性是设备号(主设备号.次设备号),其中主设备号将 ...
- Linux:主设备号和次设备号
http://www.linuxidc.com/Linux/2011-03/33863.htm Linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录下,称为设备 ...
- linux设备管理之主设备号与次设备号
主设备号和次设备号 一个字符设备或者块设备都有一个主设备号和次设备号.主设备号和次设备号统称为设备号.主设备号用来表示一个特定的驱动程序.次设备号用来表示使用该驱动程序的其他设备.(主设备号和控制这类 ...
- 【Arduino】使用C#实现Arduino与电脑进行串行通讯
在给Arduino编程的时候,因为没有调试工具,经常要通过使用串口通讯的方式调用Serial.print和Serial.println输出Arduino运行过程中的相关信息,然后在电脑上用Arduin ...
- iNeuOS工业互联平台,聚合和变化率计算、设备IO和通讯状态、组态快捷键、创建文件夹、选择应用图标等,发布:v3.6版本
目 录 1. 概述... 2 2. 平台演示... 2 3. 聚合和变化率计算... 2 4. 设备IO和通讯状态监测... 3 5. 组 ...
- STM32 HAL SPI读取MPU6500的设备ID异常
1.问题背景 近前,使用STM32F4 HAL库的SPI读取MPU6500出现异常. 现象:读取ID失败,返回0,以为硬件焊接问题,各种排查,最后为了示波器测试方便,把读取ID的函数放到While(1 ...
- Arduino基础入门—3.连接 IIC 1602 LCD显示文字
1. IIC转接板介绍 Arduino Uno R3开发板的外部IO口是非常有限的.在驱动LCD1602时,尽管我们的数据线使用了4线,相对于8线方式减少一半,但是在需要外接多种传感器的应用中,4线驱 ...
- Ardupilot设备驱动 IIC、SPI、USART
设备代码层次结构 Ardupilot设备驱动代码的层次结构采用 前端实现 和 后端实现 分割,前端库主要供机器代码层调用,后端库主要供前端调用.这里前端可以理解为应用层,后端理解为驱动层,前端调用 ...
- 如何快速掌握plc或工控机与其他设备的modbus通讯协议?包括格式与实际过程 RT,本人从事工控行业多年,对于PLC与触摸屏也算比较熟悉,唯独对这个通讯协议比较难理解,请教高人指导,从什么地方开始下手,或者是说如何正确理解报文格式或正确写入
Modbus协议是OSI模型的第七层的应用层通讯协议,定义了不同类型设备间交换信息方式,以及信息的格式. Modbus的工作方式是请求/应答,每次通讯都是主站先发送指令,可以是广播,或是向特定从站的单 ...
随机推荐
- 漏洞复现——httpd换行解析漏洞
漏洞原理: 在解析php文件时,1.php\x0A这种格式的文件将会被认为php文件解析,进而可以绕过一些服务器的安全策略. 漏洞版本: 2.4.0~2.4.29 漏洞复现: 复现该漏洞是利用dock ...
- css实现0.5px
使用缩放来0.5来实现,注意兼容各种浏览器 .frz-list li:after { content: ''; position: absolute; bottom:; height: 1px; wi ...
- spring boot扫描mapper文件
一个简单的功能,百度查的都是XX,谷歌万岁. 因为扫描不到自动生成的mapper就无法注入到service 方案一.@Mapper 如果Mapper文件所在的包和你的配置mapper的项目的pom定义 ...
- static_assert enable_if 模板编译期检查
conceptC++ http://www.generic-programming.org/faq/?category=conceptcxx Checking Concept Without Conc ...
- Python *Mix_w2
1.循环: 执行流程: 1. 判断条件是否为真. 如果真. 执行代码块 2. 再次判断条件是否为真...... 3. 当条件为假.执行else 跳出循环. 循环结束. while 条件: 代码块(又叫 ...
- left join
left join 是以A表为基础,A表即左表,B表即右表. 左表(A)的记录会全部显示,而右表(B)只会显示符合条件表达式的记录,如果在右表(B)中没有符合条件的记录,则记录不足的地方为NULL. ...
- oracle 查看字段说明
SELECT *FROM all_col_commentsWHERE table_name = UPPER ('t_bn_background')AND OWNER = 'VTER' ...
- day 08文件与字符编码
ASCII 一个字符占一个字节 GBK 中文使用两个字节,英文使用1个字节,使用开头一个比特位标识是英文还是中文 unicode:支持任何国家的语言,全部字符都是使用两个字节 utf-8 一个英文占 ...
- 在Struts.xml中的result元素指的是:指定动作类的动作方法执行完后的结果视图.
result结果集 上一篇文章主要讲Struts2框架(4)---Action类访问servlet这篇主要讲result结果集 在Struts.xml中的result元素指的是:指定动作类的动作方法执 ...
- linux command 2
#修改文件所有权为user group chown user:group file/group 根据:的位置判断是修改所有者还是组 #修改文件读写执行属性 chmod mask file/group ...