如題
項目功能:CAN轉USBCDC(雙向)
現象如下:
USB發(fā)送后CAN接收正常,但只要USB發(fā)送后CAN_Receive_Msg這個函數就失效了,讀不到CAN_FIFO0里面的數據,也就是說之后想CAN發(fā)送USB接收就沒法完成了
上面是我的代碼文件,可進行測試
我看用戶手冊上這么寫,然后我想能不能看看FIFO1里面的數據(數據肯定是沖突了),但手冊上寫用戶只能訪問FIFO0的數據
所以我也懵逼了
望解決?。?!
如題
項目功能:CAN轉USBCDC(雙向)
現象如下:
USB發(fā)送后CAN接收正常,但只要USB發(fā)送后CAN_Receive_Msg這個函數就失效了,讀不到CAN_FIFO0里面的數據,也就是說之后想CAN發(fā)送USB接收就沒法完成了
上面是我的代碼文件,可進行測試
我看用戶手冊上這么寫,然后我想能不能看看FIFO1里面的數據(數據肯定是沖突了),但手冊上寫用戶只能訪問FIFO0的數據
所以我也懵逼了
望解決?。?!
您好,CAN_Receive_Msg該函數只有在CAN接收數據時才會調用,即通過CAN設備或分析儀向203的CAN發(fā)送數據時才會調用,您通過PC向USB發(fā)送數據時,此時調用的是CAN的CAN_Send_Msg函數。下邊是通過您的程序做的收發(fā)測試。注:數據處理并未改動。
關于USBD與CAN收發(fā)緩沖區(qū)沖突問題,如果您只用CAN1那么需要注意將USBD的收發(fā)緩沖區(qū)控制在384字節(jié)之內;如果存在CAN1與CAN2共用的情況需要將USBD的收發(fā)緩沖區(qū)控制在256字節(jié)之內,否則會存在數據沖突。
您好,我表達的意思是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ū)大小的控制我也不太了解,是否還需要調整其他參數的變量大小
這是我修改后的程序,可測試我說的bug
望解決!??!
我這邊也遇到了類似的問題,使用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接收并未出現您描述的問題。您這邊也可以測試一下,如有問題可通過微信聯系我。
我用FIFO0和FIFO1都測試過了,問題是一樣的,所以不是FIFO的問題,我單獨開個帖子描述一下吧。