{"id":208026,"date":"2014-01-03T00:28:03","date_gmt":"2014-01-02T20:28:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=208026"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=208026","title":{"rendered":"<span class=\"post_title\">STM32 \u0438 USB-HID \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t\u041d\u0430 \u0434\u0432\u043e\u0440\u0435 2014 \u0433\u043e\u0434, \u0430 \u0434\u043b\u044f \u0441\u0432\u044f\u0437\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u0441 \u041f\u041a \u0441\u0430\u043c\u044b\u043c \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442. \u0421 \u043d\u0438\u043c \u043b\u0435\u0433\u043a\u043e \u043d\u0430\u0447\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043e\u043d \u0434\u043e \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0441\u0442 \u0432 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0438 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0442\u043e\u043a \u0431\u0430\u0439\u0442.<br \/>  \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u0441\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u044b \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u043b\u0438 COM \u043f\u043e\u0440\u0442 \u0438\u0437 \u0441\u043e\u0441\u0442\u0430\u0432\u0430 \u041f\u041a \u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c USB-UART \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u0438\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0432\u043e\u0435\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u043d\u0430 \u041c\u041a. \u041d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u043d \u0435\u0441\u0442\u044c \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439. \u041d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0442\u0430\u043a\u043e\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u0438\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e \u0438\u0437-\u0437\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430\u043c\u0438. \u0415\u0441\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438.<br \/>  \u041d\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0445\u043e\u0434\u0438\u0442 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440 \u043e \u0442\u043e\u043c, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c USB \u0438\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442, \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043a\u043b\u043e\u043d\u043d\u0438\u043a\u043e\u0432 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b UART. \u0418 \u0443 \u043d\u0438\u0445 \u0435\u0441\u0442\u044c \u043d\u0430 \u0442\u043e \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f. \u041e\u0434\u043d\u0430\u043a\u043e, \u0445\u043e\u0440\u043e\u0448\u043e \u0432\u0435\u0434\u044c \u0438\u043c\u0435\u0442\u044c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0443?<br \/>  <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/6b1\/512\/75d\/6b151275d8392a0eefe1c90524bebded.jpg\"\/><br \/>  \u041c\u0435\u043d\u044f \u0434\u0430\u0432\u043d\u043e \u043f\u0440\u043e\u0441\u0438\u043b\u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u043d\u044b\u0439 \u043e\u0431\u043c\u0435\u043d \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043c\u0435\u0436\u0434\u0443 \u041f\u041a \u0438 \u041c\u041a \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 STM32F103. \u042f \u0434\u0430\u043c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043a\u0430\u043a \u0435\u0433\u043e \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0441\u0432\u043e\u0438\u0445 \u043d\u0443\u0436\u0434. \u0410 \u0443\u0436 \u0432\u044b \u0441\u0430\u043c\u0438 \u0440\u0435\u0448\u0438\u0442\u0435 \u2014 \u043d\u0443\u0436\u043d\u043e \u043e\u043d\u043e \u0432\u0430\u043c \u0438\u043b\u0438 \u043d\u0435\u0442.<\/p>\n<p>  \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u043b\u0430\u0442\u0430 \u0441 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u043d\u0435\u0434\u043e\u0440\u043e\u0433\u0438\u043c \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c STM32F103C8 \u0441\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 USB, \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u043e \u043d\u0435\u0439 \u0440\u0430\u043d\u0435\u0435<br \/>  <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/ee0\/b51\/3ab\/ee0b513ab61780097991d4b56e1f48a8.jpg\"\/><br \/>  <a name=\"habracut\"><\/a><br \/>  \u042f \u0441\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u0443 <b>\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0442\u0430<\/b> \u0435\u0441\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438:<br \/>  -\u0447\u0430\u0441\u0442\u043e COM \u043f\u043e\u0440\u0442 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u041f\u041a \u0438\u043b\u0438 \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0435<br \/>  -\u043f\u0438\u0442\u0430\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e<br \/>  -\u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 COM \u043f\u043e\u0440\u0442\u0430 \u0432 \u041f\u041a \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0443\u0440\u043e\u0432\u043d\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432: \u041f\u041a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 RS232 \u0441 \u0434\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0443\u0440\u043e\u0432\u043d\u044f\u043c\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 +15\u0412 \u0438 -15\u0412, \u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u2014 TTL \u0443\u0440\u043e\u0432\u043d\u0438 (+5\u0412, +3.3\u0412, \u0443\u043d\u0438\u043f\u043e\u043b\u044f\u0440\u043d\u044b\u0435).<br \/>  -\u0447\u0430\u0441\u0442\u043e \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 COM \u043f\u043e\u0440\u0442\u043e\u0432 \u0438 \u043d\u0430\u0439\u0442\u0438 \u0442\u043e\u0442 \u043f\u043e\u0440\u0442, \u0447\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u0430\u0448\u0435\u043c\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u043e.<br \/>  \u0412 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c <b>USB<\/b> \u0441 \u043d\u0430\u043c\u0438 \u0443\u0436\u0435 \u043c\u043d\u043e\u0433\u0438\u0435 \u0433\u043e\u0434\u044b \u0438 \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0438 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430:<br \/>  -\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u0430\u0447\u0438 \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u043e\u0442 HOST \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430<br \/>  -\u0423\u0434\u043e\u0431\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u043d\u043e\u0433\u043e \u043e\u0431\u043c\u0435\u043d\u0430<br \/>  -\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u043c\u0438<br \/>  -\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430<br \/>  -\u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u041c\u041a, \u0447\u0442\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432<br \/>  \u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b USB \u0447\u0440\u0435\u0437\u0432\u044b\u0447\u0430\u0439\u043d\u043e \u0431\u043e\u0433\u0430\u0442\u044b\u0439, \u043d\u043e \u044d\u0442\u043e \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u2014 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e, \u043a\u0430\u043a \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c. \u0415\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u2014 USB-HID, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u0432, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u043c \u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430. \u0418\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0431\u043c\u0435\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0441 \u041c\u041a. \u041b\u0438\u0447\u043d\u043e \u043c\u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u043f\u0430\u043a\u0435\u0442\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u043e\u0431\u043c\u0435\u043d\u0430. \u042d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u0430\u044f \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0449\u0435 \u0438 \u0443\u0434\u043e\u0431\u043d\u0435\u0435, \u0447\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u043f\u043e\u0442\u043e\u043a\u043e\u043c \u0431\u0430\u0439\u0442.<\/p>\n<h4>\u0412\u044b\u0431\u043e\u0440 \u043f\u0440\u043e\u0444\u0438\u043b\u044f HID<\/h4>\n<p>  USB-HID \u2014 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043e\u0431\u0448\u0438\u0440\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c.<br \/>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u044e \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b, \u043c\u044b\u0448\u0438, \u0434\u0436\u043e\u0439\u0441\u0442\u0438\u043a\u0430 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0432\u0432\u043e\u0434\u0430, \u0430 \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0432\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0436\u0435\u0441\u0442\u043a\u0438\u0445 \u0440\u0430\u043c\u043e\u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 \u0438 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0441 \u041f\u041a.<br \/>  \u042f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043a\u0430\u043a c\u0434\u0435\u043b\u0430\u0442\u044c <b>Custom HID<\/b> device. \u042d\u0442\u043e \u0434\u0430\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0432\u043e\u0431\u043e\u0434\u0443. \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0437\u0430\u0442\u044f\u0433\u0438\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e, \u043f\u043e\u0441\u0442\u0430\u0440\u044e\u0441\u044c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043a\u0440\u0430\u0442\u043a\u043e \u2014 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0439 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 \u0432 \u0441\u0435\u0442\u0438 \u0438 \u0431\u0435\u0437 \u043c\u0435\u043d\u044f \u043c\u043d\u043e\u0433\u043e, \u043d\u043e \u043b\u0438\u0447\u043d\u043e \u043c\u043d\u0435 \u043e\u043d\u0438 \u0441\u043b\u0430\u0431\u043e \u043f\u043e\u043c\u043e\u0433\u043b\u0438, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c \u0440\u0435\u0448\u0438\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443.<\/p>\n<h4>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/h4>\n<p>  \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e <a href=\"http:\/\/ravenium.ru\/emblocks-ide\/\">EmBlocks<\/a> \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043e\u0434 STM32. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u0443\u044e \u0443\u0434\u043e\u0431\u043d\u0443\u044e \u0441\u0440\u0435\u0434\u0443, \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<br \/>  \u041a <a href=\"http:\/\/ravenium.ru\/stm32-emblocks-\u043c\u0438\u0433\u0430\u0435\u043c-\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c\/\">\u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435<\/a> \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b:  <\/p>\n<ul>\n<li>\u041f\u0430\u043f\u043a\u0430 <b>USB-FS<\/b> \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u00abSTM32F10x, STM32L1xx and STM32F3xx USB-FS-Device Driver\u00bb \u0432\u0435\u0440\u0441\u0438\u0438 4.0.0.<\/li>\n<li>\u0412 \u043f\u0430\u043f\u043a\u0430\u0445 Inc \u0438 Src \u0444\u0430\u0439\u043b\u044b: <br \/>   <b>platform_config.h<\/b> \u2014 \u0437\u0434\u0435\u0441\u044c \u0441\u043e\u0431\u0440\u0430\u043d\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f, \u043a\u0430\u0441\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u044b \u0438 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430 \u041c\u041a<br \/>   <b>stm32_it.h, stm32_it.c<\/b> \u2014 \u0437\u0434\u0435\u0441\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439<br \/>   <b>usb_conf.h, usb_endp.c<\/b> \u2014 \u0437\u0434\u0435\u0441\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 (Endpoint), \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u0438\u0445 \u0431\u0443\u0444\u0435\u0440\u043e\u0432, \u0444\u0443\u043d\u043a\u0446\u0438\u0438-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438<br \/>   <b>usb_desc.h, usb_desc.c<\/b> \u2014 \u0437\u0434\u0435\u0441\u044c \u0441\u043e\u0431\u0440\u0430\u043d\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438 \u043e \u0441\u0430\u043c\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u2014 \u043a\u0430\u043a \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043a \u041f\u041a \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0438 \u0444\u043e\u0440\u043c\u0430\u0442 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445<br \/>   <b>hw_config.c<\/b> \u2014 \u0437\u0434\u0435\u0441\u044c \u0441\u043e\u0431\u0440\u0430\u043d\u0430 \u0432\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u041f\u041a<br \/>   <b>hw_config.h, usb_istr.h, usb_prop.h, usb_pwr.h<\/b><br \/>  <b> usb_istr.c, usb_prop.c, usb_pwr.c<\/b> \u2014 \u043d\u0443\u0436\u043d\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b USB-FS \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043d\u043e \u043b\u0435\u0437\u0442\u044c \u0432 \u043d\u0438\u0445 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e<\/li>\n<\/ul>\n<p>  \u0412\u0441\u0435 \u044d\u0442\u0438 \u0444\u0430\u0439\u043b\u044b \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043b\u044e\u0431\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439 USB.  <\/p>\n<h4>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f USB<\/h4>\n<p>  \u0414\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b USB \u043c\u043e\u0434\u0443\u043b\u044f \u0432\u0430\u0436\u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u041c\u041a. \u0414\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 USB. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0432\u0430\u0440\u0446\u0435\u0432\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u0430 8\u041c\u0413\u0446 \u0438 \u041c\u041a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 72\u041c\u0413\u0446, \u0430 USB \u043c\u043e\u0434\u0443\u043b\u044c \u043d\u0430 48\u041c\u0413\u0446.<br \/>  \u0412 main.c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">main.c<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">\/* Includes ------------------------------------------------------------------*\/ #include &quot;hw_config.h&quot; #include &quot;usb_lib.h&quot; #include &quot;usb_pwr.h&quot;  \/* Private variables ---------------------------------------------------------*\/ __IO uint8_t PrevXferComplete = 1;  int main(void) {   Set_System();    USB_Interrupts_Config();    Set_USBClock();    USB_Init();     while (1)   {      if (bDeviceState == CONFIGURED)     {       if (PrevXferComplete)       {         RHIDCheckState();       }     }   } } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <b>Set_System()<\/b> \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0438\u043d\u0430 \u043f\u043e\u0434\u0442\u044f\u0436\u043a\u0438 \u043b\u0438\u043d\u0438\u0438 D+ \u043a \u043f\u0438\u0442\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\/\u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043e\u0442 \u041f\u041a (\u0432 \u043d\u0430\u0448\u0435\u0439 \u043f\u043b\u0430\u0442\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f), \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u044b \u0438 \u043a\u043d\u043e\u043f\u043a\u0438 \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<br \/>  \u0412 <b>USB_Interrupts_Config()<\/b> \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430 \u041c\u041a (\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f F10x, F37x, L1x).<br \/>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f <b>USB_Init()<\/b> \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 USB \u043c\u043e\u0434\u0443\u043b\u044f. \u0415\u0441\u043b\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 USB, \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0439\u0442\u0435 \u044d\u0442\u0443 \u0441\u0442\u0440\u043e\u043a\u0443.<br \/>  \u0414\u0430\u043b\u0435\u0435 \u0432 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f, \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043b\u0438 \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c USB \u043c\u043e\u0434\u0443\u043b\u044c \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043a \u041f\u041a. \u0415\u0441\u043b\u0438 \u0432\u0441\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0432\u0435\u0440\u043d\u043e \u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u043e\u0441\u044c, \u041f\u041a \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u0438 \u043d\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u044d\u043d\u0435\u0440\u0433\u043e\u0441\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0438\u044f, \u0442\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 CONFIGURED.<br \/>  \u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f, \u0431\u044b\u043b\u0430 \u043b\u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u041f\u041a \u0438 \u0435\u0441\u043b\u0438 \u0434\u0430, \u0442\u043e \u0433\u043e\u0442\u043e\u0432\u0438\u0442\u0441\u044f \u043a \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0435 \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <b>RHIDCheckState()<\/b><\/p>\n<h4>\u0420\u0430\u0437\u043c\u0435\u0440 \u043f\u0430\u043a\u0435\u0442\u0430 \u0438 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438<\/h4>\n<p>  USB-HID \u0434\u0435\u0432\u0430\u0439\u0441 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u0430\u043c \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443, \u0442.\u043a. \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0446\u0438\u0435\u0439 \u0448\u0438\u043d\u044b \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f host \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u2014 \u041f\u041a. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 USB \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u043c\u044b \u043f\u0438\u0448\u0435\u043c, \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e. \u041f\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043e\u043f\u0440\u043e\u0441\u0430 \u2014 1\u043a\u0413\u0446 \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u0430 \u0440\u0430\u0437 \u043f\u0430\u043a\u0435\u0442\u0430 \u2014 64 \u0431\u0430\u0439\u0442\u0430. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u2014 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u0435\u0436\u0438\u043c\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u2014 \u0432\u0440\u043e\u0434\u0435 USB bulk, \u043d\u043e \u0442\u0430\u043c \u0443\u0436\u0435 \u0431\u0435\u0437 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u0432 \u043d\u0435 \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c.<br \/>  \u0417\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u041f\u041a \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 3 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0414\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">\/* USB Standard Device Descriptor *\/ const uint8_t RHID_DeviceDescriptor[RHID_SIZ_DEVICE_DESC] =   { \t\t    RHID_SIZ_DEVICE_DESC,         \/\/ \u043e\u0431\u0449\u0430\u044f \u0434\u043b\u0438\u043d\u0430 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445 \t\t    USB_DEVICE_DESCRIPTOR_TYPE, \/\/ bDescriptorType - \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u044d\u0442\u043e \u0437\u0430 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 - Device descriptor \t\t    0x00, 0x02,                 \/\/ bcdUSB - \u043a\u0430\u043a\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 USB \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e. 2.0  \t\t\t\/\/ \u043a\u043b\u0430\u0441\u0441, \u043f\u043e\u0434\u043a\u043b\u0430\u0441\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b, \u043f\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0443 USB. \u0423 \u043d\u0430\u0441 \u043d\u0443\u043b\u0438, \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0441\u0430\u043c \u0437\u0430 \u0441\u0435\u0431\u044f \t\t    0x00,                       \/\/bDeviceClass \t\t    0x00,                       \/\/bDeviceSubClass \t\t    0x00,                       \/\/bDeviceProtocol  \t\t    0x40,                       \/\/bMaxPacketSize - \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0434\u043b\u044f Endpoint 0 (\u043f\u0440\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438)  \t\t\t\/\/ \u0442\u0435 \u0441\u0430\u043c\u044b\u0435 \u043f\u0440\u0435\u0441\u043b\u043e\u0432\u0443\u0442\u044b\u0435 VID \u0438 PID,  \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0436\u0435 \u044d\u0442\u043e \u0437\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e. \t\t    0x83, 0x04,                 \/\/idVendor (0x0483) \t\t    0x11, 0x57,                 \/\/idProduct (0x5711)  \t\t    DEVICE_VER_L, DEVICE_VER_H,                 \/\/ bcdDevice rel. DEVICE_VER_H.DEVICE_VER_L  \u043d\u043e\u043c\u0435\u0440 \u0440\u0435\u043b\u0438\u0437\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430  \t\t\t\/\/ \u0434\u0430\u043b\u044c\u0448\u0435 \u0438\u0434\u0443\u0442 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0441\u0442\u0440\u043e\u043a, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f, \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0438 \u0441\u0435\u0440\u0438\u0439\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440. \t\t\t\/\/ \u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u0434\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \t\t\t\/\/ \u0410 \u043f\u043e \u0441\u0435\u0440\u0438\u0439\u043d\u043e\u043c\u0443 \u043d\u043e\u043c\u0435\u0440\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c VID\/PID \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439. \t\t    1,                          \/\/Index of string descriptor describing manufacturer \t\t    2,                          \/\/Index of string descriptor describing product \t\t    3,                          \/\/Index of string descriptor describing the device serial number \t\t    0x01                        \/\/ bNumConfigurations - \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439. \u0423 \u043d\u0430\u0441 \u043e\u0434\u043d\u0430.   }   ; \/* CustomHID_DeviceDescriptor *\/ <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0412 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u0432\u0441\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 DEVICE_VER_L, DEVICE_VER_H \u2014 \u044d\u0442\u043e \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0438\u0437 usb_desc.h, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u043b\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0432\u0435\u0440\u0441\u0438\u0438 \u0441\u0432\u043e\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0414\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 (\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">\/* USB Configuration Descriptor *\/ \/*   All Descriptors (Configuration, Interface, Endpoint, Class, Vendor *\/ const uint8_t RHID_ConfigDescriptor[RHID_SIZ_CONFIG_DESC] =   { \t\t    0x09, \t\t\t\/\/ bLength: \u0434\u043b\u0438\u043d\u0430 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \t\t    USB_CONFIGURATION_DESCRIPTOR_TYPE, \/\/ bDescriptorType: \u0442\u0438\u043f \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430 - \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \t\t    RHID_SIZ_CONFIG_DESC, 0x00, \/\/ wTotalLength: \u043e\u0431\u0449\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u0441\u0435\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u043f\u043e\u0434 \u0434\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445  \t\t    0x01,         \/\/ bNumInterfaces: \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u0438\u043d \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \t\t    0x01,         \/\/ bConfigurationValue: \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \t\t    0x00,         \/\/ iConfiguration: \u0438\u043d\u0434\u0435\u043a\u0441 \u0441\u0442\u0440\u043e\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u044d\u0442\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \t\t    0xE0,         \/\/ bmAttributes: \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0438\u0442\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0448\u0438\u043d\u044b USB \t\t    0x32,         \/\/ MaxPower 100 mA: \u0438 \u0435\u043c\u0443 \u0445\u0432\u0430\u0442\u0438\u0442 100 \u043c\u0410  \t\t\t\t\/************** \u0414\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 ****************\/ \t\t\t\t0x09,         \/\/ bLength: \u0440\u0430\u0437\u043c\u0435\u0440 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \t\t\t\tUSB_INTERFACE_DESCRIPTOR_TYPE, \/\/ bDescriptorType: \u0442\u0438\u043f \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430 - \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \t\t\t\t0x00,         \/\/ bInterfaceNumber: \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 - 0 \t\t\t\t0x00,         \/\/ bAlternateSetting: \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0443 \u043d\u0430\u0441 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \t\t\t\t0x02,         \/\/ bNumEndpoints - \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u043e\u0432.  \t\t\t\t0x03,         \/\/ bInterfaceClass: \u043a\u043b\u0430\u0441\u0441 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0441\u0430 - HID \t\t\t\t\/\/ \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u043a\u043e\u0441\u0438\u043b\u0438 \u043f\u043e\u0434 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0443 \u0438\u043b\u0438 \u043c\u044b\u0448\u044c, \u0442\u043e \u043d\u0430\u0434\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043a\u043b\u0430\u0441\u0441 \u0438 \u043f\u043e\u0434\u043a\u043b\u0430\u0441\u0441 \t\t\t\t\/\/ \u0430 \u0442\u0430\u043a \u0443 \u043d\u0430\u0441 \u043e\u0431\u0449\u0435\u0435 HID-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \t\t\t\t0x00,         \/\/ bInterfaceSubClass : \u043f\u043e\u0434\u043a\u043b\u0430\u0441\u0441 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430. \t\t\t\t0x00,         \/\/ nInterfaceProtocol : \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430  \t\t\t\t0,            \/\/ iInterface: \u0438\u043d\u0434\u0435\u043a\u0441 \u0441\u0442\u0440\u043e\u043a\u0438, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441  \t\t\t\t\t\/\/ \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0434\u043b\u044f \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 - \u044d\u0442\u043e HID \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \t\t\t\t\t\/******************** HID \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 ********************\/ \t\t\t\t\t0x09,         \/\/ bLength: \u0434\u043b\u0438\u043d\u0430 HID-\u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430 \t\t\t\t\tHID_DESCRIPTOR_TYPE, \/\/ bDescriptorType: \u0442\u0438\u043f \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430 - HID \t\t\t\t\t0x01, 0x01,   \/\/ bcdHID: \u043d\u043e\u043c\u0435\u0440 \u0432\u0435\u0440\u0441\u0438\u0438 HID 1.1 \t\t\t\t\t0x00,         \/\/ bCountryCode: \u043a\u043e\u0434 \u0441\u0442\u0440\u0430\u043d\u044b (\u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u0435\u043d) \t\t\t\t\t0x01,         \/\/ bNumDescriptors: \u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u0431\u0443\u0434\u0435\u0442 report \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432 \t\t\t\t\t\tHID_REPORT_DESCRIPTOR_TYPE,         \/\/ bDescriptorType: \u0422\u0438\u043f \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430 - report \t\t\t\t\t\tRHID_SIZ_REPORT_DESC,\t0x00, \/\/ wItemLength: \u0434\u043b\u0438\u043d\u0430 report-\u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430   \t\t\t\t\t\/******************** \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a (endpoints) ********************\/ \t\t\t\t\t0x07,          \/\/ bLength: \u0434\u043b\u0438\u043d\u0430 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430 \t\t\t\t\tUSB_ENDPOINT_DESCRIPTOR_TYPE, \/\/ \u0442\u0438\u043f \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430 - endpoints  \t\t\t\t\t0x81,          \/\/ bEndpointAddress: \u0430\u0434\u0440\u0435\u0441 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 1(IN) \t\t\t\t\t0x03,          \/\/ bmAttributes: \u0442\u0438\u043f \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 - Interrupt endpoint \t\t\t\t\twMaxPacketSize, 0x00,    \/\/ wMaxPacketSize:  Bytes max \t\t\t\t\t0x20,          \/\/ bInterval: Polling Interval (32 ms)            0x07,\t\/* bLength: Endpoint Descriptor size *\/           USB_ENDPOINT_DESCRIPTOR_TYPE,\t\/* bDescriptorType: *\/             \/*\tEndpoint descriptor type *\/           0x01,\t\/* bEndpointAddress: *\/             \/*\tEndpoint Address (OUT) *\/           0x03,\t\/* bmAttributes: Interrupt endpoint *\/           wMaxPacketSize,\t\/* wMaxPacketSize:  Bytes max  *\/           0x00,           0x20,\t\/* bInterval: Polling Interval (32 ms) *\/ }   ; \/* RHID_ConfigDescriptor *\/ <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 wMaxPacketSize \u2014 \u043e\u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0430\u043a\u0435\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u041f\u041a. \u041f\u0440\u043e\u0435\u043a\u0442 \u0442\u0430\u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u0435\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043c\u0435\u043d\u044f\u043b\u0438\u0441\u044c \u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0431\u0443\u0444\u0435\u0440\u043e\u0432. \u041d\u043e \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435, \u0447\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435 0x40 \u043f\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0443 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u0441\u0442\u043e\u0438\u0442. \u0421 \u044d\u0442\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439 \u0431\u0443\u0434\u044c\u0442\u0435 \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u044b \u2014 \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u2014 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b!<br \/>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0437\u0430 \u043d\u0438\u043c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 \u0441 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u043c bInterval \u2014 \u044d\u0442\u043e \u043f\u0435\u0440\u0438\u043e\u0434 \u043e\u043f\u0440\u043e\u0441\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445. \u0414\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0437\u0430\u0434\u0430\u043d\u043e 32\u043c\u0441.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0414\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0440\u0435\u043f\u043e\u0440\u0442\u0430 (\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">const uint8_t RHID_ReportDescriptor[RHID_SIZ_REPORT_DESC] =   {     0x06, 0x00, 0xff,              \/\/ USAGE_PAGE (Generic Desktop)     0x09, 0x01,                    \/\/ USAGE (Vendor Usage 1)     0xa1, 0x01,                    \/\/ COLLECTION (Application)     0x85, 0x01,                    \/\/   REPORT_ID (1)     0x09, 0x01,                    \/\/   USAGE (Vendor Usage 1)     0x15, 0x00,                    \/\/   LOGICAL_MINIMUM (0)     0x25, 0x01,                    \/\/   LOGICAL_MAXIMUM (1)     0x75, 0x08,                    \/\/   REPORT_SIZE (8)     0x95, 0x01,                    \/\/   REPORT_COUNT (1)     0xb1, 0x82,                    \/\/   FEATURE (Data,Var,Abs,Vol)     0x85, 0x01,                    \/\/   REPORT_ID (1)     0x09, 0x01,                    \/\/   USAGE (Vendor Usage 1)     0x91, 0x82,                    \/\/   OUTPUT (Data,Var,Abs,Vol)      0x85, 0x02,                    \/\/   REPORT_ID (2)     0x09, 0x02,                    \/\/   USAGE (Vendor Usage 2)     0x15, 0x00,                    \/\/   LOGICAL_MINIMUM (0)     0x25, 0x01,                    \/\/   LOGICAL_MAXIMUM (1)     0x75, 0x08,                    \/\/   REPORT_SIZE (8)     0x95, 0x01,                    \/\/   REPORT_COUNT (1)     0xb1, 0x82,                    \/\/   FEATURE (Data,Var,Abs,Vol)     0x85, 0x02,                    \/\/   REPORT_ID (2)     0x09, 0x02,                    \/\/   USAGE (Vendor Usage 2)     0x91, 0x82,                    \/\/   OUTPUT (Data,Var,Abs,Vol)      0x85, 0x03,                    \/\/   REPORT_ID (3)     0x09, 0x03,                    \/\/   USAGE (Vendor Usage 3)     0x15, 0x00,                    \/\/   LOGICAL_MINIMUM (0)     0x26, 0xff, 0x00,              \/\/   LOGICAL_MAXIMUM (255)     0x75, 0x08,                    \/\/   REPORT_SIZE (8)     0x95, RPT3_COUNT,                    \/\/   REPORT_COUNT (N)     0xb1, 0x82,                    \/\/   FEATURE (Data,Var,Abs,Vol)     0x85, 0x03,                    \/\/   REPORT_ID (3)     0x09, 0x03,                    \/\/   USAGE (Vendor Usage 3)     0x91, 0x82,                    \/\/   OUTPUT (Data,Var,Abs,Vol)      0x85, 0x04,                    \/\/   REPORT_ID (4)     0x09, 0x04,                    \/\/   USAGE (Vendor Usage 4)     0x75, 0x08,                    \/\/   REPORT_SIZE (8)     0x95, RPT4_COUNT,                    \/\/   REPORT_COUNT (N)     0x81, 0x82,                    \/\/   INPUT (Data,Var,Abs,Vol)     0xc0                           \/\/ END_COLLECTION } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u042d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u0432\u0430\u0436\u043d\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u2014 \u043e\u043d \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043e\u0431\u043c\u0435\u043d\u0430 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u0415\u0433\u043e \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u043d\u0435 \u0441\u0430\u043c\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430. \u0415\u0441\u043b\u0438 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 \u043f\u0440\u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430 \u2014 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0424\u043e\u0440\u043c\u0430\u0442 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430 \u043e\u0447\u0435\u043d\u044c \u0436\u0435\u0441\u0442\u043a\u0438\u0439. \u0415\u0441\u0442\u044c \u0434\u0430\u0436\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430 <a href=\"http:\/\/www.usb.org\/developers\/hidpage\/\">HID Descriptor tool<\/a>. \u0410 \u0432 \u043a\u043e\u0440\u043d\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043b\u0435\u0436\u0438\u0442 \u0444\u0430\u0439\u043b \u00abRHID.hid\u00bb \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c \u0432\u044b\u0448\u0435 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u043c \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u044d\u0442\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u0435. \u041d\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0435, \u043b\u0443\u0447\u0448\u0435 \u043d\u0435 \u043b\u0435\u0437\u0442\u044c.<br \/>  \u0414\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0434\u0432\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b:<br \/>  <b>RPT3_COUNT<\/b> \u2014 \u0440\u0430\u0437\u043c\u0435\u0440 OUTPUT \u0431\u0443\u0444\u0435\u0440\u0430 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 \u0432 \u041c\u041a (\u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u2014 1 \u0431\u0430\u0439\u0442)<br \/>  <b>RPT4_COUNT<\/b> \u2014 \u0440\u0430\u0437\u043c\u0435\u0440 INPUT \u0431\u0443\u0444\u0435\u0440\u0430 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 \u0432 \u041f\u041a (\u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u2014 4 \u0431\u0430\u0439\u0442\u0430)<br \/>  \u0420\u0430\u0437\u043c\u0435\u0440 \u043b\u044e\u0431\u043e\u0433\u043e \u0438\u0437 \u044d\u0442\u0438\u0445 \u0431\u0443\u0444\u0435\u0440\u043e\u0432 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0442\u044c <b>wMaxPacketSize<\/b>. \u041c\u0435\u043d\u044c\u0448\u0435 \u2014 \u043c\u043e\u0436\u043d\u043e.<br \/>  \u041a\u0441\u0442\u0430\u0442\u0438, \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c Custom HID \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 HID \u0434\u0435\u0432\u0430\u0439\u0441, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0443 \u0438\u043b\u0438 \u0434\u0436\u043e\u0439\u0441\u0442\u0438\u043a \u043c\u043e\u0436\u043d\u043e \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0432 ReportDescriptor \u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0432 \u043a\u043b\u0430\u0441\u0441 \u0438 \u043f\u043e\u0434\u043a\u043b\u0430\u0441\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.<\/p>\n<h4>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Report<\/h4>\n<p>  \u0425\u043e\u0441\u0442 (\u041f\u041a) \u0438 \u0434\u0435\u0432\u0430\u0439\u0441 (\u041c\u041a) \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043e\u0433\u043e\u0432\u043e\u0440\u0435\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u2014 report. \u041f\u0430\u043a\u0435\u0442\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u0435\u0441\u044c\u043c\u0430 \u043c\u043d\u043e\u0433\u043e, \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0432\u0441\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u0436\u0438\u0437\u043d\u0438 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0430\u043a\u0435\u0442 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043e \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u0445 \u0432 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435, \u043f\u0430\u043a\u0435\u0442 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u043b \u041f\u041a, \u043f\u0430\u043a\u0435\u0442 \u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u0434\u043b\u044f \u041c\u041a. \u0412\u0441\u0435, \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e. \u041d\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0432\u0441\u0435\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 RHID_ReportDescriptor. <br \/>  \u041f\u041a \u0438 \u041c\u041a \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0442 \u0440\u0435\u043f\u043e\u0440\u0442\u044b \u043f\u043e ID, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0434\u0435\u0442 \u043f\u0435\u0440\u0432\u044b\u043c \u0431\u0430\u0439\u0442\u043e\u043c \u0432 \u043f\u0430\u043a\u0435\u0442\u0435.<br \/>  \u0412 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 4 \u0442\u0438\u043f\u0430 \u0440\u0435\u043f\u043e\u0440\u0442\u043e\u0432:  <\/p>\n<ul>\n<li>REPORT_ID = 1 \u0438 2 \u2014 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u041c\u041a \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c\/\u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c LED1\/LED2. \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u043e\u043b\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 1 \u0431\u0438\u0442 \u0441 \u0436\u0435\u043b\u0430\u0435\u043c\u044b\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u043a\u0430\u043a \u043c\u0435\u0442\u043e\u0434\u043e\u043c SET_REPORT \u0442\u0430\u043a \u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u043c SET_FEATURE (\u043e\u0431 \u044d\u0442\u043e\u043c \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435).<\/li>\n<li>REPORT_ID = 3 \u2014 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442 \u0432 \u041c\u041a. \u041f\u0440\u043e\u0441\u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u041c\u041a. \u041c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0437\u0443\u043d\u043a\u0430.<\/li>\n<li>REPORT_ID = 4 \u2014 \u044d\u0442\u043e \u0440\u0435\u043f\u043e\u0440\u0442 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u041f\u041a. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432, \u043a\u043d\u043e\u043f\u043e\u043a (\u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0435\u0441\u0442\u044c) \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 \u0432 \u0440\u0435\u043f\u043e\u0440\u0442\u0435 \u0441 ID=3 \u0431\u0430\u0439\u0442, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043d\u044f\u0442\u044b.<\/li>\n<\/ul>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0432 \u0442\u043e\u043c, \u043a\u0430\u043a \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0440\u0435\u043f\u043e\u0440\u0442\u043e\u0432, \u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u0435\u043d\u044f\u0439\u0442\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b RPT3_COUNT \u0438 RPT4_COUNT, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044f \u043d\u0443\u0436\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0438 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 (\u0441\u043e \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u041f\u041a) \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u043f\u043e\u0440\u0442\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0442\u044c, \u043e\u043d\u0438 \u043d\u0435 \u043f\u043e\u043c\u0435\u0448\u0430\u044e\u0442. \u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435, \u0447\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u043c \u0431\u0430\u0439\u0442\u043e\u043c \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c ID \u0440\u0435\u043f\u043e\u0440\u0442\u0430.<\/p>\n<h4>\u0426\u0438\u043a\u043b \u043e\u0431\u043c\u0435\u043d\u0430<\/h4>\n<p>  \u0418\u0442\u0430\u043a, \u043c\u044b \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043d\u0430\u0448\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0432 PID, VID, \u043d\u043e\u043c\u0435\u0440 \u0432\u0435\u0440\u0441\u0438\u0438, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0438 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0438 \u0433\u043e\u0442\u043e\u0432\u044b \u043a \u0440\u0430\u0431\u043e\u0442\u0435.<br \/>  \u041a\u0430\u0436\u0434\u044b\u0435 32\u043c\u0441, \u043a\u0430\u043a \u043c\u044b \u0438 \u043f\u0440\u043e\u0441\u0438\u043b\u0438 \u0432 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u0445\u043e\u0441\u0442 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0441 \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0438 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 RHIDCheckState \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u2014 \u0435\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c, \u0447\u0442\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u0442\u043e \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u043f\u0430\u043a\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0445\u043e\u0441\u0442\u0430.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">RHIDCheckState &#8212; \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">\/******************************************************************************* * Function Name : RHIDCheckState. * Description   : Decodes the RHID state. * Input         : None. * Output        : None. * Return value  : The state value. *******************************************************************************\/ uint16_t btn1_prev, btn2_prev; uint8_t Buffer[RPT4_COUNT+1]; uint8_t RHIDCheckState(void) {     uint16_t btn1=0, btn2=0;     btn1 = GPIO_ReadInputDataBit(BTN1_PORT, BTN1_PIN);     btn2 = GPIO_ReadInputDataBit(BTN2_PORT, BTN2_PIN);     Buffer[0] = 4;     Buffer[1] = btn1;     Buffer[2] = btn2;     Buffer[3] = (GPIO_ReadInputDataBit(LED_PORT, LED1_PIN) | GPIO_ReadInputDataBit(LED_PORT, LED2_PIN)&lt;&lt;1);      \/* Reset the control token to inform upper layer that a transfer is ongoing *\/     PrevXferComplete = 0;      \/* Copy mouse position info in ENDP1 Tx Packet Memory Area*\/     USB_SIL_Write(EP1_IN, Buffer, RPT4_COUNT+1);     \/* Enable endpoint for transmission *\/     SetEPTxValid(ENDP1);      return (btn1 | btn2&lt;&lt;1); } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041c\u0430\u0441\u0441\u0438\u0432 <b>uint8_t Buffer[RPT4_COUNT+1]<\/b> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u043a\u0430\u043a \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e (\u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0445\u043e\u0441\u0442\u0430) \u043f\u0430\u043a\u0435\u0442\u0430 + \u0431\u0430\u0439\u0442 ID. \u042d\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u2014 \u0435\u0441\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0443\u0444\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u2014 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0431\u0443\u0444\u0435\u0440\u0430 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0439\u0442\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0432 usb_desc.h.<br \/>  \u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043f\u0430\u043a\u0435\u0442, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0444\u043b\u0430\u0433 PrevXferComplete = 0, \u0433\u043e\u0432\u043e\u0440\u044f\u0449\u0438\u0439 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 USB_SIL_Write \u0438 SetEPTxValid \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0445\u043e\u0441\u0442\u0443.<br \/>  \u0412\u0441\u0435, \u043d\u0430 \u044d\u0442\u043e\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0445\u043e\u0441\u0442\u0443 \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u0430.<\/p>\n<p>  \u0421 \u043f\u0440\u0438\u0435\u043c\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u2014 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043f\u043e\u0441\u043b\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u0435\u0432\u0430\u0439\u0441\u0443 \u2014 \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0438\u0445 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0432 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0435 \u0440\u0435\u043f\u043e\u0440\u0442\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (Features), \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <b>SET_FEAUTRE<\/b>. \u042d\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f, \u0434\u043b\u044f \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0441 \u043a\u0443\u0447\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043b\u0430\u0442\u044c \u043f\u043e\u0442\u043e\u043a \u0431\u0430\u0439\u0442.<br \/>  \u0412\u0442\u043e\u0440\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u2014 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u043a\u0430\u043a \u0441 \u0444\u0430\u0439\u043b\u043e\u043c \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 \u043d\u0435\u0433\u043e \u043f\u0430\u043a\u0435\u0442 \u043a\u0430\u043a \u0432 \u0444\u0430\u0439\u043b. \u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <b>SET_REPORT<\/b>. \u041d\u0430 \u0434\u0435\u043b\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0447\u0443\u0442\u044c-\u0447\u0443\u0442\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435.<br \/>  \u041d\u0430\u0448\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u0431\u0430 \u043c\u0435\u0442\u043e\u0434\u0430, \u043e \u0447\u0435\u043c \u043c\u044b \u0438 \u0441\u043a\u0430\u0437\u0430\u043b\u0438 \u0445\u043e\u0441\u0442\u0443 \u0432 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0435 \u0440\u0435\u043f\u043e\u0440\u0442\u043e\u0432.<\/p>\n<h5>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 SET_FEATURE<\/h5>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0435, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u043c SET_FEAUTRE \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 usb_prop.c<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0444\u0443\u043d\u043a\u0446\u0438\u044f HID_Status_In<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">\/******************************************************************************* * Function Name  : HID_Status_In. * Description    : HID status IN routine. * Input          : None. * Output         : None. * Return         : None. *******************************************************************************\/ void HID_Status_In(void) {   BitAction Led_State;    if (Report_Buf[1] == 0)   {     Led_State = Bit_RESET;   }   else   {     Led_State = Bit_SET;   }    switch (Report_Buf[0])   {     case 1: \/* Led 1 *\/      if (Led_State != Bit_RESET)      {        GPIO_SetBits(LED_PORT,LED1_PIN);      }      else      {        GPIO_ResetBits(LED_PORT,LED1_PIN);      }      break;     case 2: \/* Led 2 *\/      if (Led_State != Bit_RESET)      {        GPIO_SetBits(LED_PORT,LED2_PIN);      }      else      {        GPIO_ResetBits(LED_PORT,LED2_PIN);      }       break;     case 3: \/* Led 1&2 *\/        Buffer[4]=Report_Buf[1];      break;   } } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u0431\u0430\u0439\u0442 \u0432 \u0440\u0435\u043f\u043e\u0440\u0442\u0435 \u0438 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043d\u0438\u043c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043e\u0441\u0442\u0430\u0442\u043e\u043a \u043f\u0430\u043a\u0435\u0442\u0430 \u2014 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430\u043c\u0438 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0435\u0440\u0435\u043c \u0431\u0430\u0439\u0442, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u043c \u0445\u043e\u0441\u0442\u043e\u043c \u0438 \u043a\u043b\u0430\u0434\u0435\u043c \u0432 \u043f\u0430\u043a\u0435\u0442 \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 RHIDCheckState.<br \/>  \u041f\u043e\u0434 Report_Buf \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043e wMaxPacketSize \u0431\u0430\u0439\u0442, \u0447\u0442\u043e\u0431\u044b \u0432\u043b\u0435\u0437 \u043b\u044e\u0431\u043e\u0439 \u043f\u0430\u043a\u0435\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442 \u0445\u043e\u0441\u0442.<\/p>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0435, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u043c SET_REPORT \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 usb_endp.c  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0444\u0443\u043d\u043a\u0446\u0438\u044f EP1_OUT_Callback<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">\/******************************************************************************* * Function Name  : EP1_OUT_Callback. * Description    : EP1 OUT Callback Routine. * Input          : None. * Output         : None. * Return         : None. *******************************************************************************\/ void EP1_OUT_Callback(void) {   BitAction Led_State;    \/* Read received data (2 bytes) *\/   USB_SIL_Read(EP1_OUT, Receive_Buffer);    if (Receive_Buffer[1] == 0)   {     Led_State = Bit_RESET;   }   else   {     Led_State = Bit_SET;   }     switch (Receive_Buffer[0])   {     case 1: \/* Led 1 *\/      if (Led_State != Bit_RESET)      {        GPIO_SetBits(LED_PORT,LED1_PIN);      }      else      {        GPIO_ResetBits(LED_PORT,LED1_PIN);      }      break;     case 2: \/* Led 2 *\/      if (Led_State != Bit_RESET)      {        GPIO_SetBits(LED_PORT,LED2_PIN);      }      else      {        GPIO_ResetBits(LED_PORT,LED2_PIN);      }       break;     case 3: \/* Led 1&2 *\/         Buffer[4]=Receive_Buffer[1];      break;   }    SetEPRxStatus(ENDP1, EP_RX_VALID); } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043f\u043e\u0447\u0442\u0438 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u0431\u0440\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u043e\u043c USB_SIL_Read(EP1_OUT, Receive_Buffer) \u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c, \u0447\u0442\u043e \u043c\u044b \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438 \u0432\u044b\u0437\u043e\u0432\u043e\u043c SetEPRxStatus(ENDP1, EP_RX_VALID);<\/p>\n<p>  \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043f\u0430\u043a\u0435\u0442\u0430\u0445 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0441 \u043d\u0443\u0436\u043d\u043e\u0439 \u043d\u0430\u043c \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u043d\u043e\u0441\u0442\u044c\u044e \u043c\u044b \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c.<br \/>  \u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0435\u043c \u0432 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e.<br \/>  \u0420\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<br \/>  <iframe loading=\"lazy\" width=\"560\" height=\"349\" src=\"\/\/www.youtube.com\/embed\/tXuZpR0LMZI?wmode=opaque\" frameborder=\"0\" allowfullscreen><\/iframe><\/p>\n<p>  \u041f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u0443\u0442\u0438\u043b\u0438\u0442\u043e\u0439 USB HID Demonstrator \u043e\u0442 ST Microelectronics.<br \/>  \u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 Device capabilities \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432 Report Descriptor.<br \/>  Input\/Output transfer \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u043e\u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u0435\u0432\u0430\u0439\u0441\u0443 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u0430\u043a\u0435\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442 \u043d\u0435\u0433\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442.<br \/>  Graphic view \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430\u043c\u0438, \u0447\u0435\u043a\u0431\u043e\u043a\u0441\u0430\u043c\u0438 Led 1, Led 2, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0438\u043c Report ID, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0431\u0430\u0439\u0442 \u043f\u043e\u043b\u0437\u0443\u043d\u043a\u043e\u043c (ReportID=3)<br \/>  <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/1a5\/d76\/a97\/1a5d76a97741feca055b76b65c7e7e23.png\"\/><\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0443\u044e \u0434\u0435\u043c\u043e-\u0441\u043e\u0444\u0442\u0438\u043d\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u043a\u043e\u043c\u043f\u0443 \u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u0434\u0435\u0432\u0430\u0439\u0441\u0430 \u043f\u043e \u0435\u0433\u043e VID \u0438 PID, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0441\u0442\u0430\u0442\u0443\u0441 \u2014 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e\/\u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c \u0440\u044f\u0434\u043e\u043c \u0441 \u0447\u0435\u043a\u0431\u043e\u0441\u043e\u043c Auto Connect<br \/>  <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/248\/5b8\/0a1\/2485b80a183fdbfd8482aea83a16615c.png\"\/><br \/>  \u0420\u0430\u0434\u0438\u043e\u043a\u043d\u043e\u043a\u0430 <b>Send using<\/b> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u0435\u0432\u0430\u0439\u0441\u0443.<br \/>  <b>Report:<\/b> \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043e\u0442 \u0434\u0435\u0432\u0430\u0439\u0441\u0430 \u043f\u0430\u043a\u0435\u0442 \u043f\u043e\u0431\u0430\u0439\u0442\u043d\u043e, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 ReportID.<br \/>  \u0429\u0435\u043b\u043a\u0430\u044f \u043f\u043e \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430\u043c \u043d\u0438\u0436\u0435 \u2014 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430\u043c\u0438 \u0434\u0435\u0432\u0430\u0439\u0441\u0430. \u0418\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u0435\u0432\u0430\u0439\u0441\u0430. \u0421\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u0440\u0435\u043f\u043e\u0440\u0442\u0430 \u043e\u0442 \u0434\u0435\u0432\u0430\u0439\u0441\u0430.<br \/>  \u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u044f \u043f\u043e\u043b\u0437\u0443\u043d\u043e\u043a, \u043c\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c Report \u0441 ID=3 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043f\u043e\u043b\u0437\u0443\u043d\u043a\u0430. \u0414\u0435\u0432\u0430\u0439\u0441 \u0432\u0435\u0440\u043d\u0435\u0442 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 4 \u0431\u0430\u0439\u0442\u0435 \u0440\u0435\u043f\u043e\u0440\u0442\u0430.<br \/>  \u0412 \u0432\u044b\u043f\u0430\u0434\u0430\u044e\u0449\u0435\u043c \u043a\u043e\u043c\u0431\u043e\u0431\u043e\u043a\u0441\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f HID \u0434\u0435\u0432\u0430\u0439\u0441\u044b, \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0438 \u0435\u0441\u043b\u0438 \u043d\u0430\u0439\u0434\u0435\u043d \u043d\u0430\u0448 \u0434\u0435\u0432\u0430\u0439\u0441, \u0442\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435.<\/p>\n<p>  \u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0432\u0441\u0435, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u043c\u043e\u0436\u043d\u043e \u043d\u0430 <a href=\"https:\/\/github.com\/RavWin\/RHIDDemo\">GitHub<\/a>. \u0412 \u0441\u043e\u0441\u0442\u0430\u0432\u0435:<br \/>  <b>DT<\/b> \u2014 HID Descriptor tool<br \/>  <b>tstHID-STM32F103<\/b> \u2014 \u043f\u0440\u043e\u0435\u043a\u0442 \u0434\u043b\u044f EmBlocks<br \/>  <b>USB HID Demonstrator<\/b> \u2014 \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u043e\u0442 ST Microelectronics<br \/>  <b>HIDSTM32.exe<\/b> \u2014 \u043c\u043e\u044f \u0434\u0435\u043c\u043e-\u0441\u043e\u0444\u0442\u0438\u043d\u043a\u0430 \u043d\u0430 Delphi \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0433\u043e \u0444\u0443\u043a\u043d\u0446\u0438\u043e\u043d\u0430\u043b\u0430, \u043d\u043e \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u2014 \u043f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445. \u041f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c. \u042f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u043d\u0435 \u0443\u0442\u043e\u043f\u0438\u0442\u044c \u0441\u0443\u0442\u044c \u0432 \u043a\u0443\u0447\u0435 \u043c\u0435\u043b\u043e\u0447\u0435\u0439, \u0447\u0442\u043e\u0431\u044b \u0441\u043b\u043e\u0436\u0438\u043b\u043e\u0441\u044c \u043e\u0431\u0449\u0435\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0443\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0438\u0437\u0443\u0447\u0430\u044f \u043f\u0440\u043e\u0435\u043a\u0442. \u041d\u043e \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0432\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u0430 \u043b\u0435\u0437\u0442\u044c \u0432 \u0434\u0435\u0431\u0440\u0438 \u043d\u0435\u043a\u043e\u0433\u0434\u0430 \u2014 \u0432\u0441\u0435, \u0447\u0442\u043e \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e, \u044f \u043e\u043f\u0438\u0441\u0430\u043b.    \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/208026\/\"> http:\/\/habrahabr.ru\/post\/208026\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t\u041d\u0430 \u0434\u0432\u043e\u0440\u0435 2014 \u0433\u043e\u0434, \u0430 \u0434\u043b\u044f \u0441\u0432\u044f\u0437\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u0441 \u041f\u041a \u0441\u0430\u043c\u044b\u043c \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442. \u0421 \u043d\u0438\u043c \u043b\u0435\u0433\u043a\u043e \u043d\u0430\u0447\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043e\u043d \u0434\u043e \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0441\u0442 \u0432 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0438 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0442\u043e\u043a \u0431\u0430\u0439\u0442.<br \/>  \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u0441\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u044b \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u043b\u0438 COM \u043f\u043e\u0440\u0442 \u0438\u0437 \u0441\u043e\u0441\u0442\u0430\u0432\u0430 \u041f\u041a \u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c USB-UART \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u0438\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0432\u043e\u0435\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u043d\u0430 \u041c\u041a. \u041d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u043d \u0435\u0441\u0442\u044c \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439. \u041d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0442\u0430\u043a\u043e\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u0438\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e \u0438\u0437-\u0437\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430\u043c\u0438. \u0415\u0441\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438.<br \/>  \u041d\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0445\u043e\u0434\u0438\u0442 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440 \u043e \u0442\u043e\u043c, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c USB \u0438\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442, \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043a\u043b\u043e\u043d\u043d\u0438\u043a\u043e\u0432 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b UART. \u0418 \u0443 \u043d\u0438\u0445 \u0435\u0441\u0442\u044c \u043d\u0430 \u0442\u043e \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f. \u041e\u0434\u043d\u0430\u043a\u043e, \u0445\u043e\u0440\u043e\u0448\u043e \u0432\u0435\u0434\u044c \u0438\u043c\u0435\u0442\u044c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0443?<br \/>  <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/6b1\/512\/75d\/6b151275d8392a0eefe1c90524bebded.jpg\"\/><br \/>  \u041c\u0435\u043d\u044f \u0434\u0430\u0432\u043d\u043e \u043f\u0440\u043e\u0441\u0438\u043b\u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u043d\u044b\u0439 \u043e\u0431\u043c\u0435\u043d \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043c\u0435\u0436\u0434\u0443 \u041f\u041a \u0438 \u041c\u041a \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 STM32F103. \u042f \u0434\u0430\u043c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043a\u0430\u043a \u0435\u0433\u043e \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0441\u0432\u043e\u0438\u0445 \u043d\u0443\u0436\u0434. \u0410 \u0443\u0436 \u0432\u044b \u0441\u0430\u043c\u0438 \u0440\u0435\u0448\u0438\u0442\u0435 \u2014 \u043d\u0443\u0436\u043d\u043e \u043e\u043d\u043e \u0432\u0430\u043c \u0438\u043b\u0438 \u043d\u0435\u0442.<\/p>\n<p>  \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u043b\u0430\u0442\u0430 \u0441 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u043d\u0435\u0434\u043e\u0440\u043e\u0433\u0438\u043c \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c STM32F103C8 \u0441\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 USB, \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u043e \u043d\u0435\u0439 \u0440\u0430\u043d\u0435\u0435<br \/>  <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/ee0\/b51\/3ab\/ee0b513ab61780097991d4b56e1f48a8.jpg\"\/>  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-208026","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/208026","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=208026"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/208026\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=208026"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=208026"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=208026"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}