CH375B作主機(jī)鍵盤(pán)反應(yīng)慢問(wèn)題[原創(chuàng)][求助]

CH375DS2下載地址:http://www.findthetime.net/download/list.asp?id=14


TO:gig: endp_in_addr=08 這個(gè)不對(duì)啊.是該是0X01,你檢查一下獲取配置描述符部分,或者強(qiáng)制的該為endp_in_addr=01 因?yàn)槎它c(diǎn)不對(duì),所以返回一種錯(cuò)誤.


TO luomingde: 請(qǐng)問(wèn)你用的是什么模塊?模塊名稱.是在我們公司購(gòu)買的嗎?如果是的話我們應(yīng)該會(huì)給您一張光盤(pán),光盤(pán)里面會(huì)有的


在程式中加了一句:endp_in_addr=0x01;//------------------加上去的,見(jiàn)下面 //------------------ /* 獲取配置描述符 */ UINT8 GetConfigDescr( PUINT8 buf ) { UINT8 s, len,i,c,j; UINT8 BufLogDescr[ sizeof( SetupGetCfgDescr ) ] ;

s = HostCtrlTransfer374( SetupGetCfgDescr, buf, &len ); // 執(zhí)行控制傳輸 if ( s == USB_INT_SUCCESS ) { for(i=0;i!=len;i++)printf("%02x ",(unsigned short)buf[i]); printf("\n"); if ( len < ( (PUSB_SETUP_REQ)SetupGetCfgDescr ) -> wLengthL ) s = USB_INT_BUF_OVER; // 返回長(zhǎng)度錯(cuò)誤 else { memcpy ( BufLogDescr, SetupGetCfgDescr, sizeof( SetupGetCfgDescr ) ); ( (PUSB_SETUP_REQ)BufLogDescr ) -> wLengthL = ( (PUSB_CFG_DESCR)buf ) -> wTotalLengthL; // 完整配置描述符的總長(zhǎng)度 s = HostCtrlTransfer374( BufLogDescr, buf, &len ); // 執(zhí)行控制傳輸 if ( s == USB_INT_SUCCESS ) { //簡(jiǎn)單分析配置描述符,獲取端點(diǎn)地址,這里只處理一個(gè)端點(diǎn)的情況 for ( i = 0; i < ( (PUSB_CFG_DESCR)buf ) -> wTotalLengthL; i ++ ) printf( "%02X ", (UINT16)( buf[i] ) ); //配置描述符 printf( "\n" ); for(i=0;i<( (PUSB_CFG_DESCR)buf ) -> wTotalLengthL;i++) { if((buf[i]==0x09)&&(buf[i+1]==0x21)&&(buf[i+6]==0x22))hid_des_leng=buf[i+7]; //獲取報(bào)告描述符的長(zhǎng)度 } printf("hid_des_leng=%02x\n",(unsigned short)hid_des_leng); endp_out_addr=endp_in_addr=0;endp_num=0; for(i=0;i<( (PUSB_CFG_DESCR)buf ) -> wTotalLengthL;i++) { if((buf[i]==0x09)&&(buf[i+1]==0x04)&&(buf[i+5]==0x03)&&(buf[i+7]==0x01)||(buf[i+7]==0x02)) //接口描述符為HID的鼠標(biāo)、鍵盤(pán) { for(j=0;j<( (PUSB_CFG_DESCR)buf ) -> wTotalLengthL-i;j++) { if((buf[i+j]==0x07)&&(buf[i+j+1]==0x05)&&(buf[i+j+3]==0x03))c=buf[i+j+2]; //判斷是否為中斷端點(diǎn) if ( c&0x80 )endp_in_addr=c&0x0f; // IN端點(diǎn)的地址 else{endp_out_addr=c&0x0f;} // OUT端點(diǎn) if((endp_out_addr!=0)||(endp_in_addr!=0)) break; } } if((endp_out_addr!=0)||(endp_in_addr!=0))break; } endp_in_addr=0x01;//------------------加上去的 printf("endp_in_addr=%02x\n",(unsigned short)endp_in_addr); printf("endp_out_addr=%02x\n",(unsigned short)endp_out_addr); } } } return( s ); }

這樣加了之后,按鍵有反應(yīng)了,是正確的值,但是: 中斷腳總是低電平,如果不按任何鍵,總是有2a,14等出來(lái) 還有,如果要將上面的程式理解清楚一些,有沒(méi)有參考的資料,實(shí)在是不想買一大本書(shū)去研究USB,沒(méi)有時(shí)間??! //============================================================================================= 00 00 80 00 d5 00 00 f0 00 04 85 fe 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 28 cc 5c 63 62 c0 44 11 0c bb 1a 16 54 78 38 25 68 00 50 58 03 81 57 74 28 f8 04 c4 66 4a 24 58 Start CH374 Host Reset Device Start Low-Speed Device GetDeviceDescr: device_status=14 12 01 00 02 00 00 00 08 F2 04 00 04 44 01 01 02 00 01 address_status=14 09 02 22 00 09 02 22 00 01 01 00 A0 32 09 04 00 00 01 03 01 01 00 09 21 11 01 00 01 22 41 00 07 05 81 03 08 00 0A hid_des_leng=41 endp_in_addr=01 endp_out_addr=00 config_status=14 SetUsbConfig_success Set_Idle Set_idle success Get_Hid_Des HID_Desc: 05 01 09 06 a1 01 05 07 19 e0 29 e7 15 00 25 01 75 01 95 08 81 02 95 01 75 08 81 01 95 03 75 01 05 08 19 01 29 03 91 02 95 05 75 01 91 01 95 06 75 08 15 00 26 ff 00 05 07 19 00 2a ff 00 81 00 c0 Set_Report Set_Report success s:2a s:2a s:2a s:2a s:2a s:2a s:2a s:2a s:14 s:14 6 00 00 62 00 00 00 00 00 s:14 s:14 6 00 00 00 00 00 00 00 00 s:14 s:14 6 00 00 62 00 00 00 00 00 s:14 s:14 6 00 00 00 00 00 00 00 00 s:14 s:14 6 00 00 62 00 00 00 00 00 s:2a s:2a s:14 s:14 6 00 00 00 00 00 00 00 00 s:2a s:2a s:14 s:14 6 00 00 59 00 00 00 00 00 s:14 s:14 6 00 00 00 00 00 00 00 00 s:2a s:2a s:2a s:2a


在程式中加了一句:endp_in_addr=0x01;//------------------加上去的,見(jiàn)下面 //------------------ /* 獲取配置描述符 */ UINT8 GetConfigDescr( PUINT8 buf ) { UINT8 s, len,i,c,j; UINT8 BufLogDescr[ sizeof( SetupGetCfgDescr ) ] ;

s = HostCtrlTransfer374( SetupGetCfgDescr, buf, &len ); // 執(zhí)行控制傳輸 if ( s == USB_INT_SUCCESS ) { for(i=0;i!=len;i++)printf("%02x ",(unsigned short)buf[i]); printf("\n"); if ( len < ( (PUSB_SETUP_REQ)SetupGetCfgDescr ) -> wLengthL ) s = USB_INT_BUF_OVER; // 返回長(zhǎng)度錯(cuò)誤 else { memcpy ( BufLogDescr, SetupGetCfgDescr, sizeof( SetupGetCfgDescr ) ); ( (PUSB_SETUP_REQ)BufLogDescr ) -> wLengthL = ( (PUSB_CFG_DESCR)buf ) -> wTotalLengthL; // 完整配置描述符的總長(zhǎng)度 s = HostCtrlTransfer374( BufLogDescr, buf, &len ); // 執(zhí)行控制傳輸 if ( s == USB_INT_SUCCESS ) { //簡(jiǎn)單分析配置描述符,獲取端點(diǎn)地址,這里只處理一個(gè)端點(diǎn)的情況 for ( i = 0; i < ( (PUSB_CFG_DESCR)buf ) -> wTotalLengthL; i ++ ) printf( "%02X ", (UINT16)( buf[i] ) ); //配置描述符 printf( "\n" ); for(i=0;i<( (PUSB_CFG_DESCR)buf ) -> wTotalLengthL;i++) { if((buf[i]==0x09)&&(buf[i+1]==0x21)&&(buf[i+6]==0x22))hid_des_leng=buf[i+7]; //獲取報(bào)告描述符的長(zhǎng)度 } printf("hid_des_leng=%02x\n",(unsigned short)hid_des_leng); endp_out_addr=endp_in_addr=0;endp_num=0; for(i=0;i<( (PUSB_CFG_DESCR)buf ) -> wTotalLengthL;i++) { if((buf[i]==0x09)&&(buf[i+1]==0x04)&&(buf[i+5]==0x03)&&(buf[i+7]==0x01)||(buf[i+7]==0x02)) //接口描述符為HID的鼠標(biāo)、鍵盤(pán) { for(j=0;j<( (PUSB_CFG_DESCR)buf ) -> wTotalLengthL-i;j++) { if((buf[i+j]==0x07)&&(buf[i+j+1]==0x05)&&(buf[i+j+3]==0x03))c=buf[i+j+2]; //判斷是否為中斷端點(diǎn) if ( c&0x80 )endp_in_addr=c&0x0f; // IN端點(diǎn)的地址 else{endp_out_addr=c&0x0f;} // OUT端點(diǎn) if((endp_out_addr!=0)||(endp_in_addr!=0)) break; } } if((endp_out_addr!=0)||(endp_in_addr!=0))break; } endp_in_addr=0x01;//------------------加上去的 printf("endp_in_addr=%02x\n",(unsigned short)endp_in_addr); printf("endp_out_addr=%02x\n",(unsigned short)endp_out_addr); } } } return( s ); }

這樣加了之后,按鍵有反應(yīng)了,是正確的值,但是: 中斷腳總是低電平,如果不按任何鍵,總是有2a,14等出來(lái) 還有,如果要將上面的程式理解清楚一些,有沒(méi)有參考的資料,實(shí)在是不想買一大本書(shū)去研究USB,沒(méi)有時(shí)間??! //============================================================================================= 00 00 80 00 d5 00 00 f0 00 04 85 fe 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 28 cc 5c 63 62 c0 44 11 0c bb 1a 16 54 78 38 25 68 00 50 58 03 81 57 74 28 f8 04 c4 66 4a 24 58 Start CH374 Host Reset Device Start Low-Speed Device GetDeviceDescr: device_status=14 12 01 00 02 00 00 00 08 F2 04 00 04 44 01 01 02 00 01 address_status=14 09 02 22 00 09 02 22 00 01 01 00 A0 32 09 04 00 00 01 03 01 01 00 09 21 11 01 00 01 22 41 00 07 05 81 03 08 00 0A hid_des_leng=41 endp_in_addr=01 endp_out_addr=00 config_status=14 SetUsbConfig_success Set_Idle Set_idle success Get_Hid_Des HID_Desc: 05 01 09 06 a1 01 05 07 19 e0 29 e7 15 00 25 01 75 01 95 08 81 02 95 01 75 08 81 01 95 03 75 01 05 08 19 01 29 03 91 02 95 05 75 01 91 01 95 06 75 08 15 00 26 ff 00 05 07 19 00 2a ff 00 81 00 c0 Set_Report Set_Report success s:2a s:2a s:2a s:2a s:2a s:2a s:2a s:2a s:14 s:14 6 00 00 62 00 00 00 00 00 s:14 s:14 6 00 00 00 00 00 00 00 00 s:14 s:14 6 00 00 62 00 00 00 00 00 s:14 s:14 6 00 00 00 00 00 00 00 00 s:14 s:14 6 00 00 62 00 00 00 00 00 s:2a s:2a s:14 s:14 6 00 00 00 00 00 00 00 00 s:2a s:2a s:14 s:14 6 00 00 59 00 00 00 00 00 s:14 s:14 6 00 00 00 00 00 00 00 00 s:2a s:2a s:2a s:2a


你把S打印去掉不就可以了嗎.因?yàn)槟阋恢痹谘h(huán)查詢USB鍵盤(pán)是否有數(shù)據(jù).所以會(huì)有中斷的.


多謝紅桃六,感覺(jué)到已調(diào)的差不多了,現(xiàn)在還是有一個(gè)問(wèn)題沒(méi)有搞定: 當(dāng)開(kāi)機(jī)后,剛開(kāi)始正常,過(guò)不了多長(zhǎng)時(shí)間(有時(shí)幾秒,有時(shí)幾十秒),中斷指示燈就會(huì)不停的閃動(dòng)(我在中斷引腳到電源間接了一個(gè)LED),再按鍵盤(pán)上的按鍵就沒(méi)有作用了,在下面的程式中增加一條S的打印指令,發(fā)現(xiàn)其值為20H,而不是成功之后的14H,將下面的程式中的延時(shí)的程式mDelaymS(5)改成mDelaymS(100)燈閃的會(huì)變慢,說(shuō)明一直在這里循環(huán),不清楚S=20H是什么意思?(CH374DS2的資料還在申請(qǐng)中,方便的話就將我的權(quán)限馬上開(kāi)通,謝謝) //================================ /*通過(guò)中斷端點(diǎn)獲取鼠標(biāo)、鍵盤(pán)上傳的數(shù)據(jù) */ unsigned char Interrupt_Data_Trans(unsigned char *p) { UINT8 s,count; s = WaitHostTransact374( endp_in_addr, DEF_USB_PID_IN, tog1, 1000 ); // IN數(shù)據(jù) printf("s:%x \n",(unsigned short)s); if(s!=USB_INT_SUCCESS ){mDelaymS(100); return s;} //5 else { count = Read374Byte( REG_USB_LENGTH ); Read374Block( RAM_HOST_RECV, count, p ); tog1 = tog1 ? FALSE : TRUE; } return s; } //=============================== 用串口監(jiān)查到的值: 00 00 80 00 c5 00 00 f0 00 04 8f ff 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 28 cc 5c 67 62 c8 44 91 14 bb 12 56 54 68 38 25 68 00 54 58 03 81 57 74 28 b8 04 c4 66 4a 2c 5a Start CH374 Host Reset Device Start Low-Speed Device GetDeviceDescr: device_status=14 12 01 10 01 00 00 00 08 D9 04 27 A0 10 01 01 02 00 01 address_status=14 09 02 3b 00 09 02 3B 00 02 01 00 A0 32 09 04 00 00 01 03 01 01 00 09 21 10 01 00 01 22 3E 00 07 05 81 03 08 00 0A 09 04 01 00 01 03 00 00 00 09 21 10 01 00 01 22 6A 00 07 05 82 03 08 00 0A hid_des_leng=6a endp_in_addr=01 endp_out_addr=00 config_status=14 SetUsbConfig_success Set_Idle Set_idle success Get_Hid_Des HID_Desc: 05 01 09 06 a1 01 05 07 19 e0 29 e7 15 00 25 01 75 01 95 08 81 02 95 01 75 08 81 01 95 03 75 01 05 08 19 01 29 03 91 02 95 05 75 01 91 01 95 06 75 08 26 ff 00 05 07 19 00 29 91 81 00 c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 13 08 b5 09 38 09 01 03 0c 10 02 1c 4a 1c a9 f3 71 65 e9 b4 8f be af 5e e7 2e Set_Report Set_Report success s:14 00 00 25 00 00 00 00 00 s:14 00 00 00 00 00 00 00 00 s:14 00 00 25 00 00 00 00 00 s:20 s:20 s:20 s:20


下面給您貼一個(gè)兼容比較好的函數(shù),您去替換一下相應(yīng)的函數(shù): UINT8 HostTransact374( UINT8 endp_addr, UINT8 pid, BOOL tog ) { // 本子程序著重于易理解,而在實(shí)際應(yīng)用中,為了提供運(yùn)行速度,應(yīng)該對(duì)本子程序代碼進(jìn)行優(yōu)化 UINT8 retry; UINT8 s, r, u; for ( retry = 0; retry < 3; retry ++ ) { Write374Byte( REG_USB_H_PID, M_MK_HOST_PID_ENDP( pid, endp_addr ) ); // 指定令牌PID和目的端點(diǎn)號(hào) // Write374Byte( REG_USB_H_CTRL, BIT_HOST_START | ( tog ? ( BIT_HOST_TRAN_TOG | BIT_HOST_RECV_TOG ) : 0x00 ) ); // 設(shè)置同步標(biāo)志并啟動(dòng)傳輸 Write374Byte( REG_USB_H_CTRL, ( tog ? ( BIT_HOST_START | BIT_HOST_TRAN_TOG | BIT_HOST_RECV_TOG ) : BIT_HOST_START ) ); // 設(shè)置同步標(biāo)志并啟動(dòng)傳輸 // Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE ); // 取消暫停 mDelayuS( 200 ); s = Wait374Interrupt( ); if ( s == ERR_USB_UNKNOWN ) return( s ); // 中斷超時(shí),可能是硬件異常 // mDelayuS( 200 ); s = Read374Byte( REG_INTER_FLAG ); // 獲取中斷狀態(tài) if ( s & BIT_IF_DEV_DETECT ) { // USB設(shè)備插拔事件 mDelayuS( 200 ); Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE | BIT_IF_DEV_DETECT | BIT_IF_TRANSFER ); // 清中斷標(biāo)志 if ( s & BIT_IF_DEV_ATTACH ) { // USB設(shè)備連接事件 u = Read374Byte( REG_USB_SETUP ); if ( s & BIT_IF_USB_DX_IN ) { // 速度匹配,不需要切換速度 if ( u & BIT_SETP_USB_SPEED ) return( USB_INT_CONNECT_LS ); // 低速USB設(shè)備 return( USB_INT_CONNECT ); // 全速USB設(shè)備 } else { // 速度失配,需要切換速度 if ( u & BIT_SETP_USB_SPEED ) return( USB_INT_CONNECT ); // 全速USB設(shè)備 return( USB_INT_CONNECT_LS ); // 低速USB設(shè)備 } } else return( USB_INT_DISCONNECT ); // USB設(shè)備斷開(kāi)事件 } else if ( s & BIT_IF_TRANSFER ) { // 傳輸完成 mDelayuS( 100 ); Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE | BIT_IF_TRANSFER ); // 清中斷標(biāo)志 s = Read374Byte( REG_USB_STATUS ); // USB狀態(tài) // printf(" %02x ",(unsigned short )s); r = s & BIT_STAT_DEV_RESP; // USB設(shè)備應(yīng)答狀態(tài) switch ( pid ) { case DEF_USB_PID_SETUP: case DEF_USB_PID_OUT: if ( r == DEF_USB_PID_ACK ) return( USB_INT_SUCCESS ); else if ( r == DEF_USB_PID_STALL || r == DEF_USB_PID_NAK ) return( r | 0x20 ); else if ( ! M_IS_HOST_TIMEOUT( s ) ) return( r | 0x20 ); // 不是超時(shí)/出錯(cuò),意外應(yīng)答 break; case DEF_USB_PID_IN: if ( M_IS_HOST_IN_DATA( s ) ) { // DEF_USB_PID_DATA0 or DEF_USB_PID_DATA1 if ( s & BIT_STAT_TOG_MATCH ) return( USB_INT_SUCCESS ); // 不同步則需丟棄后重試 } else if ( r == DEF_USB_PID_STALL || r == DEF_USB_PID_NAK ) return( r | 0x20 ); else if ( ! M_IS_HOST_TIMEOUT( s ) ) return( r | 0x20 ); // 不是超時(shí)/出錯(cuò),意外應(yīng)答 break; default: return( ERR_USB_UNKNOWN ); // 不可能的情況 break; } } else { // 其它中斷,不應(yīng)該發(fā)生的情況 mDelayuS( 200 ); // 等待傳輸完成 Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE | BIT_IF_INTER_FLAG ); /* 清中斷標(biāo)志 */ if ( retry ) return( ERR_USB_UNKNOWN ); // 不是第一次檢測(cè)到則返回錯(cuò)誤 } } return( 0x20 ); // 應(yīng)答超時(shí) }

獲取數(shù)據(jù)的函數(shù),速度盡可能快: /*通過(guò)中斷端點(diǎn)獲取鼠標(biāo)、鍵盤(pán)上傳的數(shù)據(jù) */ unsigned char Interrupt_Data_Trans( ) { UINT8 s,count,i; UINT8 buf1[8]; s = WaitHostTransact374( endp_in_addr, DEF_USB_PID_IN, tog1, 1000 ); // IN數(shù)據(jù) if ( s != USB_INT_SUCCESS ){ TI = 0; SBUF = s; while( TI == 0 );

mDelaymS( 5 ); return s; } else { count = Read374Byte( REG_USB_LENGTH ); Read374Block( RAM_HOST_RECV, count, buf1 ); for(i=0;i!=count;i++){ TI = 0; SBUF = buf1[i]; while( TI == 0 ); } tog1 = tog1 ? FALSE : TRUE; } return s; }


To: 紅桃六 我使用的模塊是在別人那買的,之后我才知道了南京沁恒電子及這個(gè)論壇,其實(shí)就只有一顆IC CH375B和轉(zhuǎn)DIP的一個(gè)板子及晶振,線路和手冊(cè)上的那部分相同,單片機(jī)是AT89S52我自己加的,從你發(fā)表的程序可以看出要使用一個(gè)128*64的LCD吧,這個(gè)我也可以加上去的。但從評(píng)估板上看沒(méi)有使用LCD,那是用的PC上的串口調(diào)試器嗎? 如果使用P1口和P3口的話,CH375B的片選CS連接到哪呢?謝謝指點(diǎn)。


TO: luomingde (1)用串口調(diào)試 (2)用P1口和P3口的話,那么是模擬I/O操作375了,CS可以任意接,只要不與其他的沖突即可 另,程序中CH375的CS、A0、RD、WR、INT,數(shù)據(jù)口需要按照你的硬件連接重新定義


用上面的程式之后,將print全部去掉,將中斷的指示燈也去掉之后還是同前面一樣的問(wèn)題,返回的值還是20H,這個(gè)20H代表的是什么意義呢?(波特率也調(diào)高到了115200)


這個(gè)程序是我們測(cè)試兼容效果還不錯(cuò)的,如果你很多鍵盤(pán)都產(chǎn)生這個(gè)現(xiàn)象 的話就太不正常了.這樣,你把程序發(fā)到我們技術(shù)支持郵箱里,我們看一下. 另外你檢查你的硬件,USB外殼有沒(méi)有接地?374工作在幾V?9腳的接法是否正確?


中斷INT0為何沒(méi)有被拉低?我在串口測(cè)試中的信息如下: Start Please Insert USB Device... 設(shè)備描述符是:12 01 10 01 00 00 00 08 6d 04 0f c3 00 23 01 02 00 01 device 12 01 10 01 00 00 00 08 6d 04 0f c3 00 23 01 02 00 01 配置描述符是:09 02 3b 00 02 01 00 a0 32 09 04 00 00 01 03 01 01 00 09 21 10 01 0 0 01 22 40 00 07 05 81 03 08 00 0a 09 04 01 00 01 03 00 00 00 09 21 10 01 00 01 22 90 00 07 05 82 03 08 00 20 config 09 02 3b 00 02 01 00 a0 32 config 2 09 02 3b 00 02 01 00 a0 32 09 04 00 00 01 03 01 01 00 09 21 10 01 00 01 22 40 00 07 05 81 03 08 00 0a 09 04 01 00 01 03 00 00 00 09 21 10 01 00 01 22 90 00 07 0 5 82 03 08 00 20 set config set idle report 05 01 09 06 a1 01 05 07 19 e0 29 e7 15 00 25 01 75 01 95 08 81 02 95 01 75 08 81 01 95 05 75 01 05 08 19 01 29 05 91 02 95 01 75 03 91 01 95 06 75 08 15 00 26 a 4 00 05 07 19 00 29 a4 81 00 c0 set report

是USB的鍵盤(pán),中斷程序沒(méi)有執(zhí)行,鍵盤(pán)無(wú)效,收不到任何字節(jié)。謝謝了!


不知道你是如何監(jiān)視中斷引腳沒(méi)有產(chǎn)生,如果不產(chǎn)生中斷的話那么你上述的描述符也是無(wú)法獲取到的. 你這個(gè)鍵盤(pán)比較特殊是一個(gè)復(fù)合設(shè)備.需要更改程序后才能支持,你看一下有兩個(gè)接口,你插在PC上肯定是兩個(gè)設(shè)備.其他鍵盤(pán)是否也是相同情況?鍵盤(pán)無(wú)效,收不到任何字節(jié)。


等輸出set report后就沒(méi)有反應(yīng)了,鍵盤(pán)上的Nun Lock燈點(diǎn)亮了, 我想是中斷沒(méi)有起作用,用示波器測(cè)試到INT0上一直是高電平。在輸出set report之前測(cè)試到INT0的電平還會(huì)被拉低。換個(gè)鍵盤(pán),鼠標(biāo)都沒(méi)有反應(yīng),將PC上的USB鍵盤(pán)也去掉了。收不到任何字節(jié)。謝謝了!


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

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