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

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

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

举报

6个回答
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中处理数据。

评分

参与人数 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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版