CH32V203C8T6的CAN和USB共存問題

如題

項目功能:CAN轉USBCDC(雙向)

現象如下:

USB發(fā)送后CAN接收正常,但只要USB發(fā)送后CAN_Receive_Msg這個函數就失效了,讀不到CAN_FIFO0里面的數據,也就是說之后想CAN發(fā)送USB接收就沒法完成了

image.png

image.png

image.png

icon_rar.gifEXAM.zip

上面是我的代碼文件,可進行測試

image.png

我看用戶手冊上這么寫,然后我想能不能看看FIFO1里面的數據(數據肯定是沖突了),但手冊上寫用戶只能訪問FIFO0的數據

image.png

所以我也懵逼了

望解決?。?!

您好,CAN_Receive_Msg該函數只有在CAN接收數據時才會調用,即通過CAN設備或分析儀向203的CAN發(fā)送數據時才會調用,您通過PC向USB發(fā)送數據時,此時調用的是CAN的CAN_Send_Msg函數。下邊是通過您的程序做的收發(fā)測試。注:數據處理并未改動。

image.png

image.png關于USBD與CAN收發(fā)緩沖區(qū)沖突問題,如果您只用CAN1那么需要注意將USBD的收發(fā)緩沖區(qū)控制在384字節(jié)之內;如果存在CAN1與CAN2共用的情況需要將USBD的收發(fā)緩沖區(qū)控制在256字節(jié)之內,否則會存在數據沖突。

image.png




您好,我表達的意思是USB發(fā)送后USB就不接收了,請仔細查看下圖

根據你上面發(fā)送的圖片,很明顯CAN發(fā)送了9幀數據,但USB這邊只收到了3幀數據(我設置的USB發(fā)送的數據一幀為19位)

CAN這邊發(fā)送能正常發(fā)送接收也能正常接收,但USB在發(fā)送后就接收不到CAN的數據了



對于數據沖突,我修改了UART1_Tx_Buf數組的大小,元素個數設置為了64(之前是2048),應該是符合您說的384或256字節(jié)以內的

但經過測試還是存在上述問題? ? ? ? ? ??

至于CAN的數組就更小了只有22位(類型是uint8_t)

對于收發(fā)緩沖區(qū)大小的控制我也不太了解,是否還需要調整其他參數的變量大小

image.png

icon_rar.gifEXAM.zip

這是我修改后的程序,可測試我說的bug

望解決!??!


您好,這邊修改了一下您之前的程序,測試收發(fā)并沒有問題,下圖是測試結果。附修改后的程序

icon_rar.gifCH32V203C8_CAN_Test.zip

若還有問題可通過微信聯系:19951759326

image.png

image.png



我這邊也遇到了類似的問題,使用CH32V203C8T6實現USBCAN卡,之前在其它ARM芯片上完全實現運行正常的代碼。

CAN使用FIFO0接收,只要FIFO0有數據就觸發(fā)中斷,在中斷中讀取FIFO0中的全部數據。CAN接收與USBD公用一個ISR,CAN接收到的數據通過USB轉發(fā)到PC,現在問題是CAN接收幾千幀以后就再也無法收到數據,查看CAN的寄存器完全正常,和之前正常接收時并沒有差異,USBD使用的緩沖區(qū)為336字節(jié)(0x150)小于384字節(jié)。



@spadger

您好,因CAN1的FIFO0中斷與USBD的LP中斷共用同一個中斷服務函數入口(USB_LP_CAN1_RX0_IRQHandler)因此建議使用CAN1的FIFO1中斷進行數據收發(fā),參考代碼如下,實測CAN接收并未出現您描述的問題。您這邊也可以測試一下,如有問題可通過微信聯系我。

icon_rar.gifCH32V203C8_CAN_Interrupt.zip



我用FIFO0和FIFO1都測試過了,問題是一樣的,所以不是FIFO的問題,我單獨開個帖子描述一下吧。


只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频

字体
字号
代码语言