你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
qiangtech 提问时间:2020-1-2 16:49 /
429IG芯片,用USB做成了一个VCP。现在完成回环和发送都是可以的。但是不能连续的发送。发送一次,接收一次轮换就可以。如果连续发送两次就出错了。求大神支招。
收藏 评论6 发布时间:2020-1-2 16:49

举报

6个回答
大陶 回答时间:2020-1-3 08:42:50
单次发送了多少字节呢?
qiangtech 回答时间:2020-1-3 08:52:41
<64和>64都是可以的
慎微 回答时间:2020-1-3 08:55:52
1)接收中不要处理发送,特别是接收中断处理不要有发送,也不要有,等待,延时啊。
2)接收可用DMA,在buffer中处理数据。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

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

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

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功能了,两次发送中间稍微延时一下。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版