CH32V203C8T6使用SimulateCDC例程代碼的一些問題

目前項(xiàng)目需求:實(shí)現(xiàn)CAN轉(zhuǎn)串口(雙向),串口使用USB模擬

所以使用SimulateCDC為基礎(chǔ)進(jìn)行修改,目前USB發(fā)送沒有問題

問題:USB接收函數(shù)沒找到

我依據(jù)USBD_ENDPx_DataUp函數(shù),自己模仿著寫了一個(gè)USBD_ENDTx_DataUp,代碼如下

uint8_t?USBD_ENDTx_DataUp(?uint8_t?endp,?uint8_t?*pbuf?)
{
????if(?endp?==?ENDP2?)
????{
????????if?(USBD_Endp2_Busy)
????????{
????????????return?USB_ERROR;
????????}
????????USB_SIL_Read(?EP2_OUT,?pbuf?);
????????USBD_Endp2_Busy?=?1;
????????SetEPRxStatus(?ENDP2,?EP_RX_VALID??);
????}
????else
????{
????????return?USB_ERROR;
????}
????return?USB_SUCCESS;
}

測(cè)試不成功

我使用代碼中自帶的EP2_OUT_Callback函數(shù),感覺像是USB接收函數(shù),但任然沒有效果,下圖為我放在main.c的測(cè)試代碼


image.png

望解決?。。?/p>

您好,USB接收函數(shù)為EP2_OUT_Callback,通過len = GetEPRxCount( EP2_OUT & 0x7F );獲取接收數(shù)據(jù)的長(zhǎng)度,通過PMAToUserBufferCopy( &UART1_Tx_Buf[ ( Uart.Tx_LoadNum * DEF_USB_FS_PACK_LEN ) ], GetEPRxAddr( EP2_OUT & 0x7F ), len );將接收緩沖區(qū)的數(shù)據(jù)拷貝到UART1_Tx_Buf中。image.png


使用EP2_OUT_Callback 函數(shù) 進(jìn)行測(cè)試

測(cè)試結(jié)果:UART1_Tx_Buf里面沒有數(shù)據(jù),并且使用串口上位機(jī)發(fā)送給USB數(shù)據(jù)后,發(fā)送一次之后就直接卡死,發(fā)送不了了,拔下USB在插上,USB直接識(shí)別不了,系統(tǒng)彈出“無法識(shí)別的USB設(shè)備”,只能復(fù)位才能重新識(shí)別。

是因?yàn)槲沂褂梅绞讲粚?duì)嗎?下圖為我的測(cè)試代碼

image.png

while(1)里面只有這個(gè)截圖里面的代碼,其他的全部注釋掉了,這個(gè)現(xiàn)象你們應(yīng)該很好測(cè)試,感覺是UART1_Tx_Buf根本沒有接收到數(shù)據(jù),難道需要把DMA給關(guān)掉嘛


您好,首先測(cè)試EVT中的CDC例程需要將printf改為串口2否則測(cè)試收發(fā)時(shí)會(huì)出現(xiàn)卡死的情況原因是printf初始化與CDC串口初始化存在沖突,修改方式如圖:

image.png

image.png

其次接收USB的數(shù)據(jù)時(shí)EP2_OUT_Callbac();為回調(diào)函數(shù)USB在收到數(shù)據(jù)后庫會(huì)自動(dòng)調(diào)用該函數(shù),不需要在主函數(shù)中手動(dòng)調(diào)用,如果想監(jiān)控收到的數(shù)據(jù),可在該函數(shù)中設(shè)置相應(yīng)標(biāo)志位,主函數(shù)檢測(cè)標(biāo)志位后打印接收到的數(shù)據(jù)。程序如下僅供參考。

icon_rar.gifV203_CDC.zip

image.png

image.png

測(cè)試結(jié)果如下:

image.pngimage.png


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

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