qiangtech 发表于 2020-1-2 16:49:51

429用USB_VCP只能发一次【已解决】

429IG芯片,用USB做成了一个VCP。现在完成回环和发送都是可以的。但是不能连续的发送。发送一次,接收一次轮换就可以。如果连续发送两次就出错了。求大神支招。

dataozi 发表于 2020-1-3 08:42:50

单次发送了多少字节呢?

qiangtech 发表于 2020-1-3 08:52:41

<64和>64都是可以的

mikecai 发表于 2020-1-3 08:55:52

1)接收中不要处理发送,特别是接收中断处理不要有发送,也不要有,等待,延时啊。
2)接收可用DMA,在buffer中处理数据。

radio2radio 发表于 2020-1-3 09:18:40

VCP的功能看似简单,其实要做到完美无瑕并不容易。
现在好多USB库里面都有现成的,比如常用的CubeMX,ARM的RTE,并不需要自己写代码,自己能做的一般也就是选择是否使用DMA,设定缓存大小,设定VID/PID什么的。

qiangtech 发表于 2020-1-3 09:22:29

radio2radio 发表于 2020-1-3 09:18
VCP的功能看似简单,其实要做到完美无瑕并不容易。
现在好多USB库里面都有现成的,比如常用的CubeMX,ARM的 ...

这个就是基于官方例程上面改的,它实现的就是环回。把接收到的再发送出去就行了,我是要把它改为类似PRINTF那样,直接输出的。结果发现,连发两次的时候就DOWN机了。

qiangtech 发表于 2020-1-3 15:20:28

终于找到问题了。
1.CubeMX生成的工程,怎么它的优化等级是LEVER 3,仿真的时候发现设置端点1的最大包的语句真接优化掉了。把它改为LEVER 0再编译,就可以连续发送了。
2.CDC_RECEIVE_FS接收函数里面不能有发送。设一个FLAG和数组,把接收的传出来处理。就像4楼说的。
现在可以完成类似PRINTF功能了,两次发送中间稍微延时一下。
页: [1]
查看完整版本: 429用USB_VCP只能发一次【已解决】