打印

GD32C103的USBFS是否支持两个EP同时收发

[复制链接]
5861|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
changhao513|  楼主 | 2022-11-5 21:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以前用STM32F103的USB做CDC设备,现在将代码移植到GD32C103,只是换了USB library代码,如下应用层逻辑是没改的:
1. 在cdc_acm_init中发起首次usbd_ep_recev,随时准备从电脑接收数据
2. 在cdc_acm_out回调函数中,也就是单片机成功接收了来自电脑的数据(例如要转发至串口的数据)之后,立刻再次调用usbd_ep_recev准备下一次接收
3. 在主函数中判断是否有新数据(例如来自串口的数据)需要通过USB发送,如果有,则直接调用usbd_ep_send通过一个IN EP向电脑发送
以上逻辑在STM32上是可以长期稳定工作的,但是在gd32c103上会出现单片机接收数据时USB中断丢失问题,大部分时候都是RXFIFO的中断都收到了但是收不到OUT EP的TF中断,然后通信就中止了。
如果把上述第三步的发送代码禁用掉,则接收一切正常。只要发送随便什么内容,貌似在某个特殊的时间窗口下,就会干扰接收中断的生成。为了排除问题,我现在已经收和发用不同的Endpoint了,一个是1,一个是2,还是一样的问题。

各位大佬们有遇到过类似的问题吗?你们是如何实现其他外设和USB的转发过程中的双工操作的呢

PS:认真读了gd32的firmware library中的CDC例程,竟然只是个内部回环测试。。。根本没操作串口硬件。。。所以没有从串口收到的数据如何发送给USB的问题。。GD32这个USB的IP,该不会是半双工的吧?

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

3

帖子

0

粉丝