ch32v208 usb hid 丟包
????????while(1)
????????{
????????????if?(i==0?&&?GPIO_ReadInputDataBit(GPIOA,?GPIO_Pin_10)==0)
????????????{
????????????????//pressed
????????????????GPIO_WriteBit(GPIOA,?GPIO_Pin_9,?Bit_RESET);
????????????????i=1;
????????????????Keyboard1_Value[2]?=?0x04;
????????????????flag=1;
????????????}
????????????else?if?(i==1?&&?GPIO_ReadInputDataBit(GPIOA,?GPIO_Pin_10)==1)
????????????{
????????????????//release
????????????????GPIO_WriteBit(GPIOA,?GPIO_Pin_9,?Bit_SET);
????????????????i=0;
????????????????Keyboard1_Value[2]?=?0x00;
????????????????flag=1;
????????????}
????????????if?(USBFS_DevEnumStatus?&&?flag==1)
????????????{
????????????????USBFS_Endp_DataUp(DEF_UEP1,?Keyboard1_Value,?sizeof(Keyboard1_Value),?DEF_UEP_CPY_LOAD);
????????????????flag=0;
????????????}
????????}


內(nèi)容不復(fù)雜,為了驗(yàn)證有效性把按鍵動(dòng)作綁上了一個(gè)LED


按下按鍵,LED點(diǎn)亮,發(fā)送0x04;放掉按鍵,LED熄滅,發(fā)送0x00


目前觀察LED的明暗沒什么問題,但是鍵盤有個(gè)小概率會(huì)丟包

這個(gè)要如何解決?

你好,USBFS_Endp_DataUp有返回值,返回值是0:表示數(shù)據(jù)裝載成功,返回1:表示上次的數(shù)據(jù)還沒發(fā)送出去

image.png


????????????if?(i==0?&&?GPIO_ReadInputDataBit(GPIOA,?GPIO_Pin_10)==0)
????????????{
????????????????//pressed
????????????????GPIO_WriteBit(GPIOA,?GPIO_Pin_9,?Bit_RESET);
????????????????i=1;
????????????????Keyboard1_Value[2]?=?0x04;
????????????????flag=1;
????????????}
????????????else?if?(i==1?&&?GPIO_ReadInputDataBit(GPIOA,?GPIO_Pin_10)==1)
????????????{
????????????????//release
????????????????GPIO_WriteBit(GPIOA,?GPIO_Pin_9,?Bit_SET);
????????????????i=0;
????????????????Keyboard1_Value[2]?=?0x00;
????????????????flag=1;
????????????}
????????????if?(USBFS_DevEnumStatus)
????????????{
????????????????if?(flag==1)
????????????????{
????????????????????u?=?USBFS_Endp_DataUp(DEF_UEP1,?Keyboard1_Value,?sizeof(Keyboard1_Value),?DEF_UEP_CPY_LOAD);
????????????????????flag=0;
????????????????}
????????????????if?(u==NoREADY)
????????????????{
????????????????????u?=?USBFS_Endp_DataUp(DEF_UEP1,?Keyboard1_Value,?sizeof(Keyboard1_Value),?DEF_UEP_CPY_LOAD);
????????????????}
????????????}

按照這個(gè)說法我更新了代碼

如果返回NoREADY,那么就再傳一次

這次觀察到延遲的現(xiàn)象 長按按鍵之后釋放 a會(huì)持續(xù)打出肉眼可見比我手慢一點(diǎn)

USBFS_Endp_DataUp

我感覺這個(gè)函數(shù)是不是應(yīng)該優(yōu)化一下


你好,返回0是數(shù)據(jù)裝載成功,等待主機(jī)發(fā)IN包,然后上傳數(shù)據(jù),返回1是指上次的數(shù)據(jù)還沒有發(fā)出去

參考這兩個(gè)博客

https://www.cnblogs.com/wchmcu/p/17508110.html

https://www.cnblogs.com/wchmcu/p/17913838.html


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

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