CH32V203C8T6的CAN和USB共存问题

如题

项目功能:CAN转USBCDC(双向)

现象如下:

USB发送后CAN接收正常,但只要USB发送后CAN_Receive_Msg这个函数就失效了,读不到CAN_FIFO0里面的数据,也就是说之后想CAN发送USB接收就没法完成了

image.png

image.png

image.png

icon_rar.gifEXAM.zip

上面是我的代码文件,可进行测试

image.png

我看用户手册上这么写,然后我想能不能看看FIFO1里面的数据(数据肯定是冲突了),但手册上写用户只能访问FIFO0的数据

image.png

所以我也懵逼了

望解决!!!

您好,CAN_Receive_Msg该函数只有在CAN接收数据时才会调用,即通过CAN设备或分析仪向203的CAN发送数据时才会调用,您通过PC向USB发送数据时,此时调用的是CAN的CAN_Send_Msg函数。下边是通过您的程序做的收发测试。注:数据处理并未改动。

image.png

image.png关于USBD与CAN收发缓冲区冲突问题,如果您只用CAN1那么需要注意将USBD的收发缓冲区控制在384字节之内;如果存在CAN1与CAN2共用的情况需要将USBD的收发缓冲区控制在256字节之内,否则会存在数据冲突。

image.png




您好,我表达的意思是USB发送后USB就不接收了,请仔细查看下图

根据你上面发送的图片,很明显CAN发送了9帧数据,但USB这边只收到了3帧数据(我设置的USB发送的数据一帧为19位)

CAN这边发送能正常发送接收也能正常接收,但USB在发送后就接收不到CAN的数据了



对于数据冲突,我修改了UART1_Tx_Buf数组的大小,元素个数设置为了64(之前是2048),应该是符合您说的384或256字节以内的

但经过测试还是存在上述问题            

至于CAN的数组就更小了只有22位(类型是uint8_t)

对于收发缓冲区大小的控制我也不太了解,是否还需要整其他参数的变量大小

image.png

icon_rar.gifEXAM.zip

这是我修改后的程序,可测试我说的bug

望解决!!!


您好,这边修改了一下您之前的程序,测试收发并没有问题,下图是测试结果。附修改后的程序

icon_rar.gifCH32V203C8_CAN_Test.zip

若还有问题可通过微信联系:19951759326

image.png

image.png



我这边也遇到了类似的问题,使用CH32V203C8T6实现USBCAN卡,之前在其它ARM芯片上完全实现运行正常的代码。

CAN使用FIFO0接收,只要FIFO0有数据就触发中断,在中断中读取FIFO0中的全部数据。CAN接收与USBD公用一个ISR,CAN接收到的数据通过USB转发到PC,现在问题是CAN接收几千帧以后就再也无法收到数据,查看CAN的寄存器完全正常,和之前正常接收时并没有差异,USBD使用的缓冲区为336字节(0x150)小于384字节。



@spadger

您好,因CAN1的FIFO0中断与USBD的LP中断共用同一个中断服务函数入口(USB_LP_CAN1_RX0_IRQHandler)因此建议使用CAN1的FIFO1中断进行数据收发,参考代码如下,实测CAN接收并未出现您描述的问题。您这边也可以测试一下,如有问题可通过微信联系我。

icon_rar.gifCH32V203C8_CAN_Interrupt.zip



我用FIFO0和FIFO1都测试过了,问题是一样的,所以不是FIFO的问题,我单独开个帖子描述一下吧。


只有登录才能回复,可以选择微信账号登录