注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
allankliu的个人空间 https://home.eeworld.com.cn/space-uid-685602.html [收藏] [复制] [分享] [RSS]
日志

micropython的USB通讯代码及遇到的问题

已有 3259 次阅读2016-4-22 16:47 |个人分类:micropython

USB通讯代码

先贡献代码。由于PyBoard缺省通讯口是USB VCP/CDC,所以蛮实用的,不必再转接USB串口IC。但要避免与REPL争夺USB CDC通讯。

在与micropython反复“搏斗”后,总算把USB串口打印代码做成了:
  1. # main.py -- put your code here!
    import pyb
    import select

def pass_through(usb, uart):
    usb.setinterrupt(-1)
    led = pyb.LED(1)
    i = 0
    while True:
        usb.write(hex(i))
        usb.write(chr(i))
        usb.write('\t')
        i = (i+1)%256
        led.toggle()
        pyb.delay(100)

  • pass_through(pyb.USB_VCP(), pyb.UART(1, 9600))
    复制代码



    本例基于官网的pass_through例子修改的。可以以9600bps慢速向USB_VCP循环打印HEX和对应的ASCII字符。在TeraTerm中制表符也可以定位等等,所以以后如果移植curses包就可以构建一个VT100终端。

    问题

    发现PyBoard不成熟的一面:写入用户代码后重启后,boot.py和main.py会经常性地丢失、重启



    写入main.py后,按下硬件复位按键后的现象:

    • boot.py中出现乱码;
    • 频繁性的重置main.py,即使main.py证实是可以运行的。



    最离谱的事情就是boot.py内容被修改成乱码了。因为乱码之后micropython无法运行,估计内部文件系统出问题。可以直接把官网上的boot.py贴回去。boot.py实际就一句话:import pyb。



    官方文档micropython.pdf中提到一个例子,UART/USB桥接。USB/UART可以互联互通。可以基于此例子更新到通用的代码。


    修改了代码后,发现出现了其他网友出现的NameError。推测是缺乏import pyb而导致的错误,但NameError异常未能够在终端完整打印出来。这种现象我之前也发现过,micropython有“暂停”的现象,估计和内部的垃圾回收算法有关。或者直接堆栈或者堆出错了。


    Ctrl+D可以软重启系统,正常的话可以直接运行用户代码,并可以截获部分系统抛出的用户带出错信息。但是经常性崩溃。




    本文来自论坛,点击查看完整帖子内容。

    评论 (0 个评论)

    facelist doodle 涂鸦板

    您需要登录后才可以评论 登录 | 注册

    热门文章
    头条资讯
    新增数据手册
    热搜器件
    推荐下载
    推荐关注