查看: 1965|回复: 0

Arduino Leonardo串口转发

[复制链接]
  • TA的每日心情
    慵懒
    2019-10-25 21:44
  • 签到天数: 145 天

    [LV.7]常住居民III

    发表于 2018-8-12 19:54 | 显示全部楼层 |阅读模式
    本帖最后由 希岩 于 2018-8-12 20:03 编辑

        Arduino Leonardo上可以使用两个串口,一个是USB虚拟串口,一个是硬件串口1,这两个串口没什么联系。那么,如果我想把Leonardo作为一个像UNO上的16u2一样的功能怎么办?    那是可以用leonardo做数据转发的,通过USB发过来的数据,转发给串口,这样就可以把leonardo做成一个串口了。当然这是杀鸡用牛刀,但如果你身边刚好缺个串口怎么办?那就可以这么做。
       本例程写的有些简单了,用的中断太少,不知道到高速会不会有问题。此外,不知道如何获得虚拟串口的波特率,这样导致一个问题:用串口调试助手设置波特率时,硬件串口的波特率无法跟着改变。如果通过USB获得了波特率信息,那么电脑上设置波特率就会同时改变虚拟串口和串口1的波特率。下面是一个简单的实现过程,用于学习。
    图片是测试通过的结果。


    [kenrobot_code]/*********************************************
      功能:USB虚拟串口转发
      设计:凌晨七點半
      日期:2018.8.12
      备注:仅用于学习,未经作者许可不可用于商业用途。
    **********************************************/
    #define  BAUD 9600     //这里可以修改波特率
    //---------------------------------------------------
    //接收中断函数
    ISR(USART1_RX_vect)                    //适合leonardo
    {
       Serial.print((char)UDR1);   //通过USB虚拟串口打印出去
    }
    //-------------------------------------------------
    void RegisterInitUart(void)
    {
      //bitSet(UCSR1A,U2X0);
      bitSet(UCSR1B,RXCIE1);                    //允许接收完成中断//
      bitSet(UCSR1B,RXEN1);                     //开启接收功能//
      bitSet(UCSR1B,TXEN1);                     //开启发送功能//
      bitSet(UCSR1C,UCSZ11);
      bitSet(UCSR1C,UCSZ10);                    //
      UBRR1=(F_CPU/16/BAUD-1);                  //波特率小于38400
    }
    // the setup routine runs once when you press reset:
    void setup()
    {
      RegisterInitUart();
    }
    // the loop routine runs over and over again forever:
    void loop()
    {
    while (Serial.available())
    {
      while( !( UCSR1A & (1<<UDRE1)) ) ;//等待发送缓冲器为空
      UDR1=Serial.read();               //转发
    }
    }[/kenrobot_code]



    2018-08-12_174508.png
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    中文 字库 的8针 OLED 12864模块 arduino
    中文 字库 的8针 OLED 128
    屏幕电路SPI连线: 中文字库OLED Arduino UNO GND GND
    【原创】 drawbot平面关节scara机械臂写字机 画画机器人直播...
    【原创】 drawbot平面关节
    这个项目上个月就在做了,结构和代码反反复复改了多次,加上自己又太忙,一直没来得及
    有了解grb代码l的朋友么
    有了解grb代码l的朋友么
    想修改grbl固件 在里面多加几个IO口的设定 其它不变 有改过或读过GRBL代码的朋友来聊
    求助 grbl-cnc32-master  编译出错
    求助 grbl-cnc32-master
    新手,原网站下载的,用arduino编译总是出错,不知道是什么问题,有哪位朋友启发启发
    Blinker 模拟传感器+数字传感器例程(DHT11 温湿度+气体传感)
    Blinker 模拟传感器+数字
    才接触1星期,发现Blinker自带了很多例程,已经成功试验了DHT的例程序,并完善了体
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表