极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9554|回复: 2

I2C通讯中的小发现

[复制链接]
发表于 2013-7-14 09:13:44 | 显示全部楼层 |阅读模式
新手,算是做个笔记吧。共享之。
题外话提一下,所有的函数区分大小写。各位看例程的时候一定注意。

下面的内容手打就不区分大小写了。
一般I2C通讯有几个函数,
初始化,
wire.begin()
onreceive()
onrequest()
begintransmission()
write()
endtransmission()
等几个函数。

我要说的是endtransmission

因为当主机通知发送消息的时候,从机会触发onreceive函数。
如果onreceive函数处理内容多的时候。而主机在write()结束之后,紧接着就endtransmission了的话。
从机的onreceive函数会立即停止。跳转到不知道什么地方执行了。反正不执行loop了,也不继续执行onreceive的函数了。
在I2c通讯的时候,最好在write()之后,delay()一下。
或者用其他更高级的办法,比如中断来处理。
回复

使用道具 举报

发表于 2013-7-14 12:52:33 | 显示全部楼层
据我的经验...
endtransmission 之後 信息才会发出。
所以,是不是检查一下 onreceive 是不是已经做到最精简化了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-14 19:06:59 | 显示全部楼层
。。。
我从机反正接收信息后onreceive的函数总是不能正常工作,
无奈,在onreceive中加调试信息serial.println,发现一个字符串不能打完就死了。也没有执行loop()中的语句。不知道程序跳到那里了。
然后在write()之后加了delay(1000)就好了。
不知道何解。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-7 19:10 , Processed in 0.034454 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表