RyeCache.D 发表于 2011-12-5 08:25:41

arduino mega2560使用avr自带的串口通信命令

本帖最后由 RyeCache.D 于 2011-12-5 08:43 编辑

arduino使用的是函数化的命令进行串口通信,比如Serial.print()命令。而实际这个函数是由avr自身的串口通信命令封装而成的。而mega2560有四个串口通信端口,arduino自身的命令只调用一个0号端口,这个端口通过atmega8u2转换成usb可以识别的协议,然后接入pc。不过,这个做法只是保证了0号端口和pc的通信,1~3号端口被忽略了。为了实现1~3号端口的通信,我们需要系统的了解下avr的串口通信命令。

RyeCache.D 发表于 2011-12-5 08:25:57

通信的设定

RyeCache.D 发表于 2011-12-5 08:26:13

再占一个楼层

坏鸟 发表于 2011-12-5 18:31:18

1280或者2650 UART通信当然是可以使用全部端口的。
默认的0号端口(Serial.print)以外的剩下几个端口用命令(Serial1.print | Serial2.print | Serial3.print)来操作。

也正是因为这个原因所以1280和2650比其他Arduino更具有“调试优势”

其实~~~~这些在Arduino说明文档里都有

SS15 发表于 2011-12-5 22:31:05

2560/1280的四个串口在 arduino的封装库里确实可以很方便的用 Serial1-Serial3加以使用,不过看看如何直接以AVR C的方式使用有助于对Arduino结构的更进一步了解。

现在我用Serial作为调试串口,基本上除了单步跟踪没法实现外,其他的常见调试方法基本都可以实现了,哈哈哈。看官网论坛上说的,因为arduino的机器码与源码之间的对应关系是不定的,所以单步跟踪这个问题貌似无解。当然了,硬件俺不懂...说错了表打脸

我现在比较奇怪的是,arduino328/2560的硬串口和软串口(arduino rc1及以前版本)似乎存在冲突。只要一使用到软串口,硬串口(波特率 115200,其他速度没测过)就会丢数据,丢得不多,但总是丢。把软串口全部清除,一切恢复正常。




RyeCache.D 发表于 2011-12-6 08:23:41

哈 我也是才发现 不过既然做了 就把它写出来。挺有意思的。

ardyPro 发表于 2012-2-3 01:53:25

打屁股,还没写完:lol

Always_ccway 发表于 2012-9-21 13:05:00

本帖最后由 Always_ccway 于 2012-9-21 13:22 编辑

SS15 发表于 2011-12-5 22:31 static/image/common/back.gif
2560/1280的四个串口在 arduino的封装库里确实可以很方便的用 Serial1-Serial3加以使用,不过看看如何直接以 ...

请问2560哪些是软串口,哪些是硬串口{:soso_e154:}

646097010 发表于 2013-12-14 12:58:23

谢谢啦!刚好用上!
页: [1]
查看完整版本: arduino mega2560使用avr自带的串口通信命令