通過(guò)串口CH375B操作USB鍵盤(pán),快速按沒(méi)反應(yīng),慢速按經(jīng)常出錯(cuò)!求組

STM32串口?->?CH375B(5V)?->?USB鍵盤(pán)

下面是監(jiān)控到的數(shù)據(jù),并且自己翻譯了一下:

?CMD:發(fā)送命令,DAT:發(fā)送數(shù)據(jù),RTN:返回的數(shù)據(jù);

[CMD?22][RTN?15]?//中斷,設(shè)備連接

[CMD?15][DAT?07][RTN?51]?//設(shè)置模式7

[CMD?15][DAT?06][RTN?51]?//設(shè)置模式6

[CMD?22][RTN?15]?//中斷,設(shè)備連接

[CMD?0B][DAT?17][DAT?D8]???//慢速

[CMD?1D][DAT?80]????//端點(diǎn)發(fā)送器?DATA0包(DATA0包,DATA1包交替使用)

[CMD?2B][DAT?08][DAT?80][DAT?06][DAT?00][DAT?01][DAT?00][DAT?00][DAT?12][DAT?00]?//寫(xiě)入80?06?00?01?00?00?00?12?00數(shù)據(jù)到主機(jī)端點(diǎn)(讀設(shè)備描述符,長(zhǎng)度12

[CMD?4F][DAT?0D]????//執(zhí)行SETUP事務(wù),發(fā)送建立數(shù)據(jù)(375芯片?-->??USB設(shè)備)

[CMD?22][RTN?14]????//中斷,操作成功

[CMD?1C][DAT?C0]????//端點(diǎn)接收器,讀入DATA1??

[CMD?4F][DAT?09]????//執(zhí)行IN事務(wù),接受數(shù)據(jù)???

[CMD?22][RTN?14]????//中斷,操作成功

[CMD?28][RTN?08][RTN?12][RTN?01][RTN?10][RTN?01][RTN?00][RTN?00][RTN?00][RTN?08]??//從緩沖區(qū)讀入數(shù)據(jù)

[CMD?1C][DAT?80]????//端點(diǎn)接收器,讀入DATA0

[CMD?4F][DAT?09]????//執(zhí)行IN事務(wù),接受數(shù)據(jù)

[CMD?22][RTN?14]????//中斷,操作成功

[CMD?28][RTN?08][RTN?D9][RTN?04][RTN?03][RTN?15][RTN?10][RTN?03][RTN?01][RTN?02]

[CMD?1C][DAT?C0]????//端點(diǎn)接收器,讀入DATA1

[CMD?4F][DAT?09]????//執(zhí)行IN事務(wù),接受數(shù)據(jù)

[CMD?22][RTN?14]????//中斷,操作成功

[CMD?28][RTN?02][RTN?00][RTN?01]?//共收到設(shè)備描述符:12?01?10?01?00?00?00?08?D9?04?03?15?10?03?01?02?00?01?

[CMD?1D][DAT?C0]????//端點(diǎn)發(fā)送器,?DATA1

[CMD?2B][DAT?00]????//寫(xiě)入0數(shù)據(jù)到主機(jī)端點(diǎn)

[CMD?4F][DAT?01]????//執(zhí)行out事務(wù),發(fā)送數(shù)據(jù)

[CMD?22][RTN?14]????//中斷,操作成功

?

[CMD?45][DAT?05]????//設(shè)置USB設(shè)備地址為5

[CMD?22][RTN?14]????//中斷,操作成功

[CMD?13][DAT?05]config???//設(shè)置主機(jī)USB地址為5

?

[CMD?1D][DAT?80]????//端點(diǎn)發(fā)送器,?DATA0

[CMD?2B][DAT?08][DAT?80][DAT?06][DAT?00][DAT?02][DAT?00][DAT?00][DAT?09][DAT?00]?//寫(xiě)入80?06?00?02?00?00?00?09?00數(shù)據(jù)到主機(jī)端點(diǎn)(讀配置描述符,長(zhǎng)度9

[CMD?4F][DAT?0D]????//執(zhí)行SETUP事務(wù),發(fā)送建立數(shù)據(jù)

[CMD?22][RTN?14]????//中斷,操作成功

[CMD?1C][DAT?C0]????//端點(diǎn)接收器,讀入DATA1

[CMD?4F][DAT?09]????//執(zhí)行IN事務(wù),接受數(shù)據(jù)

[CMD?22][RTN?14]????//中斷,操作成功

[CMD?28][RTN?08][RTN?09][RTN?02][RTN?3B][RTN?00][RTN?02][RTN?01][RTN?00][RTN?A0]??

[CMD?1C][DAT?80]????//端點(diǎn)接收器,讀入DATA0

[CMD?4F][DAT?09]????//執(zhí)行IN事務(wù),接受數(shù)據(jù)

[CMD?22][RTN?14]????//中斷,操作成功

[CMD?28][RTN?01][RTN?32]???//接受到配置描述符:09?02?3B?00?02?01?00?A0?32

[CMD?1D][DAT?C0]????//端點(diǎn)發(fā)送器,DATA1

[CMD?2B][DAT?00]????//寫(xiě)入0數(shù)據(jù)到主機(jī)端點(diǎn)

[CMD?4F][DAT?01]????//執(zhí)行out事務(wù),發(fā)送數(shù)據(jù)

[CMD?22][RTN?14]????//中斷,操作成功

config?2

?

[CMD?1D][DAT?80]????//端點(diǎn)發(fā)送器,?DATA0

[CMD?2B][DAT?08][DAT?80][DAT?06][DAT?00][DAT?02][DAT?00][DAT?00][DAT?3B][DAT?00]

[CMD?4F][DAT?0D]????//執(zhí)行SETUP事務(wù),發(fā)送建立數(shù)據(jù)

[CMD?22][RTN?14]

[CMD?1C][DAT?C0]????//端點(diǎn)接收器,讀入DATA1

[CMD?4F][DAT?09]

[CMD?22][RTN?14]

[CMD?28][RTN?08][RTN?09][RTN?02][RTN?3B][RTN?00][RTN?02][RTN?01][RTN?00][RTN?A0]

[CMD?1C][DAT?80]????//端點(diǎn)接收器,讀入DATA0

[CMD?4F][DAT?09]

[CMD?22][RTN?14]

[CMD?28][RTN?08][RTN?32][RTN?09][RTN?04][RTN?00][RTN?00][RTN?01][RTN?03][RTN?01]

[CMD?1C][DAT?C0]????//端點(diǎn)接收器,讀入DATA1

[CMD?4F][DAT?09]

[CMD?22][RTN?14]

[CMD?28][RTN?08][RTN?01][RTN?00][RTN?09][RTN?21][RTN?10][RTN?01][RTN?00][RTN?01]

[CMD?1C][DAT?80]????//端點(diǎn)接收器,讀入DATA0

[CMD?4F][DAT?09]

[CMD?22][RTN?14]

[CMD?28][RTN?08][RTN?22][RTN?3E][RTN?00][RTN?07][RTN?05][RTN?81][RTN?03][RTN?08]

[CMD?1C][DAT?C0]????//端點(diǎn)接收器,讀入DATA1

[CMD?4F][DAT?09]

[CMD?22][RTN?14]

[CMD?28][RTN?08][RTN?00][RTN?0A][RTN?09][RTN?04][RTN?01][RTN?00][RTN?01][RTN?03]

[CMD?1C][DAT?80]????//端點(diǎn)接收器,讀入DATA0

[CMD?4F][DAT?09]

[CMD?22][RTN?14]

[CMD?28][RTN?08][RTN?00][RTN?00][RTN?00][RTN?09][RTN?21][RTN?10][RTN?01][RTN?00]

[CMD?1C][DAT?C0]????//端點(diǎn)接收器,讀入DATA1

[CMD?4F][DAT?09]

[CMD?22][RTN?14]

[CMD?28][RTN?08][RTN?01][RTN?22][RTN?65][RTN?00][RTN?07][RTN?05][RTN?82][RTN?03]

[CMD?1C][DAT?80]????//端點(diǎn)接收器,讀入DATA0

[CMD?4F][DAT?09]

[CMD?22][RTN?14]

[CMD?28][RTN?03][RTN?08][RTN?00][RTN?0A]??//收到完整配置描述符: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?65?00?07?05?82?03?08?00?0A

[CMD?1D][DAT?C0]????//端點(diǎn)發(fā)送器,DATA1

[CMD?2B][DAT?00]????//寫(xiě)入0數(shù)據(jù)到主機(jī)端點(diǎn)

[CMD?4F][DAT?01]????//執(zhí)行out事務(wù),發(fā)送數(shù)據(jù)

[CMD?22][RTN?14]????//中斷,操作成功

?

[CMD?49][DAT?01]????//設(shè)置配置值為01

[CMD?22][RTN?14]????//中斷,操作成功

?

set?idle

[CMD?1D][DAT?80]????//端點(diǎn)發(fā)送器,讀入DATA0

[CMD?2B][DAT?08][DAT?21][DAT?0A][DAT?00][DAT?00][DAT?00][DAT?00][DAT?00][DAT?00]??//設(shè)置空閑模式命令

[CMD?4F][DAT?0D]????//執(zhí)行SETUP事務(wù),發(fā)送建立數(shù)據(jù)

[CMD?22][RTN?14]????//中斷,操作成功

[CMD?1C][DAT?C0]????//端點(diǎn)接受器,?讀入DATA1

[CMD?4F][DAT?09]????//執(zhí)行IN事務(wù),接受數(shù)據(jù)

[CMD?22][RTN?14]????//中斷,操作成功

[CMD?28][RTN?00]????//讀入數(shù)據(jù)

?

report

[CMD?1D][DAT?80]????//端點(diǎn)發(fā)送器,DATA0

?

[CMD?2B][DAT?08][DAT?81][DAT?06][DAT?00][DAT?22][DAT?00][DAT?00][DAT?A5][DAT?00]??//發(fā)送獲取HID報(bào)告描述符

[CMD?4F][DAT?0D]????//執(zhí)行SETUP事務(wù),發(fā)送建立數(shù)據(jù)

[CMD?22][RTN?14]????//中斷,操作成功

[CMD?1C][DAT?C0]????//端點(diǎn)接受器,?DATA1

[CMD?4F][DAT?09]????//執(zhí)行IN事務(wù),接受數(shù)據(jù)

[CMD?22][RTN?14]????//中斷,操作成功

[CMD?28][RTN?08][RTN?05][RTN?01][RTN?09][RTN?06][RTN?A1][RTN?01][RTN?05][RTN?07]

[CMD?1C][DAT?80]????//端點(diǎn)接受器,?讀入DATA0

[CMD?4F][DAT?09]

[CMD?22][RTN?14]

[CMD?28][RTN?08][RTN?19][RTN?E0][RTN?29][RTN?E7][RTN?15][RTN?00][RTN?25][RTN?01]

[CMD?1C][DAT?C0]????//端點(diǎn)接受器,?讀入DATA1

[CMD?4F][DAT?09]

[CMD?22][RTN?14]

[CMD?28][RTN?08][RTN?75][RTN?01][RTN?95][RTN?08][RTN?81][RTN?02][RTN?95][RTN?01]

[CMD?1C][DAT?80]????//端點(diǎn)接受器,?讀入DATA0

[CMD?4F][DAT?09]

[CMD?22][RTN?14]

[CMD?28][RTN?08][RTN?75][RTN?08][RTN?81][RTN?01][RTN?95][RTN?03][RTN?75][RTN?01]

[CMD?1C][DAT?C0]????//端點(diǎn)接受器,?讀入DATA1

[CMD?4F][DAT?09]

[CMD?22][RTN?14]

[CMD?28][RTN?08][RTN?05][RTN?08][RTN?19][RTN?01][RTN?29][RTN?03][RTN?91][RTN?02]

[CMD?1C][DAT?80]????//端點(diǎn)接受器,?讀入DATA0

[CMD?4F][DAT?09]

[CMD?22][RTN?14]

[CMD?28][RTN?08][RTN?95][RTN?05][RTN?75][RTN?01][RTN?91][RTN?01][RTN?95][RTN?06]

[CMD?1C][DAT?C0]????//端點(diǎn)接受器,?讀入DATA1

[CMD?4F][DAT?09]

[CMD?22][RTN?14]

[CMD?28][RTN?08][RTN?75][RTN?08][RTN?26][RTN?FF][RTN?00][RTN?05][RTN?07][RTN?19]

[CMD?1C][DAT?80]????//端點(diǎn)接受器,?讀入DATA0

[CMD?4F][DAT?09]

[CMD?22][RTN?14]

[CMD?28][RTN?06][RTN?00][RTN?29][RTN?91][RTN?81][RTN?00][RTN?C0]

[CMD?1D][DAT?C0]????//端點(diǎn)發(fā)送器,?DATA1

[CMD?2B][DAT?00]????//往端點(diǎn)發(fā)送器寫(xiě)入數(shù)據(jù)0

[CMD?4F][DAT?01]????//執(zhí)行out事務(wù),發(fā)送數(shù)據(jù)

[CMD?22][RTN?14]

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?

set?report

[CMD?1D][DAT?80]????//端點(diǎn)發(fā)送器,?DATA0

[CMD?2B][DAT?08][DAT?21][DAT?09][DAT?00][DAT?02][DAT?00][DAT?00][DAT?01][DAT?00]

[CMD?4F][DAT?0D]????//執(zhí)行SETUP事務(wù),發(fā)送建立數(shù)據(jù)

[CMD?22][RTN?14]

[CMD?1D][DAT?C0]????//端點(diǎn)發(fā)送器,?DATA1

[CMD?2B][DAT?01][DAT?01]???//點(diǎn)亮鍵盤(pán)燈

[CMD?4F][DAT?01]????//執(zhí)行out事務(wù),發(fā)送數(shù)據(jù)

[CMD?22][RTN?14]????

[CMD?1C][DAT?C0]????//端點(diǎn)接受器,?讀入DATA1

[CMD?4F][DAT?09]????//執(zhí)行IN事務(wù),接受數(shù)據(jù)

[CMD?22][RTN?14]????

[CMD?28][RTN?00]set?report?OK!??//接受數(shù)據(jù)

?

[CMD?1C][DAT?80]????//端點(diǎn)接受器,?讀入DATA0

[CMD?4F][DAT?29]wait?INT???//執(zhí)行IN事務(wù),接受數(shù)據(jù)

?

//緩慢按鍵盤(pán)?獲得如下數(shù)據(jù),

[CMD?22][RTN?14]

[CMD?28][RTN?08][RTN?00][RTN?00][RTN?1E][RTN?00][RTN?00][RTN?00][RTN?00][RTN?00]??//鍵碼00?00?1E?00?00?00?00?00?(按下1鍵)

[CMD?1C][DAT?C0]

[CMD?4F][DAT?19]

//此處鍵盤(pán)松開(kāi),檢測(cè)到INT,但是讀串口錯(cuò)誤

[CMD?16][RTN?FF]????????//檢測(cè)到INT腳變低,但是串口20mS超時(shí),沒(méi)收到數(shù)據(jù),我就給了一個(gè)FF返回值

[CMD?1C][DAT?80]

[CMD?4F][DAT?19]wait?INT

//?此處再次按鍵盤(pán),但沒(méi)有INT

[CMD?22][RTN?14]

[CMD?28][RTN?08][RTN?00][RTN?00][RTN?00][RTN?00][RTN?00][RTN?00][RTN?00][RTN?00]??//鍵碼00?00?00?00?00?00?00?00?(松開(kāi))

[CMD?1C][DAT?C0]

[CMD?4F][DAT?19]

//?此處再次按鍵盤(pán),檢測(cè)到INT,但是讀串口錯(cuò)誤

[CMD?16][RTN?FF]????????//檢測(cè)到INT腳變低,但是串口20mS超時(shí),沒(méi)收到數(shù)據(jù),我就給了一個(gè)FF返回值

[CMD?1C][DAT?80]

[CMD?4F][DAT?19]wait?INT

?

//快速按鍵盤(pán),根本就沒(méi)有反應(yīng)。INT腳不變低??!INT腳是在線程中每5mS檢測(cè)一次。

?

這可能是軟件問(wèn)題,還是硬件問(wèn)題??

?



熱門(mén)產(chǎn)品 : CH32X035: 32位USB+USB PD單片機(jī)

因?yàn)楹竺婺隳茏x這個(gè)鍵盤(pán)了,前面枚舉我就不細(xì)看了,我們提供的例子是在枚舉完成,也就0x21 09...的命令后,開(kāi)始使用中斷方式獲取鍵盤(pán)數(shù)據(jù),使用get_int_in()函數(shù),里面只是發(fā)送IN包,然后等中斷狀態(tài),流程大概是這個(gè)樣子,之前碰到類似的情況好像跟IN包重試次數(shù)有關(guān),所以造成數(shù)據(jù)比較慢,你在get_int_in()函數(shù)之前,加一句話?

CH375_WR_CMD_PORT(CMD_SET_RETRY);CH375_WR_DAT_PORT(0x25);CH375_WR_DAT_PORT(0x00);

這個(gè)是設(shè)置IN包重試次數(shù)的,之前調(diào)試過(guò)一個(gè)鍵盤(pán),類似的情況就是IN重試占用太長(zhǎng)時(shí)間了,導(dǎo)致下個(gè)命令包不能發(fā)進(jìn)去,出現(xiàn)數(shù)據(jù)慢的情況。


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

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