请教串口模拟成USB问题

想把原有代码串口输出的部分全部替换成USB输出,有没有串口模拟成USB输出的例程的使用说明,单单看例程有点难懂

您好,USB协议复杂,不建议使用UART引脚去模拟USB。可以考虑直接使用USB打印数据,参考USB的COM例程,在sys.c中做如下修改。注意一包数据长度,算上'\n',需要小于等于63个字节,如果等于64个字节,print库会判断为需要分包而缓存,连同下一包一起从USB口输出。如果超过64字节,超过的部分会丢失。

微信截图_20230428141942.png

1682662956595.png


明白,另外请教一下有没有办法把输出字节上限调到256;还是说只能多次调用print


您好,如果按我上述代码改写,没办法一次性输出256字节,因为USB一个包最多64字节,是硬件限制。建议按63字节(63字节中包括尾部的'\n',小于63字节时,尾部也要是'\n')分包处理。实测前63字节为数据,第64字节为'\n'时,不会直接打印,WCH串口调试工具会在收到下一包的'\n'字节后一并打印多个包的数据。


你好,有没有分包发送256个字节的例程,自己试了一下,老是在发第二包数据的时候出现问题,要么不输出,要么丢失了一些数据


还有个问题就是能否连续输出,比如我要输出256个字节,我分成四包数据进行输出,直接用四个printf进行输出,中间不加任何时间间隔,实测偶尔会丢失一包数据


没有例程,要等一包USB数据上传完成后再上传下一包。参考下方帖子,添加一个标志变量用于表示上一包是否传完。

https://www.wch.cn/bbs/thread-86976-1.html


感谢解答。请教个关于OUT数据的问题,每次我通过串口调试工具往设备发数据,似乎都是触发端点1的OUT事件,想问一下是默认触发端点2吗,还是说哪里可以设置触发其他端点的OUT事件


问题有误,纠正:想问一下USB设备接收数据是默认触发端点1吗,还是说在哪里可以设置触发其他端点的OUT事件


您好,可以改成其他端点的,但是代码里改动较多,不建议修改,默认用端点1也是不影响使用的,如果有上位机指定必须使用哪个端点这样的需求才考虑修改。


明白,现在收发基本没啥问题了,目前需求是设备正常通过USB打印log,偶尔需要通过USB下发指令去改变设备的状态。只不过有时候通过电脑下发数据给设备,设备似乎没收到,只打印一个\r\n(正常会打印下发的指令内容),得连续发送2次,设备才收到,想问一下是正常现象还是说我没改好


“有时候”是在什么特定条件下触发的。在调试阶段,缓存一下端点1下传的数据包,在其他地方打印一下看看能不能打印出来。


只有登录才能回复,可以选择微信账号登录