ARDUINO MEGA2560的串口Serial不能外挂其它串口设备通讯 

2018-05-12 09:40 发布

7751 0 0

发现问题

经常用ARDUINO UNO的人,突然用ARDUINO MEAG2560会发现下载程序用的那个串口(代码定义为Serial),只能用于和电脑通讯数据用,不能外挂串口通讯的模块,当外挂上串口设备后,ARDUINO不能和串口设备交互,只能和PC交互。而ARDUINO UNO在这方面显然做的比ME2560要兼容性好很多。

分析问题

  • ARDUINO UNO官方版只有一个硬件串口Serial,不会影响和串口模块的通讯。
    【如果影响那还了得,没有可用的硬件Serial了,只能虚拟用了。另外UNO接串口设备其实也比较麻烦,因为下载要用到这个串口,所以如果接了串口设备就可能会影响下载,一般是下载后再接线】
  • ARDUINO MEGA2560官方版的Serial,经测试不能外挂串口模块,比如GSM/GPS/蓝牙等常用模块通讯。
    【如果不能用索性就不用了,因为MEGA2560板子有4个硬件串口,Serial只是其中一个,可以让他只用于下载程序和给PC交互数据用。而Serial1,Serial2,Serial3都可以去接外部的硬件设备,代码只要定位对应的Serial就行了。】

  • 具体为什么UNO可以MEGA2560不能用Serial去接串口模块大家可以自己研究下两个电路,研究了也没什么意义,毕竟ARDUINO的版权在ARDUINO人手中,我们只是知道问题就行了。不能替官方去设计电路。

解决问题

  • 一般我写的例程喜欢#define一个串口的名字,这样为了修改Serial方便。
    比如我们来看下MC20的例程【其它的模块类同】中代码最上面的定义,使用UNO时候是这样定义的

    #define GprsSerail  Serial
    SoftwareSerial DebugSerial(10, 11); // RX, TX        

    这里我们使用的是硬件串口Serial,去接的GPRS模块,UNO上硬件对应RX和TX。
    虚拟串口UNO的10和11可以用USB-TTL模块去和电脑通讯打印调试信息。
    为什么不反过来虚拟串口接GPRS模块,而硬件串口直接和UNO通讯呢。
    因为:毕竟是虚拟的不稳定,特别是在接收大数据时候,所以一般虚拟串口能不用就不用,或者只用于发送数据。

  • 当使用MEGA2560时候可以修改这里的定义为
    #define DebugSerial Serial
    #define GprsSerail Serial3        //使用mega2560板子可以用Serial3,不用SoftSerial调试,这样更稳定

    这样定义我们就可以用下载程序的这个串口Serial去直接通过USB读取调试信息数据,
    而Serial3【对应RX3,TX3】去接自己的GPRS模块设备。
    当然你也可以定义Serial1或者Serial2,这是自己的自由。毕竟硬件串口多任性。
    上面两段代码,一般我写程序为了移植方便都定义的有,只是注释掉了,需要用MEGA2560板子时候自己使能或者按照上面的代码定义就行了,当然不同代码的定义的名字可能不太一样,根据实际的代码中定义的去修改。这里只是给的一个方法,请举一反三。


B Color Smilies
快速回复 返回顶部 返回列表