
рдпрд╣ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдкрд╣рд▓рд╛ (рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ) рд▓реЗрдЦ рд╣реИ рдХрд┐ рдореИрдВ рдХрд╛рд░ рдХреЗ рдореАрдбрд┐рдпрд╛ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдХреИрд╕реЗ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реНрд╡рдпрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реИ, рд╣рд░ рдХрд┐рд╕реА рдХреА рддрд░рд╣, рдХреЛрдИ рд╕рдордп рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ, рдХреГрдкрдпрд╛ рдзреИрд░реНрдп рд░рдЦреЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЕрдХреНрд╕рд░ рд▓реЗрдЦреЛрдВ рдХреЛ рд░рд┐рд╡реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред
рдпрд╣ рд╕рдм рдЗрд╕ рддрдереНрдп рд╕реЗ рд╢реБрд░реВ рд╣реБрдЖ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рд┐рдпрд╕ рдерд╛ред
рдФрд░ рдкрд╣рд▓реА рдЪреАрдЬ рдЬрд┐рд╕рдиреЗ рдореЗрд░реА рдЖрдВрдЦ рдХреЛ рдкрдХрдбрд╝рд╛ рд╡рд╣ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрд╣реБрдд рдХрдо рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ "рдорд▓реНрдЯреАрдлрд╝рдВрдХреНрд╢рди рдбрд┐рд╕реНрдкреНрд▓реЗ" (рдЖрдо рд▓реЛрдЧреЛрдВ рдореЗрдВ - рд╣реЗрдб) рдирд╛рдордХ рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред рдФрд░ рдпрд╣ рдмреЛрд░реНрдб рдкрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд╕рд╛рде рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЪреАрдиреА рд░реЗрдбрд┐рдпреЛ рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣реИ, рдФрд░ рдХрдИ рд╕реБрд╡рд┐рдзрд╛рдПрдВ рд╣реИрдВред рд▓реЗрдХрд┐рди рдПрдХ рдирд┐рдпрдорд┐рдд рд╕реНрдерд╛рди рдкрд░ рдЙрдирдХреА рд╕реНрдерд╛рдкрдирд╛ рдКрд░реНрдЬрд╛ рдФрд░ рдЬрд▓рд╡рд╛рдпреБ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд╡рд┐рддрд░рдг рдХреЗ рдЖрд░реЗрдЦ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ "рдмрдиреНрд╕" рд╕реЗ рд╡рдВрдЪрд┐рдд рдХрд░рддреА рд╣реИред
рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдЬрдиреНрдо рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЪреАрдиреА рднрд╛рдЗрдпреЛрдВ рдХреЗ рд╕реБрдЭрд╛рд╡ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдВрдбреНрд░реЙрдЗрдб рд░реЗрдбрд┐рдпреЛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реБрдЖ рдерд╛ред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рд▓реЗрдЦред
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐
So. рдмреЛрд░реНрдб рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рд░реЛрдзрдХ рдЯрдЪ рд╕реНрдХреНрд░реАрди рдХреЗ рд╕рд╛рде рд▓рдЧрднрдЧ 7 рдЗрдВрдЪ рдХрд╛ рдбрд┐рд╕реНрдкреНрд▓реЗ рд╣реИ, рдЬреЛ TX + рдФрд░ TX- рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдиреНрдп рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХреНрд╕ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИред рдФрд░ рд╕рд┐рд░ рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 3 рдРрд╕реЗ рдЬреЛрдбрд╝реЗ рд╣реИрдВред рд╕рд░реНрдХрд┐рдЯ рдореЗрдВ, рдЗрд╕ рдЪрдорддреНрдХрд╛рд░ рдХрд╛ рдирд╛рдо AVC-LAN рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рднрд╛рдЧ 1: рдЕрдВрджрд░ рдХреА рдУрд░ рджреЗрдЦрдирд╛
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд┐рд░ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рд╣реИ, рд░рд╛рдЙрдЯрд░ рдФрд░ рд░реЗрдбрд┐рдпреЛ рдХреА рдЖрдЧреЗ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдмреАрдЪ, рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ (рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ рдЕрд▓рдЧ рд╣реИ), рдФрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдЗрдХрд╛рдИ рдХрд╛ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдПрдХ рдЕрд▓рдЧ рдЪреИрдирд▓ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИред рдХрд╣реАрдВ рдФрд░, рдПрдХ рдХрд╛рд░ рдкрд╛рд░реНрдХрд┐рдВрдЧ рдпреВрдирд┐рдЯ рд▓рдЯрдХрд╛ рд╣реБрдЖ рд╣реИ, рдореЗрд░реА рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЦреИрд░, рдареАрдХ рд╣реИ ... рдореИрдВрдиреЗ рдмреЗрд╣рддрд░ рд╕рдордп рддрдХ рдЗрд╕рдХреЗ рд╕рд╛рде рдирд┐рдХрдЯрддрд╛ рдХреЛ рд╕реНрдердЧрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрд╛рд░реНрдХрд┐рдВрдЧ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬрд░реВрд░рдд рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдЧреЗрдо рдлрдВрдХреНрд╢рди рд╣реИред
рд╕рднреА рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмреНрд▓реЙрдХ рдЖрд░реЗрдЦ рдорд┐рд▓рддреЗ рд╣реИрдВ:

рд╕реЛрдЪ
рдиреЗрд╡рд┐рдЧреЗрд╢рди рдпреВрдирд┐рдЯ рдХреЛ рдХреЗрд╡рд▓ рдХреБрдЫ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдерд╛, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдФрд░ рдЕрдзрд┐рдХ рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╕рдордЭ рдЧрдпрд╛ рдХрд┐ рд╡реЗ рд╕рд┐рд░ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рд╕рдВрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдорд░ рдЧрдпрд╛ред AVC-LAN рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпреЗ рдореЙрдбреНрдпреВрд▓ GVIF (рдЧрд┐рдЧрд╛рдмрд┐рдЯ рд╡реАрдбрд┐рдпреЛ рдЗрдВрдЯрд░рдлреЗрд╕) рд▓рд╛рдЗрди рд╕реЗ рднреА рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ, рдФрд░ рдХрдирд╡рд░реНрдЯрд░ рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ рдХрд╛ рдпрд╣реА рдЪреЗрд╣рд░рд╛ рдЧрд▓рддреА рд╕реЗ рдлрдЯ рд╕рдХрддрд╛ рд╣реИ, рдЕрдЧрд░ рдореИрдВ GVIF рдореЗрдВ рдПрдХ рд╡реАрдбрд┐рдпреЛ рд╕рд┐рдЧреНрдирд▓ рдХрдирд╡рд░реНрдЯрд░ 100% рд╕реЗ рдЕрдзрд┐рдХ рдХреЗ рд▓рд┐рдП рдЦрд░реАрджрддрд╛ рд╣реВрдВред "рдмрд┐рдирд╛ рдЪреЗрд╣рд░реЗ рдХреЗ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди .. "- рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рдЧреАрдд рдХреЗ рдордХрд╕рдж рдкрд░ рдореЗрд░реЗ рд╕рд┐рд░ рдореЗрдВ рд▓рдЧ рд░рд╣рд╛ рдерд╛, рдФрд░ рдореБрдЭреЗ рдирд┐рд░реНрдгрдп рдкрд╕рдВрдж рдирд╣реАрдВ рдерд╛ред
рд░реЗрдбрд┐рдпреЛ рд░рд┐рд╕реАрд╡рд░ рдХреЗ рдмрдЬрд╛рдп рдЪреАрдиреА рд░реЗрдбрд┐рдпреЛ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд╕рд╛рде рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд╕рдорд╛рдзрд╛рди рдереЗред рдпрд╣ рдореБрдЭреЗ рд╢реЛрднрд╛ рдирд╣реАрдВ рджреЗрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рджреЛ рдкреНрд░рджрд░реНрд╢рди рдЕрдиреБрдЪрд┐рдд рдЕрддрд┐рд░реЗрдХ рд╣реИрдВред IMHOред
рдирд┐рд░реНрдгрдп
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЬрдиреНрдо рд╣реБрдЖ: рдкреВрд░реЗ рд╕рд┐рд░ рдХреЛ рдмрджрд▓реЗрдВ, рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рд░реЗрдбрд┐рдпреЛ рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдВ, рдЬрд┐рд╕рд╕реЗ рдкреНрд░рд┐рдпрд╕ рдХреЗ рд╕рд╛рде рджреЛрд╕реНрддреА рдХреА рдЬрд╛рдП:
- рдбрд┐рдЬрд╛рдЗрди USB <-> AVC-LAN рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХрдирд╡рд░реНрдЯрд░
- рдЗрд╕рдХреЗ рд▓рд┐рдП рдлрд░реНрдорд╡реЗрдпрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░реЗрдВ рддрд╛рдХрд┐ рдпрд╣ USB-HID рдХреА рддрд░рд╣ рдХрдиреЗрдХреНрдЯ рд╣реЛред
- рдЗрд╕реЗ рд╕рдордЧреНрд░ рдмрдирд╛рдПрдВ рддрд╛рдХрд┐ рдХрд┐рд╕реА рдПрдХ рдХрд╛рд░реНрдп рдХреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреАрдмреЛрд░реНрдб рдХреА рддрд░рд╣ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛ рд╕рдХреЗ (рддрд╛рдХрд┐ рдкреИрдирд▓ рдореЗрдВ рдмрдЯрди рд╕реЗ рдПрдХ рджреЗрд╢реА рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ)
- рджреЗрд╢реА, Priusovsky рдХреЗ рд╕рдорд╛рди (рдпрд╛ рд╢реНрд░реЗрд╖реНрда) рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ Android рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░реЗрдВ
- рд░рд┐рдпрд░ рдХреИрдорд░рд╛ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░реЗрдВ
- рдпрд╛рдВрддреНрд░рд┐рдХ рднрд╛рдЧ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░реЗрдВ (рдПрдХ рдирд┐рдпрдорд┐рдд рд╕реНрдерд╛рди рдкрд░ рд╕реНрдерд╛рдкрдирд╛)
рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ - рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реНрдирд┐рдлрд░, рддрд╛рдХрд┐ рдПрд╡реАрд╕реА-рд▓реИрди рдкрд░ рдкреИрдХреЗрдЯреЛрдВ рдХреЛ рдЙрд▓реНрдЯрд╛ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛред рдЙрд╕реА рд╕рдордп рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВред
рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

рдПрдХ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ, SM32F103 рдкрд░ рдПрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдмреЛрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

$ 2.05 рдХреЗ рд▓рд┐рдП AliExpress рдХреЗ рд╕рд╛рде рдСрд░реНрдбрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рдпрд╛ рдЦреЛрдЬ - рдмрд┐рдЧрд╛рдбрд╝рдиреЗ рд╡рд╛рд▓рд╛рд╢рд╛рдпрдж рд╡рд┐рдХреНрд░реЗрддрд╛ рджреНрд╡рд╛рд░рд╛ рдмрд╣реБрдд рдкрд╣рд▓реЗ рд╣реА рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрд▓реА рдкрд░ рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рджреБрдИ рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреЗрддрд╛ рд╣реВрдВ:
STM32F103C8T6 ARM STM32 рдиреНрдпреВрдирддрдо рд╕рд┐рд╕реНрдЯрдо рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдмреЛрд░реНрдб рдореЙрдбреНрдпреВрд▓
рдореБрдЭреЗ рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдкрд╕рдВрдж рд╣реИ:
- рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ USB рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдореЙрдбреНрдпреВрд▓ (рдбрд┐рд╡рд╛рдЗрд╕)
- рдирд┐рд░реНрдорд╛рддрд╛ рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рдпреВрдПрд╕рдмреА-рд╕реНрдЯреИрдХ (рдлрд╝реНрд░реАрд╕реНрдХреЗрд▓-рдУрд╡реНрд╕реНрдХреА рдХреЗ рд╡рд┐рдкрд░реАрдд, рд░рд╛рдд рддрдХ рдпрд╛рдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
- рдирд┐: рд╢реБрд▓реНрдХ GPIO рдкреЛрд░реНрдЯ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдореЙрдирд┐рдЯрд░ рдХреЗ рдХрд┐рдирд╛рд░реЛрдВ рдкрд░ рдирд┐рдпрдорд┐рдд рдмрдЯрди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдкреИрдирд▓ рдХреЗ рдиреАрдЪреЗ рд░реЗрдбрд┐рдпреЛ рдХреЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдмрдЯрди рдЫрд┐рдкрд╛рдПрдЧрд╛ред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╡рд╣ рдХреНрдпрд╛ рд╣реЛрдЧрд╛
- рдФрд░ рдЗрд╕ рдкрд░ рдЖрдк AVC-LAN рдХрдирд╡рд░реНрдЯрд░ рдХреЛ рддрд╛рд░реНрдХрд┐рдХ рд╕реНрддрд░ рдкрд░ рд▓рдЯрдХрд╛ рд╕рдХрддреЗ рд╣реИрдВ
рдореИрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдХреНрд░рдо рдореЗрдВ рдЖрдЧреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛, рдЬреЛ рдХрд┐ рдореЗрд░реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЬреНрдЮрд╛рди рдХреЗ рдХрд╛рд░рдг рд╣реИред рдпрд╛рдиреА рдореИрдВрдиреЗ рдЙрди рдЬрдЧрд╣реЛрдВ рдХреЛ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд┐рдирдореЗрдВ рд╡реЗ рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ рдирд╣реАрдВ рдереЗ, рдЕрдВрдд рдореЗрдВ рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред
рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдИ рд▓реЗрдЦ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣рдм рдореЗрдВ рдпреЛрдЬрдирд╛рдмрджреНрдз рд╣реИрдВред рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЬреНрдпрд╛рджрд╛ рдлреБрд▓рд╕реНрдЯреИрдХ рд╣реИ - рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХрдиреЗрдХреНрд╢рди рд╕реЗ рд▓реЗрдХрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддрдХред
рднрд╛рдЧ 2: рдПрдХ рдкрд╛рдпрд▓рдЯ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП USB, HID, рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдФрд░ рд╕рднреА
рдкрд╣рд▓рд╛ рдХрджрдо рдореИрдВ рдбрд┐рд╡рд╛рдЗрд╕ рдФрд░ рдлреЛрди рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдФрд░ рддрд╛рдХрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдкреИрдХреЗрдЯ рдХреЛ рдлреЛрди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХреЗ, рдФрд░ рд╡рд╣ - рдЗрд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдЬреИрд╕рд╛ рдХрд┐ рдЧрдЧрд╛рд░рд┐рди рдиреЗ рдХрд╣рд╛: рдЪрд▓реЛ рдЪрд▓реЗрдВ!
STM32 рдкрд░ USB HID рдХрдореНрдкреЛрдЬрд┐рдЯ рдбрд┐рд╡рд╛рдЗрд╕
рдореИрдВрдиреЗ рдЬреЛ рднреА рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд╡рд╣ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдПрд╕рдЯреА рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рдПрдХ рдпреВрдПрд╕рдмреА рдбрд┐рд╡рд╛рдЗрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛ рдЬреЛ рдХрд┐ рдХреАрдмреЛрд░реНрдб рдХреЗ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдореЗрдЬрдмрд╛рди рджреНрд╡рд╛рд░рд╛ рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реИ рдФрд░ "рдХреБрдЫ рдФрд░" - рд░реЙ рдЫрд┐рдкрд╛рдИ рдбрд┐рд╡рд╛рдЗрд╕ред рдкрд╣рд▓рд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдХрд╣рд╛ рдерд╛, рджреЗрд╢реА рдПрдВрдбреНрд░реЙрдЗрдб рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИ, рджреВрд╕рд░рд╛ - рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╕рд╛рде рдПрд╡реАрд╕реА-рд▓реИрди рдкреИрдХреЗрдЯ рдХреЗ рд╕реАрдзреЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЗ рд▓рд┐рдПред
STM рдХреЗ CubeMX рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдФрд░ рдХрд╕реНрдЯрдо HID рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдПрдХ рдЕрдкреНрд░рд┐рдп рдмрд╛рдд рдорд┐рд▓реА: рдХрдВрдкреЛрдЬрд┐рдЯ рдбрд┐рд╡рд╛рдЗрд╕ рдмрдирд╛рдиреЗ рдХрд╛ рдореБрджреНрджрд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдиреБрдкрд╕реНрдерд┐рдд рдпрд╛ рдмрд╣реБрдд рджреБрд░реНрд▓рдн рд╣реИред
рд╕реЛрд░реНрд╕ рдХреЛрдб рдмрд╛рдж рдореЗрдВ рд╣реЛрдВрдЧреЗрдореИрдВ рдЕрднреА рддрдХ рд╕реНрд░реЛрдд рдХреЛрдб рдЕрдкрд▓реЛрдб рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЕрдм рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ-рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдореЛрдб рдореЗрдВ рд▓рд╛рдЧреВ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИред рдпрджрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░реА рд╣реЛ рдЧрдИ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдЧреАрдердм рдкрд░ рдЦреАрдВрдЪреЗрдВ рдФрд░ рд▓реЗрдЦ рдХреЛ рдЙрдирдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред
рдЬрд┐рд╕ рд░реВрдк рдореЗрдВ рд╡реЗ рд╣реИрдВ, рдЙрд╕реЗ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ - рдореЗрд░реЗ рдмрд┐рдирд╛ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдкрд░реНрдпрд╛рдкреНрдд рдЧрдбрд╝рдмрдбрд╝ рд╣реИред
USB, рд╕рдордЧреНрд░, рдЫрд┐рдкрд╛рдИ
рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдмрд╕ рдХреБрдЫ рд╢рдмреНрджред рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдпреВрдПрд╕рдмреА рдорд╛рдирдХ рдХреЗ рд╕рд╛рде рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдкрд╣рд▓реЗ рд╕реЗ рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░рдирд╛ рдФрд░ CubeMX рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ:
рдПрд╕рдЯреАрдПрдо рдпреВрдПрд╕рдмреА рд╕реНрдЯреИрдХ рдФрд░ рдорд╛рдЙрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЙрджрд╛рд╣рд░рдгред рд╡рд╣рд╛рдВ рд╣рдордиреЗ рдХреБрдЫ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдФрд░ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рд╣реИрдВред рдпрд╣ рдкреВрд░реЗ рдЙрдкрдХрд░рдг рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 0x00 рдФрд░ 0x80 рдХреА рдЬреЛрдбрд╝реА рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реИред
рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдХреАрдмреЛрд░реНрдб рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреА рджреНрд╡рд┐-рджрд┐рд╢рд╛рддреНрдордХ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рдХреНрдпреЛрдВ - рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИ) рдФрд░ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдЬреЛ рдХрд┐ рджреВрд╕рд░реЗ рд░реЙ-рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝реЗрдВред
рд╣рдо рд╡рд┐рд╡рд░рдгрдХрд░реНрддрд╛ рдХреЛ OUT рдмрд┐рдВрджреБ рдЬреЛрдбрд╝рдХрд░ рдмрд┐рдВрджреБ рдХреЛ рджреНрд╡рд┐рджрд┐рд╢ рдмрдирд╛рддреЗ рд╣реИрдВ:
рд╡рд┐рдиреНрдпрд╛рд╕ рд╡рд┐рд╡рд░рдгрдХредрдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЕрдиреБрдХреНрд░рдорд┐рдд рдФрд░ рдЖрдХрд╛рд░реЛрдВ рдкрд░ рдирдЬрд╝рд░ рд░рдЦреЗрдВред
(2c5cf968121f0d8fa43a6755c09e15ef3a317791):
0x07, USB_DESC_TYPE_ENDPOINT, HID_EPOUT_ADDR, 0x03, HID_EPOUT_SIZE, 0x00, HID_FS_BINTERVAL,
рдФрд░ рдХреБрдЫ рдФрд░ рдмрд┐рдВрджреБ рдЬреЛрдбрд╝реЗрдВ:
рд╡рд┐рдиреНрдпрд╛рд╕ рд╡рд┐рд╡рд░рдгрдХ(Bc2bd583c98715e106fcb3ab07b266bc9221be36):
0x07, USB_DESC_TYPE_ENDPOINT, HID_EPIN_ADDR2, 0x03, HID_EPIN_SIZE, 0x00, HID_FS_BINTERVAL, 0x07, USB_DESC_TYPE_ENDPOINT, HID_EPOUT_ADDR2, 0x03, HID_EPOUT_SIZE, 0x00, HID_FS_BINTERVAL,
рдпрд╣ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдерд╛ред рдЕрдм рдореЗрдЬрдмрд╛рди рдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛ рд╕рдордЧреНрд░ рдЫрд┐рдкрд╛рдИ рдбрд┐рд╡рд╛рдЗрд╕ рд╣реИ, рдФрд░ рдЖрдк рдЗрди рд╕рднреА рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдбреЗрдЯрд╛ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд╣реИ рдирд╣реАрдВред
рдЗрд╕реЗ рд╕рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
1. рд╣рдорд╛рд░реЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдкрд╛рд╕ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рд╕реНрдореГрддрд┐ рдХрд╛ рдЯреБрдХрдбрд╝рд╛ рд╣реИ рдЬрд┐рд╕реЗ CAN рдФрд░ USB рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ USB рдореЙрдбреНрдпреВрд▓ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛ рдкреИрдХреЗрдЯ рдкреНрд░рд╛рдкреНрдд / рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд▓рдЧрд╛ рд╣реБрдЖ рд╣реИ, рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдХреЗ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рдмрдлрд╝рд░реНрд╕ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
USBD_LL_Init usbd_conf.c рдлрд╝рд╛рдЗрд▓ рдореЗрдВ HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x00 , PCD_SNG_BUF, 0x18); HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x80 , PCD_SNG_BUF, 0x58); HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , HID_EPOUT_ADDR , PCD_SNG_BUF, 0x100); HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , HID_EPIN_ADDR , PCD_SNG_BUF, 0x140); HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , HID_EPOUT_ADDR2 , PCD_SNG_BUF, 0x180); HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , HID_EPIN_ADDR2 , PCD_SNG_BUF, 0x1B0);
рдмрдлрд╝рд░ рдкрддреЗ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реИрдВ, рдпрджрд┐ рдХреЗрд╡рд▓ рд╡реЗ рдУрд╡рд░рд▓реИрдк рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред
рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рдПрд╕рдЯреА рд╕реНрдЯреИрдХ рдХреЛ рдЗрд╕ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рджреНрд╡рд┐-рджрд┐рд╢рд╛рддреНрдордХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕реНрдЯреИрдХ рдХреЛ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВрдЧреЗ:
рд╕реНрдерд╛рдирд╛рдВрддрд░рдг
USBD_HID_SendReport рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдирд╛рдо USBD_HID_SendReportEP рдореЗрдВ рд░рдЦреЗрдВ, рдПрдХ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ - рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рд╕рдВрдЦреНрдпрд╛ред рд╣рдо рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП рдкреБрд░рд╛рдиреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╢рд░реАрд░ рдореЗрдВ рд╣рдо рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рд╕рд╛рде USBD_HID_SendReportEP рдХрд╣рддреЗ рд╣реИрдВред рд╕рдорд╛рдзрд╛рди рдЕрднреА рднреА рд╕рдмрд╕реЗ рд╕реМрдВрджрд░реНрдпрд╡рд╛рджреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдпрд╣ рд░рд╣рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
usbd_hid.c uint8_t USBD_HID_SendReportEP (USBD_HandleTypeDef *pdev, uint8_t ep, uint8_t *report, uint16_t len) { ... , USBD_HID_SendReport } uint8_t USBD_HID_SendReport (USBD_HandleTypeDef *pdev, uint8_t *report, uint16_t len) { return USBD_HID_SendReportEP(pdev,HID_EPIN_ADDR,report,len); }
рдЕрдм рд╕рдм рдХреБрдЫ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рд╕рд╣реА рд╕рдордп рдкрд░ рд░рд╣рддрд╛ рд╣реИред
рдЕрдВрддрд┐рдо рд░реВрдк рджрд┐рдпрд╛ рдЬрд╛
рдСрд░реНрдбрд░ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ USBD_LL_CloseEP рдХреЛ рдлрд┐рд░ рд╕реЗ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдирдП рдмрдирд╛рдП рдЧрдП рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЗ рд▓рд┐рдПред
рд╕реНрд╡рд╛рдЧрдд
рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдХреЛ рдиреИрддрд┐рдХ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрдирдХреЗ рд▓рд┐рдП USBD_LL_PrepareReceive рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рдкрд╛рдардХ рдХреЛ рдЗрд╕ рд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЦреЛрдЬ рдкрд░ рдЬрд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдФрд░ рдЗрди рдХреЙрд▓ рдХреЛ рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрдХреВрд▓ рдмрдирд╛рддрд╛ рд╣реВрдВред
рдореБрдЭреЗ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдпрд╣ рдмрджрд╕реВрд░рдд рдХрдЯрд▓рдлрд╝рд┐рд╢ рдорд┐рд▓рд╛:
usbd_core.c USBD_LL_PrepareReceive(pdev, HID_EPOUT_ADDR+(epnum&0x7F)-1 , hhid->Report_buf, USBD_HID_OUTREPORT_BUF_SIZE);
рдпрд╛рдиреА рдореИрдВ рдЗрд╕ рддрдереНрдп рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рд╛ рдХрд┐ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБрдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЪрд▓рддреА рд╣реИред рдпрд╣ рдЦрд░рд╛рдм рд╣реИ, IMHOред рдРрд╕рд╛ рди рдХрд░реЗрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрд╕рдЯреА рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рд╡рд╣ рд╕рдм рдХреБрдЫ рдЬреЛ usbd_hid.c рдлрд╝рд╛рдЗрд▓ рдкрд░ рдЬрд╛рдирд╛ рд╣реИ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ USBD_HID_DataOut рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдЬрд╛рдирд╛ рд╣реИ, рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЙрд▓ рд╕реБрдВрджрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡рд┐рдЪрд╛рд░реЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдореИрдВ рдмрд╣реБрдд рд╕рдлрд▓ рдирд╣реАрдВ рд╣реБрдЖ, рдЗрд╕рд▓рд┐рдП рдХреЛрдб рдФрд░ рд╡рд┐рд╡рд░рдг рд▓рдВрдмреЗ рдФрд░ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛрдВрдЧреЗред рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред
рд░рд┐рдкреЛрд░реНрдЯ
рд╕рдм рдХреБрдЫ, рдЗрд╕ рдЬрдЧрд╣ рдореЗрдВ рд╣рдореЗрдВ рдПрдХ рд╕рдордЧреНрд░ рдЙрдкрдХрд░рдг рдорд┐рд▓рд╛ рдЬреЛ рджреЛ рджреНрд╡рд┐рджрд┐рд╢ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред рдЖрдЦрд┐рд░реА рд╕реНрдЯреНрд░реЛрдХ рдореЗрдВ, рд╣рдордиреЗ HID рдбреНрд░рд╛рдЗрд╡рд░ рдХреА рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рдХреЛ "рдмрдВрдж" рдХрд░ рджрд┐рдпрд╛, рдЗрд╕ рддрд░рд╣ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реБрдП:
__ALIGN_BEGIN static uint8_t HID_ReportDesc2[33] __ALIGN_END = { 0x06, 0x00, 0xff,
рдпрд╣ рд░рд┐рдкреЛрд░реНрдЯ HID рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдмрддрд╛рддреА рд╣реИ: рдХреБрдЫ 31 рдмрд╛рдЗрдЯ рдбреЗрдЯрд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рдХреНрдпрд╛ рд╣реИрдВ - рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдЙрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рджреЗрдВ, рдЬрд┐рд╕рдиреЗ рдЗрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдЦреЛрд▓рд╛ рд╣реИред рдПрдХ рднреМрддрд┐рдХ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ, рд╢реВрдиреНрдп рдмрд╛рдЗрдЯ рд░рд┐рдкреЛрд░реНрдЯ рдЗрдВрдбреЗрдХреНрд╕ (REPORT_ID (2)) рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧреАред рдЗрд╕ рд╣рд┐рд╕рд╛рдм рд╕реЗ рдХреБрд▓ 32 рдмрд╛рдЗрдЯ рдЖрдПрдВрдЧреАред
рдФрд░ usbd-hid.c, рдлрд╝рдВрдХреНрд╢рди USBD_HID_Setup рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рджрд░реНрдЬ рдХрд░реЗрдВред
usbd-hid.c switch (req->bRequest) { case USB_REQ_GET_DESCRIPTOR: if( req->wValue >> 8 == HID_REPORT_DESC) {
рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдЖрдЧреЗ:
- рдПрд╡реАрд╕реА-рд▓реИрди рд▓реЙрдЬрд┐рдХ рд╕реНрддрд░ рдХрдирд╡рд░реНрдЯрд░ рдХреА рд╡рд┐рдзрд╛рдирд╕рднрд╛, рдФрд░ рдмреЛрд░реНрдб рд╕реЗ рдХрдиреЗрдХреНрд╢рдиред рдПрд╡реАрд╕реА-рд▓реИрди рдХреА рднреМрддрд┐рдХ рдкрд░рдд рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрд░рдВрдЧред
- рдирд┐рдпрдВрддреНрд░рдХ рд╕реНрддрд░ рдкрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдФрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рдкреИрдХреЗрдЯ рднреЗрдЬрдирд╛
- рдПрдВрдб-рдЯреВ-рдПрдВрдб рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ Priusред рдкреИрдХреЗрдЬ рд╕реНрдирд┐рдлрд░ (рдпрд╛ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдПрдВрдбреНрд░реЙрдЗрдб рдРрдк)
рдкреБрдирд╢реНрдЪ
- рдореИрдВрдиреЗ рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ (рд▓рдЧрднрдЧ), рдпрд╣ рдЖрд╢реНрд╡рд╕реНрдд рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдЗрд╕реЗ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдореИрдВ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдХреБрдЫ рдирд╡реАрдирддрдо рдЬрд╛рдирдХрд╛рд░реА рдХрд┐рд╕реА рдХреЛ "рдХрдЪреНрдЪреЗ" рддрд░реАрдХреЗ рд╕реЗ рднреА рдорджрдж рдХрд░ рд╕рдХрддреА рд╣реИрдВред
- рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЖрд▓реЛрдЪрдирд╛ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЦреБрдж рдЕрднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд▓реНрдкрдирд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
- рд▓реЗрдЦ, рдбрд┐рдЬрд╛рдЗрди, рдкреНрд░рд╕реНрддреБрддрд┐ рдХреА рдЖрд▓реЛрдЪрдирд╛ - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рд▓реЗрдЦ рд╣реИред рдХрд╛рдо рдХреА рдирд┐рд░рдВрддрд░рддрд╛ рдХреЗ рд╕рд╛рде, рдореИрдВ рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рд╕реБрдЧрдо рд░реВрдк рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛