ch32v208 USBFS_Endp_DataUp 沒有發(fā)送數(shù)據(jù)

??? {
??????? //USB Mode
??????? USBFS_RCC_Init();
??????? USBFS_Device_Init(ENABLE);
??????? USB_Sleep_Wakeup_CFG();
??? }

??? while(1)
??? {
??????? KeyValue[2] = 0x04;
??????? status = USBFS_Endp_DataUp(DEF_UEP1, KeyValue, sizeof(KeyValue), DEF_UEP_CPY_LOAD);
??????? Delay_Ms(10);
??????? KeyValue[2] = 0x00;
??????? status = USBFS_Endp_DataUp(DEF_UEP1, KeyValue, sizeof(KeyValue), DEF_UEP_CPY_LOAD);
??????? Delay_Ms(1000);
??? }


我在嘗試寫一個(gè)hid的復(fù)合設(shè)備,目前識(shí)別沒什么問題


但是并沒有和期望的一樣輸入A鍵


從bus hound來看,似乎并沒有每1秒傳個(gè)包?

還是說我代碼漏了什么東西?


1696483356247923.png

1696483356850600.png


你好,while1中,需要先等待枚舉完成,否則會(huì)reset重新初始化端點(diǎn),導(dǎo)致busy標(biāo)志位清零,一直無法上傳數(shù)據(jù)。

image.png


已經(jīng)更新了代碼,仍然并沒有表現(xiàn)出預(yù)期的每一秒按一次A鍵,而是不規(guī)律的表現(xiàn)


所以我現(xiàn)在有一些不太理解這個(gè)邏輯結(jié)構(gòu)了


比如說做一個(gè)TIM去掃描矩陣,如果有變化那么flag=1

while(1)中輪詢usbfs_devenumstatus和flag,都為1就更新一次endpoint并清除flag


是要這樣做么?


Screenshot 2023-10-30 232729.png


你好,例程里的USB鍵值只發(fā)送一個(gè)的話是keyboard1_Value[2]=0x04;多個(gè)鍵按下,則往后放。

例程里鍵盤上報(bào)的時(shí)間是10ms一次,這樣寫有小概率丟包。

USBFS_Endp_DataUp這個(gè)函數(shù)并不保證發(fā)送成功,如果上次的數(shù)據(jù)沒有發(fā)送完成,則不會(huì)裝載這次的數(shù)據(jù),參考KB_Scan_Handle里的寫法

image.png


我大概看了一遍代碼 這樣理解是不是正確


endpoint只在空的時(shí)候接受數(shù)據(jù),不接受新的數(shù)據(jù)覆蓋;

usb irq中上傳endpoint數(shù)據(jù)后USBFS_Endp_Busy會(huì)被清零,才會(huì)接受新的數(shù)據(jù)


那么是不是我可以這么說,不使用USBFS_Endp_DataUp這個(gè)函數(shù),或者說不使用USBFS_Endp_Busy這個(gè)flag去直接控制endpoint來完成USB傳輸


但是這并不能解釋為什么10ms上報(bào)一次會(huì)有丟包,按理說這個(gè)時(shí)間是十分充足的


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

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