问答

汇集网友智慧,解决技术难题

changhao513

TA的家园币:23  

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

    以前用STM32F103的USB做CDC设备,现在将代码移植到GD32C103,只是换了USBlibrary代码,如下应用层逻辑是没改的:1.在cdc_acm_init中发起首次usbd_ep_recev,随时准备从电脑接收数据2.在cdc_acm_out回调函数中,也就是单片机成功接收了来自电脑的数据(例如要转发至串口的数据)之后,立刻再次调用usbd_ep_recev准备下一次接收3.在主函数中判断是否有新数据(例如来自串口的数据)需要通过USB发送,如果有,则直接调用usbd_ep_send通过一个INEP向电脑发送以上逻辑在STM32上是可以长期稳定工作的,但是在gd32c103上会出现单片机接收数据时USB中断丢失问题,大部分时候都是RXFIFO的中断都收到了但是收不到OUTEP的TF中断,然后通信就中止了。如果把上述第三步的发送代码禁用掉,则接收一切正常。只要发送随便什么内容,貌似在某个特殊的时间窗口下,就会干扰接收中断的生成。为了排除问题,我现在已经收和发用不同的Endpoint了,一个是1,一个是2,还是一样的问题。各位大佬们有遇到过类似的问题吗?你们是如何实现其他外设和USB的转发过程中的双工操作的呢PS:认真读了gd32的firmwarelibrary中的CDC例程,竟然只是个内部回环测试。。。根本没操作串口硬件。。。所以没有从串口收到的数据如何发送给USB的问题。。GD32这个USB的IP,该不会是半双工的吧?

    USB GD32

    2022-11-05 0