查看: 2626|回复: 0

Arduino Leonardo串口转发

[复制链接]
  • TA的每日心情
    郁闷
    2020-5-29 08:50
  • 签到天数: 150 天

    [LV.7]常住居民III

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

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


    kittenblock中小学创客名师推荐的图形化编程软件

    /*********************************************
      功能: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();               //转发
    }
    }




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

    本版积分规则

    热门推荐

    创客火首发无人机编队套装,开启不一样的人工智能教育
    创客火首发无人机编队套装
    2017年国务院发布《新一代人工智能发展规划》,提出要广泛开展人工智能科普活动,在中
    版版,各位走过路过的大神,帮忙看下,米家app添加不成功
    版版,各位走过路过的大神
    版版,各位走过路过的大神,帮忙看下,谢谢,米家app显示验证成功,可反回去看,又没有设
    新手求助!blinker同步到米家,但手机里的小爱控制不了ESP8266
    新手求助!blinker同步到
    搞了两个晚上还是没解决,请大神帮忙看看 我的手机是苹果手机,下了点灯,米家,小爱
    零知开源软件库使用-ILI9341并口显示屏
    零知开源软件库使用-ILI93
    对于ILI9341的240x320屏幕,零知开源平台已经可以支持该显示屏的常用操作了,一个示例
    求助!数据能够传输到app端但是数据组件不能显示实时数据
    求助!数据能够传输到app端
    求助!数据能够传输到app端但是数据组件不能显示实时数据 源代码 #define BLINKER_BLE
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表