{"id":163689,"date":"2012-12-24T02:23:04","date_gmt":"2012-12-23T22:23:04","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=163689"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=163689","title":{"rendered":"<span class=\"post_title\">\u041c\u0438\u043d\u0438\u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0438\u0437 \u0440\u043e\u0443\u0442\u0435\u0440\u0430 \u0441 OpenWRT: \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c USB-\u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0443<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/74a\/e2d\/b33\/74ae2db338f17b30178cc53af42025d6.jpg\"\/><br \/>  \u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c, \u0443\u0432\u0430\u0436\u0430\u0435\u043c\u044b\u0435 \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0435. \u0412 \u044d\u0442\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u0441\u0442\u0430\u0442\u0435\u0439 \u043c\u044b \u0441 \u0432\u0430\u043c\u0438 \u043f\u0440\u043e\u0439\u0434\u0435\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u0438\u043d\u043d\u044b\u0439, \u043d\u043e \u0432\u0435\u0441\u044c\u043c\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043f\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044e \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0440\u043e\u0443\u0442\u0435\u0440\u0430 \u0432 \u043c\u0438\u043d\u0438-\u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0441 LCD-\u0434\u0438\u0441\u043f\u043b\u0435\u0435\u043c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441\u043d\u0430\u0447\u0430\u043b\u0430 USB-\u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0443 \u043d\u0430 \u0431\u0430\u0437\u0435 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 STM32F103, \u043f\u043e\u0442\u043e\u043c \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0434\u0440\u0430\u0432\u0439\u0432\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u043d\u0435\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0443, \u0438, \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u2013 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0444\u0440\u0435\u0439\u043c\u0431\u0443\u0444\u0444\u0435\u0440\u0430, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a x-\u0441\u0435\u0440\u0432\u0435\u0440. \u0417\u0430\u043e\u0434\u043d\u043e \u043c\u044b \u043d\u0430\u0443\u0447\u0438\u043c\u0441\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043d\u0430\u0448 \u043a\u043e\u0434 \u0432 \u0434\u0435\u0440\u0435\u0432\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 OpenWRT, \u0434\u043e\u043f\u0438\u043b\u0438\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u044f\u0434\u0440\u043e \u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0447\u0438\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0432\u0435\u0449\u0438.<br \/>  \u041d\u0443 \u0430 \u0432 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0446\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u044f \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u043d\u043e\u0441\u0442\u0430\u043b\u044c\u0433\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u043b\u0435\u0437\u0443 \u0443 \u043c\u043d\u043e\u0433\u0438\u0445 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439. \u042f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u0438\u0437\u043b\u0430\u0433\u0430\u0442\u044c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u0442\u0430\u043f\u0430 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u043b\u0438 \u043e\u0441\u044f\u0437\u0430\u0435\u043c\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043d\u0435 \u0434\u0430\u044e\u0449\u0438\u0439 \u0443\u0433\u0430\u0441\u043d\u0443\u0442\u044c \u044d\u043d\u0442\u0443\u0437\u0438\u0430\u0437\u043c\u0443. \u0418\u0442\u0430\u043a, \u043d\u0430\u0447\u043d\u0435\u043c.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h4>\u0416\u0435\u043b\u0435\u0437\u043e<\/h4>\n<p>  \u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0438\u0437 \u0436\u0435\u043b\u0435\u0437\u0430 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f. \u0422\u0435\u0445, \u043a\u0442\u043e \u043d\u0435 \u043b\u044e\u0431\u0438\u0442 \u043f\u0430\u044f\u0442\u044c, \u044f \u043c\u043e\u0433\u0443 \u0441\u0440\u0430\u0437\u0443 \u0443\u0441\u043f\u043e\u043a\u043e\u0438\u0442\u044c \u2014 \u0432\u0441\u0435 \u0447\u0442\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u2013 \u0447\u0438\u0441\u0442\u043e \u0444\u0451\u0440\u043c\u0432\u0430\u0440\u043d\u043e\u0435 \u0438 \u0441\u043e\u0444\u0442\u0432\u0430\u0440\u043d\u043e\u0435, \u0442\u0430\u043a \u0447\u0442\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0430\u044f\u0442\u044c \u043d\u0430\u043c \u043d\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f. \u041d\u043e \u0437\u0430\u0442\u043e \u043d\u0430 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0430\u044f \u043d\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 STM32F103VE \u0438 QVGA \u0434\u0438\u0441\u043f\u043b\u0435\u0435\u043c, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u0443\u0436\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b \u0432 \u0441\u0432\u043e\u0435\u0439 <a href=\"http:\/\/habrahabr.ru\/post\/139601\/\">\u0441\u0442\u0430\u0442\u044c\u0435<\/a>.<br \/>  \u0422\u0430\u043a\u0436\u0435 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0440\u043e\u0443\u0442\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0442\u0430\u043a\u0436\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b \u0432 <a href=\"http:\/\/habrahabr.ru\/post\/158127\/\">\u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a>, \u043d\u043e \u043a \u043d\u0435\u043c\u0443 \u043c\u044b \u0432\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043f\u043e\u0437\u0436\u0435. \u0421\u0435\u0439\u0447\u0430\u0441 \u0436\u0435 \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0438\u043c\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0441\u0430\u043c\u043e\u0439 USB-\u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u044b \u043d\u0430 \u0431\u0430\u0437\u0435 \u043d\u0430\u0448\u0435\u0439 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u044b.<\/p>\n<p>  \u0423 STM32F103 \u0435\u0441\u0442\u044c \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u0434\u0432\u0430 \u0431\u043b\u043e\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043c \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u0438\u0433\u043e\u0434\u044f\u0442\u0441\u044f. \u041f\u0435\u0440\u0432\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u2013 \u044d\u0442\u043e, \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0439 USB-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u0434\u043b\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043d\u0430\u0448\u0435\u0439 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u043e\u0439 \u0438 \u0445\u043e\u0441\u0442\u043e\u043c. \u0412\u0442\u043e\u0440\u043e\u0439 \u2013 FSMC \u2013 Flexible Static Memory Controller. \u041e\u043d \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430\u043c\u0438 SRAM, NAND\/NOR FLASH \u0438 \u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438, \u043f\u0440\u0438\u0447\u0435\u043c \u0448\u0438\u0440\u0438\u043d\u0430 \u0448\u0438\u043d\u044b \u0438 \u0442\u0430\u0439\u043c\u0438\u043d\u0433\u0438 \u0432 \u043d\u0435\u043c \u043f\u043e\u0434\u0434\u0430\u044e\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b \u043c\u0430\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438, \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043f\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443, FSMC \u0441\u0430\u043c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u043d\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u043b\u0438\u043d\u0438\u044f\u0445 \u0438 \u0448\u0438\u043d\u0430\u0445 \u0430\u0434\u0440\u0435\u0441\u0430 \u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u0442\u0430\u043a \u0447\u0442\u043e \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u043c. <\/p>\n<p>  \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u0434\u0438\u0441\u043f\u043b\u0435\u0435\u043c \u044d\u0442\u043e \u043d\u0430\u043c \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043c\u043e\u0436\u0435\u0442, \u0442\u0430\u043a \u043a\u0430\u043a \u0434\u0438\u0441\u043f\u043b\u0435\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u0441\u043d\u0430\u0431\u0436\u0435\u043d\u044b \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c, \u043f\u043e\u0447\u0442\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u043c \u0441 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c NOR-\u0444\u043b\u0435\u0448\u043a\u0438 \u0438 SRAM: 16-\u0431\u0438\u0442\u043d\u0430\u044f \u0448\u0438\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0441\u0442\u0440\u043e\u0431\u044b CS, ~WR, ~RD. \u0421 \u044d\u0442\u0438\u043c\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0430\u043c\u0438 \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u2013 CS \u0430\u043a\u0442\u0438\u0432\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0434\u0438\u0441\u043f\u043b\u0435\u0439, \u0441 \u043d\u0435\u0433\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0446\u0438\u043a\u043b \u043e\u0431\u043c\u0435\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. ~WR \u043b\u0438\u0431\u043e ~RD \u0430\u043a\u0442\u0438\u0432\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u043b\u0438\u0431\u043e \u0437\u0430\u043f\u0438\u0441\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. <br \/>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u0441\u0432\u043e\u0435\u0439 \u0448\u0438\u043d\u044b \u0430\u0434\u0440\u0435\u0441\u0430 \u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043a \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u0438, \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0435\u0434\u0438\u043d\u0430\u044f 16-\u0431\u0438\u0442\u043d\u0430\u044f \u0448\u0438\u043d\u0430 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b RS, Register Select. \u041f\u0440\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u0435 RS, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u043d\u0430 \u044d\u0442\u0443 \u0448\u0438\u043d\u0443, \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0430\u0434\u0440\u0435\u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 (\u044f\u0447\u0435\u0439\u043a\u0438 RAM) \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u044f, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f, \u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0447\u0442\u0435\u043d\u0438\u0435 \u043b\u0438\u0431\u043e \u0437\u0430\u043f\u0438\u0441\u044c \u0441 \u043d\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c RS \u2013 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0435\u0439 \u0441 RAM \u0434\u0438\u0441\u043f\u043b\u0435\u044f.<\/p>\n<p>  \u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e RAM \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u044c\u044e, \u044d\u0442\u043e \u043f\u0430\u043c\u044f\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u044f, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u0442\u043a\u0440\u044b\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u0438\u0437\u0432\u043d\u0435 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0448\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430. \u0412\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u044c \u0436\u0435 \u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u0442 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043a\u0430\u043a GRAM, Graphics RAM, \u0438 \u0435\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u00ab\u043e\u043a\u043e\u0448\u043a\u043e\u00bb \u0432 \u0432\u0438\u0434\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043b\u043e\u0433\u0438\u043a\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u044f \u0441\u0430\u043c\u0430 \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u0442\/\u0434\u0435\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0430\u0434\u0440\u0435\u0441 \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u0447\u0442\u0435\u043d\u0438\u0438 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0433\u043e \u0436\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 (CTR_WRITE_DATA, CTR_READ_DATA)<br \/>  FSMC \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 RS, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0442\u0440\u044e\u043a: \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u0437 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0448\u0438\u043d\u044b \u0430\u0434\u0440\u0435\u0441\u0430 FSMC \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a \u0441\u0438\u0433\u043d\u0430\u043b\u0443 RS. <br \/>  \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u043c\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u0441\u0438\u0433\u043d\u0430\u043b A0 \u043a RS. \u0422\u043e\u0433\u0434\u0430 \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a \u0430\u0434\u0440\u0435\u0441\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 0\u044500000000 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c (\u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u0430\u043f\u0438\u0440\u043e\u0432\u0430\u043d \u0434\u0430\u043d\u043d\u044b\u0439 \u0431\u0430\u043d\u043a FSMC) \u0441\u0438\u0433\u043d\u0430\u043b RS \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0430\u043a\u0442\u0438\u0432\u0435\u043d \u0438 \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u0432\u043e\u0441\u043f\u0440\u0438\u043c\u0435\u0442 \u044d\u0442\u043e \u043a\u0430\u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0430\u0434\u0440\u0435\u0441\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430.<br \/>  \u041f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u0436\u0435 \u043a 0\u044500000001 \u0430\u0434\u0440\u0435\u0441\u043d\u0430\u044f \u043b\u0438\u043d\u0438\u044f A0 \u0431\u0443\u0434\u0435\u0442 \u0430\u043a\u0442\u0438\u0432\u043d\u0430, \u0438 \u0447\u0442\u0435\u043d\u0438\u0435 \u043b\u0438\u0431\u043e \u0437\u0430\u043f\u0438\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u0441\u044f \u0443\u0436\u0435 \u0434\u043b\u044f \u044f\u0447\u0435\u0439\u043a\u0438 RAM, \u0442\u043e \u0435\u0441\u0442\u044c, \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430, \u0430\u0434\u0440\u0435\u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u044b\u043b \u0437\u0430\u0434\u0430\u043d \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043f\u043e \u043d\u0443\u043b\u0435\u0432\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443.<br \/>  \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 <a href=\"http:\/\/www.st.com\/internet\/com\/TECHNICAL_RESOURCES\/TECHNICAL_LITERATURE\/APPLICATION_NOTE\/CD00201397.pdf\">\u0430\u043f\u043d\u043e\u0443\u0442\u0435<\/a> \u043e\u0442 \u0421\u0422\u041c, \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u043e\u043c \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0432\u043e\u043f\u0440\u043e\u0441\u0443. <br \/>  \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0435\u0433\u043e <a href=\"http:\/\/www.adafruit.com\/datasheets\/ILI9325.pdf\">\u0434\u0430\u0442\u0430\u0448\u0438\u0442\u0435<\/a>.<\/p>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u0441 \u0434\u0430\u0442\u0430\u0448\u0438\u0442\u0430\u043c\u0438 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u0435\u0435 \u0438 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0435\u0433\u043e \u0432\u0435\u0440\u0441\u0438\u044e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0435 \u0442\u043e\u0432\u0430\u0440\u0438\u0449\u0438 \u043e\u0431\u043e\u0436\u0430\u044e\u0442 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u0443 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0443 (\u043d\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e, \u0430 \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f), \u0430 \u043f\u043e\u0442\u043e\u043c \u2013 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u0442\u0430\u0448\u0438\u0442 \u043e\u0442 \u044d\u0442\u043e\u0439 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0447\u0442\u0435\u043d\u0438\u044f \u0434\u0430\u0442\u0430\u0448\u0438\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u0441 \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b \u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u0430\u0442\u0430\u0448\u0438\u0442\u0430 \u0443\u0436\u0435 \u043f\u043e\u0434\u0442\u0435\u0440\u0442\u044b.<br \/>  \u0422\u0430\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0430\u043d\u043d\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u0430\u0442\u0430\u0448\u0438\u0442\u0430 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0430\u044e\u0442, \u0447\u0442\u043e \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u0443\u043c\u0435\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0435 \u043f\u043e\u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u0443\u044e \u043c\u0430\u0441\u043a\u0443 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u0438, \u043e\u0434\u043d\u0430\u043a\u043e, \u0435\u0441\u043b\u0438 \u043f\u043e\u043a\u043e\u043f\u0430\u0442\u044c\u0441\u044f \u0433\u043b\u0443\u0431\u0436\u0435, \u0442\u043e \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u044d\u0442\u0430 \u0441\u0442\u0440\u043e\u0447\u043a\u0430 \u043f\u043e\u043f\u0430\u043b\u0430 \u0432 \u0434\u0430\u0442\u0430\u0448\u0438\u0442 \u043d\u0430 ILI9325 \u0438\u0437 \u0434\u0430\u0442\u0430\u0448\u0438\u0442\u0430 \u0434\u0440\u0443\u0433\u043e\u0433\u043e, \u044f\u043f\u043e\u043d\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u0438\u0442\u0430\u0439\u0446\u044b \u0431\u043b\u0430\u0433\u043e\u043f\u043e\u043b\u0443\u0447\u043d\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0438 \u043e\u0431\u043e\u0437\u0432\u0430\u043b\u0438 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u043c.<\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u0443\u0436\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043a Mini-STM32, \u0432\u0441\u0435 \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u2013 \u0443\u0437\u043d\u0430\u0442\u044c, \u043a \u043a\u0430\u043a\u043e\u043c\u0443 \u0438\u0437 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0432\u044b\u0431\u043e\u0440\u0430 \u0447\u0438\u043f\u0430 \u043e\u043d \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u0438 \u043a\u0430\u043a\u0430\u044f \u0438\u0437 \u0430\u0434\u0440\u0435\u0441\u043d\u044b\u0445 \u043b\u0438\u043d\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 RS.<br \/>  \u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0441\u0445\u0435\u043c\u0435, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 CS \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f FSMC_NE1, \u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 RS \u2013 FSMC_A16.<br \/>  \u0422\u0430\u043a\u0436\u0435 \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u0438\u043c\u0435\u0435\u0442 \u0441\u0438\u0433\u043d\u0430\u043b Reset, \u0432\u044b\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 PE1 \u0438 \u0441\u0438\u0433\u043d\u0430\u043b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u043e\u0439, \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0439 \u0441 PD13.<br \/>  \u0417\u0430\u043e\u0434\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a\u043e\u0439 \u0438\u0437 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0442\u044f\u0436\u043a\u0438 USB, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043f\u043e\u0437\u0436\u0435 \u2013 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u0435 \u044d\u0442\u043e PC13.<\/p>\n<p>  \u0418\u0442\u0430\u043a, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u043a\u043e\u0434\u0443.<\/p>\n<h4>\u0421\u043e\u0444\u0442<\/h4>\n<p>  <\/p>\n<h6>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 LCD<\/h6>\n<p>  \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0438\u0441\u043f\u043b\u0435\u0435\u043c. \u0420\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u0432 CooCox IDE. \u0412\u044b\u043d\u0435\u0441\u0435\u043c \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0432\u0441\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0438\u0437 \u0434\u0430\u0442\u0430\u0448\u0438\u0442\u0430:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 LCD<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#define CTR_OSC_START                   0x0000 #define CTR_DRV_OUTPUT1                 0x0001 #define CTR_DRV_WAVE                    0x0002 #define CTR_ENTRY_MODE                  0x0003 #define CTR_RESIZE                      0x0004 #define CTR_DISPLAY1                    0x0007 #define CTR_DISPLAY2                    0x0008 #define CTR_DISPLAY3                    0x0009 #define CTR_DISPLAY4                    0x000A #define CTR_RGB_INTERFACE1              0x000C #define CTR_FRM_MARKER                  0x000D #define CTR_RGB_INTERFACE2              0x000F #define CTR_POWER1                      0x0010 #define CTR_POWER2                      0x0011 #define CTR_POWER3                      0x0012 #define CTR_POWER4                      0x0013 #define CTR_HORZ_ADDRESS                0x0020 #define CTR_VERT_ADDRESS                0x0021 #define CTR_WRITE_DATA                  0x0022 #define CTR_READ_DATA                   0x0022 #define CTR_POWER7                      0x0029 #define CTR_FRM_COLOR                   0x002B #define CTR_GAMMA1                      0x0030 #define CTR_GAMMA2                      0x0031 #define CTR_GAMMA3                      0x0032 #define CTR_GAMMA4                      0x0035 #define CTR_GAMMA5                      0x0036 #define CTR_GAMMA6                      0x0037 #define CTR_GAMMA7                      0x0038 #define CTR_GAMMA8                      0x0039 #define CTR_GAMMA9                      0x003C #define CTR_GAMMA10                     0x003D #define CTR_HORZ_START                  0x0050 #define CTR_HORZ_END                    0x0051 #define CTR_VERT_START                  0x0052 #define CTR_VERT_END                    0x0053 #define CTR_DRV_OUTPUT2                 0x0060 #define CTR_BASE_IMAGE                  0x0061 #define CTR_VERT_SCROLL                 0x006A #define CTR_PIMG1_POS                   0x0080 #define CTR_PIMG1_START                 0x0081 #define CTR_PIMG1_END                   0x0082 #define CTR_PIMG2_POS                   0x0083 #define CTR_PIMG2_START                 0x0084 #define CTR_PIMG2_END                   0x0085 #define CTR_PANEL_INTERFACE1    \t0x0090 #define CTR_PANEL_INTERFACE2    \t0x0092 #define CTR_PANEL_INTERFACE4   \t\t0x0095 #define CTR_OTP_VCMPROGRAM              0x00A1 #define CTR_OTP_VCMSTATUS               0x00A2 #define CTR_OTP_IDKEY                   0x00A5 <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041c\u044b \u043f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430, \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a FSMC \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e\/\u0447\u0442\u0435\u043d\u0438\u0435\u043c \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u043e \u043a\u0430\u043a\u0438\u043c \u0438\u043c\u0435\u043d\u043d\u043e. \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u0432 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043c\u0430\u043d\u0443\u0430\u043b \u043d\u0430 STM32, \u0440\u0430\u0437\u0434\u0435\u043b FSMC, \u0438 \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0434\u043b\u044f NOR\/SRAM \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u044b \u0430\u0434\u0440\u0435\u0441\u0430, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0441 0x60000000.<br \/>  \u041f\u043e\u0434 \u0431\u0430\u043d\u043a\u0430\u043c\u0438 \u0432 \u0448\u0438\u0440\u043e\u043a\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435 \u0432 \u043c\u0430\u043d\u0443\u0430\u043b\u0435 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u044e\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0440\u0435\u0433\u0438\u043e\u043d\u044b, \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430, \u0442\u0430\u043a, \u0431\u0430\u043d\u043a #1 \u2013 \u044d\u0442\u043e NOR\/SRAM, \u0431\u0430\u043d\u043a\u0438 #2 \u0438 #3 \u2013 NAND, \u0431\u0430\u043d\u043a #4- PC Card.<br \/>  \u0412 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0431\u0430\u043d\u043a #1 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0446\u0435\u043b\u044b\u043c 4 \u0447\u0438\u043f\u0430\u043c \u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 \u0431\u044b\u0442\u044c NOR \u043b\u0438\u0431\u043e SRAM. \u0422\u0430\u043a \u043a\u0430\u043a \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043a\u0430\u043a NE1, \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u0431\u0430\u043d\u043a, \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043a\u0430\u043a FSMC_Bank1_NORSRAM1. \u0418\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430, \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 <\/p>\n<pre><code class=\"cpp\">#define LCDRegister \t(*((volatile uint16_t*) 0x60000000)) <\/code><\/pre>\n<p>  \u0410\u0434\u0440\u0435\u0441\u043e\u043c, \u0430\u043a\u0442\u0438\u0432\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u043c RS \u0431\u0443\u0434\u0435\u0442 \u0430\u0434\u0440\u0435\u0441, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0430\u043a\u0442\u0438\u0432\u043d\u0430 \u043b\u0438\u043d\u0438\u044f A16, \u0442\u043e \u0435\u0441\u0442\u044c, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 0x60000000 + (2&lt;&lt;16), \u0442\u043e \u0435\u0441\u0442\u044c 0x60020000, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u043f\u0438\u0448\u0435\u043c<\/p>\n<pre><code class=\"cpp\">#define LCDMemory\t\t(*((volatile uint16_t*) 0x60020000)) <\/code><\/pre>\n<p>  \u0418 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0434\u0438\u0441\u043f\u043b\u0435\u044f \u0438 \u0432 \u0435\u0433\u043e \u043f\u0430\u043c\u044f\u0442\u044c:<\/p>\n<pre><code class=\"cpp\">#define LCD_WRITE_REGISTER(REG, DATA)\tLCDRegister=REG;LCDMemory=DATA; #define LCD_BEGIN_RAM_WRITE\t\t\tLCDRegister=CTR_WRITE_DATA; #define LCD_WRITE_RAM(DATA)\t\t\tLCDMemory=DATA <\/code><\/pre>\n<p>  \u0417\u0430\u043e\u0434\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0434\u0435\u0444\u0430\u0439\u043d\u0430\u043c\u0438 \u0438\u043c\u0435\u043d\u0430 \u043f\u0438\u043d\u043e\u0432 \u0438 \u0438\u0445 \u043f\u043e\u0440\u0442\u043e\u0432, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0445 \u0437\u0430 \u0441\u0431\u0440\u043e\u0441 \u0434\u0438\u0441\u043f\u043b\u0435\u044f \u0438 \u0437\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0438:<\/p>\n<pre><code class=\"cpp\">#define BacklightPin \t\t\t\t\tGPIO_Pin_13 #define BacklightPort\t\t\t\t\tGPIOD  #define ResetPin \t\t\t\t\tGPIO_Pin_1 #define ResetPort\t\t\t\t\tGPIOE <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043a\u043e\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 FSMC \u0438 \u0441\u043e\u043f\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438: <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 FSMC<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">void LCDInitHardware() { \tSysTick_Config(SystemCoreClock\/1000); \tGPIO_InitTypeDef GPIO_InitStructure; \tFSMC_NORSRAMInitTypeDef  \t\tFSMC_InitStructure; \tFSMC_NORSRAMTimingInitTypeDef  \tFSMC_Timing;  \tRCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE); \tRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE); \tGPIO_InitStructure.GPIO_Pin = \tGPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | \t\t\t\t\t\t\t\t\tGPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10| \t\t\t\t\t\t\t\t\tGPIO_Pin_11| GPIO_Pin_14| GPIO_Pin_15; \/\/Interface \tGPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; \tGPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; \tGPIO_Init(GPIOD, &GPIO_InitStructure);  \tGPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | \t                              GPIO_Pin_11| GPIO_Pin_12| GPIO_Pin_13| GPIO_Pin_14 | \t                              GPIO_Pin_15;\t\/\/Interface \tGPIO_Init(GPIOE, &GPIO_InitStructure);  \tGPIO_InitStructure.GPIO_Pin = BacklightPin;\t\/\/Backlight \tGPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; \tGPIO_Init(BacklightPort, &GPIO_InitStructure);  \tGPIO_InitStructure.GPIO_Pin = ResetPin; \t\/\/Reset \tGPIO_Init(ResetPort, &GPIO_InitStructure);  \tGPIO_SetBits(ResetPort,ResetPin);  \tFSMC_Timing.FSMC_AddressSetupTime = 1; \tFSMC_Timing.FSMC_AddressHoldTime = 0; \tFSMC_Timing.FSMC_DataSetupTime = 5; \tFSMC_Timing.FSMC_BusTurnAroundDuration = 0; \tFSMC_Timing.FSMC_CLKDivision = 0; \tFSMC_Timing.FSMC_DataLatency = 0; \tFSMC_Timing.FSMC_AccessMode = FSMC_AccessMode_B;  \tFSMC_InitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1; \tFSMC_InitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; \tFSMC_InitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM; \tFSMC_InitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; \tFSMC_InitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; \tFSMC_InitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; \tFSMC_InitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; \tFSMC_InitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; \tFSMC_InitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; \tFSMC_InitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; \tFSMC_InitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; \tFSMC_InitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; \tFSMC_InitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; \tFSMC_InitStructure.FSMC_ReadWriteTimingStruct = &FSMC_Timing; \tFSMC_InitStructure.FSMC_WriteTimingStruct = &FSMC_Timing;  \tFSMC_NORSRAMInit(&FSMC_InitStructure); \tFSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE); } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0432\u0441\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u2013 \u043c\u044b \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0442\u0430\u0439\u043c\u0435\u0440 \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0432 \u043e\u0434\u043d\u0443 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0443 (\u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u0434\u0435\u0440\u0436\u0435\u043a \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u044f), \u043f\u043e\u0442\u043e\u043c \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0432\u0441\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0432\u043b\u0430\u0434\u0435\u0435\u0442 FSMC \u043a\u0430\u043a \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0435 \u201calternative functions\u201d, \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043f\u0438\u043d\u044b Reset \u0438 Backlight \u043a\u0430\u043a Output Push-Pull, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c FSMC. <br \/>  \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0442\u0430\u0439\u043c\u0438\u043d\u0433\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u043c\u0443, \u044f \u0436\u0435 \u0432\u0437\u044f\u043b \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u0435 \u0438\u0437 \u0430\u043f\u043d\u043e\u0443\u0442\u0430 \u043e\u0442 STM \u0438 \u043e\u043d\u0438 \u043f\u043e\u0434\u043e\u0448\u043b\u0438 \u043e\u0442\u043b\u0438\u0447\u043d\u043e. \u0412\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u0438\u043f \u043f\u0430\u043c\u044f\u0442\u0438 \u043a\u0430\u043a SRAM, \u0448\u0438\u0440\u0438\u043d\u0443 \u0448\u0438\u043d\u044b \u0432 16 \u0431\u0438\u0442, \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u044f \u0432\u0441\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0438\u0447\u0438, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0435 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0434\u0430\u0442\u0430\u0448\u0438\u0442\u0430.<br \/>  \u041e\u0431\u044a\u044f\u0432\u0438\u043c \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0443\u044e \u043d\u0430\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u043e\u0447\u043d\u0443\u044e \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u043d\u0430 SysTick-\u0442\u0430\u0439\u043c\u0435\u0440\u0435<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">volatile uint32_t Tick = 0x00000000; void SysTick_Handler() { \tif(Tick&gt;0) \t\tTick--; }  void SysTickDelay(uint32_t msDelay) { \tTick=msDelay; \twhile(Tick); } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043f\u0438\u0448\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0434\u0438\u0441\u043f\u043b\u0435\u044f:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f LCD<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">void LCDInit() { LCDHardwareReset();  LCD_WRITE_REGISTER(CTR_OSC_START, 0x0001); LCD_WRITE_REGISTER(CTR_DRV_OUTPUT1, 0x0100); LCD_WRITE_REGISTER(CTR_DRV_WAVE, 0x0700); LCD_WRITE_REGISTER(CTR_ENTRY_MODE, 0x1038); LCD_WRITE_REGISTER(CTR_RESIZE, 0x0000); LCD_WRITE_REGISTER(CTR_DISPLAY2, 0x0202); LCD_WRITE_REGISTER(CTR_DISPLAY3, 0x0000); LCD_WRITE_REGISTER(CTR_DISPLAY4, 0x0000); LCD_WRITE_REGISTER(CTR_RGB_INTERFACE1, 0x0001); LCD_WRITE_REGISTER(CTR_FRM_MARKER, 0x0000); LCD_WRITE_REGISTER(CTR_RGB_INTERFACE2, 0x0000);  LCD_WRITE_REGISTER(CTR_POWER1, 0x0000); LCD_WRITE_REGISTER(CTR_POWER2, 0x0007); LCD_WRITE_REGISTER(CTR_POWER3, 0x0000); LCD_WRITE_REGISTER(CTR_POWER4, 0x0000);  SysTickDelay(200);  LCD_WRITE_REGISTER(CTR_POWER1, 0x1590); LCD_WRITE_REGISTER(CTR_POWER2, 0x0227);  SysTickDelay(50);  LCD_WRITE_REGISTER(CTR_POWER3, 0x009C);  SysTickDelay(50);  LCD_WRITE_REGISTER(CTR_POWER4, 0x1900); LCD_WRITE_REGISTER(CTR_POWER7, 0x1900); LCD_WRITE_REGISTER(CTR_FRM_COLOR, 0x000E);  SysTickDelay(50);  LCD_WRITE_REGISTER(CTR_HORZ_ADDRESS, 0x0000); LCD_WRITE_REGISTER(CTR_VERT_ADDRESS, 0x0000);  LCD_WRITE_REGISTER(CTR_HORZ_START, 0x0000); LCD_WRITE_REGISTER(CTR_HORZ_END, 239); LCD_WRITE_REGISTER(CTR_VERT_START, 0x0000); LCD_WRITE_REGISTER(CTR_VERT_END, 319);  LCD_WRITE_REGISTER(CTR_DRV_OUTPUT2, 0x2700); LCD_WRITE_REGISTER(CTR_BASE_IMAGE, 0x0001); LCD_WRITE_REGISTER(CTR_VERT_SCROLL, 0x0000);  GPIO_SetBits(BacklightPort,BacklightPin); } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0438\u0437 \u0434\u0430\u0442\u0430\u0448\u0438\u0442\u0430 \u043d\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0434\u0438\u0441\u043f\u043b\u0435\u044f, \u0432\u0441\u0435 \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u2013 \u043f\u0440\u043e\u0441\u0442\u043e \u0432 \u043d\u0443\u0436\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b, \u0432\u043a\u043b\u044e\u0447\u0438\u0432 \u0435\u0433\u043e \u043e\u0441\u0446\u0438\u043b\u043b\u044f\u0442\u043e\u0440 \u0438 \u043f\u0438\u0442\u0430\u043d\u0438\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u044b\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438, \u0434\u0430\u0432\u0430\u044f \u0441\u0445\u0435\u043c\u0430\u0442\u0438\u043a\u0435 \u0434\u0438\u0441\u043f\u043b\u0435\u044f \u0432\u0440\u0435\u043c\u044f \u0443\u0441\u0442\u043e\u044f\u0442\u044c\u0441\u044f. \u0422\u0430\u043a\u0436\u0435 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u0440\u0435\u0436\u0438\u043c\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u0438\u0441\u043f\u043b\u0435\u044f, \u0442\u0430\u043a\u0438\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 GRAM \u2013 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u043b\u0438\u0431\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0442\u044c \u0441\u0447\u0435\u0442\u0447\u0438\u043a, \u0441\u0434\u0432\u0438\u0433\u0430\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0432\u043d\u0438\u0437 \u043b\u0438\u0431\u043e \u0432\u0432\u0435\u0440\u0445 \u2013 \u0442\u043e \u0435\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u0442\u044c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u043f\u0440\u0438 \u0438\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u0432\u044b\u0432\u043e\u0434\u0435.<br \/>  \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f LCDHardwareReset \u2013 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0431\u043b\u043e\u0447\u043e\u043a \u043a\u043e\u0434\u0430, \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043d\u0430 \u043b\u0438\u043d\u0438\u0438 Reset, \u0432\u044b\u0436\u0438\u0434\u0430\u044e\u0449\u0438\u0439 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0438 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0435\u0433\u043e \u0432 \u043d\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435:<\/p>\n<pre><code class=\"cpp\">void LCDHardwareReset() { \tGPIO_ResetBits(ResetPort,ResetPin); \tSysTickDelay(50); \tGPIO_SetBits(ResetPort,ResetPin); \tSysTickDelay(10); } <\/code><\/pre>\n<p>  \u0412\u0432\u0435\u0434\u0435\u043c \u0435\u0449\u0435 \u043f\u0430\u0440\u0443 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0445 \u0437\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0434\u0438\u0441\u043f\u043b\u0435\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430:<\/p>\n<pre><code class=\"cpp\">void LCDOn() { \t LCD_WRITE_REGISTER(CTR_DISPLAY1, 0x0133); }   void LCDOff() { \t LCD_WRITE_REGISTER(CTR_DISPLAY1, 0x0131); } <\/code><\/pre>\n<p>  \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u2014 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u0443\u044e \u0434\u043b\u044f \u043d\u0430\u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u0434\u0430\u0435\u0442 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a, \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u0430. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0432\u044b\u0432\u043e\u0434\u0430 \u043b\u0435\u0436\u0438\u0442 \u043d\u0430 \u043f\u043b\u0435\u0447\u0430\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u044f, \u0432\u0441\u0435 \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u2013 \u0437\u0430\u0434\u0430\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u044d\u0442\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438:<\/p>\n<pre><code class=\"cpp\"> void LCDSetBounds(uint16_t left, uint16_t top, uint16_t right, uint16_t bottom)  {     LCD_WRITE_REGISTER(CTR_VERT_START, left);     LCD_WRITE_REGISTER(CTR_VERT_END, right);     LCD_WRITE_REGISTER(CTR_HORZ_START, top);     LCD_WRITE_REGISTER(CTR_HORZ_END, bottom);      LCD_WRITE_REGISTER(CTR_HORZ_ADDRESS, top);     LCD_WRITE_REGISTER(CTR_VERT_ADDRESS, left);  } <\/code><\/pre>\n<p>  \u0418\u0437 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0437\u0430\u0434\u0430\u0435\u0442 \u043b\u0435\u0432\u0443\u044e, \u043f\u0440\u0430\u0432\u0443\u044e, \u0432\u0435\u0440\u0445\u043d\u044e\u044e \u0438 \u043d\u0438\u0436\u043d\u044e\u044e \u0433\u0440\u0430\u043d\u0438\u0446\u044b, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0432 \u043f\u043e\u0437\u0438\u0446\u0438\u044e, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u043b\u0435\u0432\u043e\u043c\u0443 \u043f\u0438\u043a\u0441\u0435\u043b\u044e.<br \/>  \u0422\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u0434\u0438\u0441\u043f\u043b\u0435\u044f, \u0430 \u043c\u044b \u0435\u0433\u043e \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u043c, \u0442\u043e \u043d\u0430\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c left \u0438 top \u043c\u0435\u0441\u0442\u0430\u043c\u0438, \u0437\u0430\u043d\u043e\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 left \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0435\u0441\u044f \u043a VERTICAL, \u0430 top \u2013 \u043a HORIZONTAL.<br \/>  \u041d\u0443 \u0438 \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u0438\u0441\u043f\u043b\u0435\u044f \u2013 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0438. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0433\u043e \u0436\u0435 \u0446\u0432\u0435\u0442\u043e\u0432\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 GRAM \u0434\u0438\u0441\u043f\u043b\u0435\u044f:<\/p>\n<pre><code class=\"cpp\">void LCDClear(uint16_t color)  {  \t LCDSetBounds(0,0,320-1,240-1);  \t LCD_BEGIN_RAM_WRITE;  \t uint32_t i;  \t for(i=0;i&lt;320*240;i++)  \t\t LCD_WRITE_RAM(color);  } <\/code><\/pre>\n<p>  \u0412\u0441\u0435, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u0430\u0448 \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u2013 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c<\/p>\n<pre><code class=\"cpp\">LCDInitHardware(); LCDInit(); LCDOn(); LCDClear(0x0000); <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0441\u0435 \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0441\u044f \u0438 \u0437\u0430\u043a\u0440\u0430\u0441\u0438\u0442\u0441\u044f \u0447\u0435\u0440\u043d\u044b\u043c. \u041f\u0440\u0438 \u0437\u0430\u043c\u0435\u043d\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 LCDClear \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u043a\u0440\u0430\u0441\u0438\u0442\u0441\u044f \u0432 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0446\u0432\u0435\u0442.<br \/>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u2013 USB.<\/p>\n<h6>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 USB<\/h6>\n<p>  \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 USB \u2013 \u043e\u0447\u0435\u043d\u044c \u043e\u0431\u0448\u0438\u0440\u043d\u0430\u044f \u0438 \u043c\u043d\u043e\u0433\u043e\u0433\u0440\u0430\u043d\u043d\u0430\u044f \u0442\u0435\u043c\u0430, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f\u0432\u043d\u043e \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u0442 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438.<br \/>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u043c, \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u043c\u0441\u044f USB In A Nutshell (<a href=\"http:\/\/www.beyondlogic.org\/usbnutshell\/usb1.shtml\">\u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f<\/a>, <a href=\"http:\/\/microsin.ru\/content\/view\/1107\/44\/\">\u0440\u0443\u0441\u0441\u043a\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f<\/a>) \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c.<br \/>  \u0415\u0441\u043b\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u043e \u043f\u043e\u0434\u0432\u0435\u0441\u0442\u0438 \u0438\u0442\u043e\u0433, \u0442\u043e \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043f\u043e\u043d\u044f\u0442\u0438\u0439 \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 USB \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f Endpoint, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u0442\u044f\u0436\u043a\u043e\u0439 \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u043c \u0441\u043e\u043a\u0435\u0442\u0430.<br \/>  \u0422\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u0441\u043e\u043a\u0435\u0442 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0434\u043b\u044f UDP \u043b\u0438\u0431\u043e \u0434\u043b\u044f TCP \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u044b \u0442\u043e\u0436\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u043e \u0442\u0438\u043f\u0430\u043c. <\/p>\n<ol>\n<li>Control Endpoints \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u0434\u043e 64 \u0431\u0430\u0439\u0442 \u0434\u043b\u0438\u043d\u043e\u0439 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 Full Speed USB. \u041d\u0443\u043b\u0435\u0432\u043e\u0439 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u043c USB \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0438 \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e Control. \u0427\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e \u0445\u043e\u0441\u0442 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u0414\u043e\u0441\u0442\u0430\u0432\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u044b \u044d\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0445\u043e\u0441\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043f\u043e\u0441\u043b\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435. Control Endpoint \u2013 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0434\u0432\u0443\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0442\u0438\u043f \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u043e\u0432, \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043b\u0438\u0431\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435, \u043b\u0438\u0431\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0434\u0430\u043d\u043d\u044b\u0445.<\/li>\n<li>Interrupt Endpoints \u2013 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u044b \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u0430\u0436\u0435\u043d \u043e\u043f\u0440\u043e\u0441 \u0445\u043e\u0441\u0442\u043e\u043c \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u043d\u043e\u0441\u0442\u044c\u044e (\u043c\u044b \u0432\u0435\u0434\u044c \u043f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e USB-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0441\u0430\u043c\u0438 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443, \u043e\u043d\u0438 \u0436\u0434\u0443\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043e\u0442 \u0445\u043e\u0441\u0442\u0430). \u041e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e\u0442 \u0442\u0438\u043f \u0442\u043e\u0447\u0435\u043a \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432 HID-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u0442\u0438\u043f\u0430 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b \u0438 \u043c\u044b\u0448\u0438. \u0420\u0430\u0437\u043c\u0435\u0440 \u043f\u0430\u043a\u0435\u0442\u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u043e 64 \u0431\u0430\u0439\u0442 \u0432 FS USB. \u0414\u043e\u0441\u0442\u0430\u0432\u043a\u0430 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430.<\/li>\n<li>Isochronous Endpoint \u2013 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439\u0441\u044f \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0430\u0443\u0434\u0438\u043e \u0438 \u0432\u0438\u0434\u0435\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u0433\u0434\u0435 \u043d\u0435 \u0441\u0442\u0440\u0430\u0448\u043d\u0430 \u043f\u043e\u0442\u0435\u0440\u044f \u043f\u0430\u043a\u0435\u0442\u0430 \u2013 \u0432 \u044d\u0442\u043e\u043c \u0442\u0438\u043f\u0435 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0435\u0440\u0435\u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f. \u0420\u0430\u0437\u043c\u0435\u0440 \u043f\u0430\u043a\u0435\u0442\u0430 \u0434\u043e 1024 \u0431\u0430\u0439\u0442 \u0432 FS USB.<\/li>\n<li>Bulk Enpoints \u2013 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0438\u043f \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439\u0441\u044f \u0432 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.<br \/>   \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u043f\u043e\u0441\u044b\u043b\u043a\u0443 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u043e\u0439 \u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0430 \u0434\u043e 64 \u0431\u0430\u0439\u0442\u043e\u0432 \u0434\u043b\u044f FS USB (\u0434\u043b\u044f High Speed \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0430\u043a\u0435\u0442\u0430 \u043c\u043e\u0436\u0435\u0442 \u0434\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u0434\u043e 1023 \u0431\u0430\u0439\u0442). \u0412 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 USB \u043d\u0430\u0448\u0435\u0439 STM32 \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u0443\u044e \u0434\u0432\u043e\u0439\u043d\u0443\u044e \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044f \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0443\u044e \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c.\u0412\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430\u044f \u043f\u043e\u043b\u043e\u0441\u0430 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u044f, \u043e\u0441\u0442\u0430\u0432\u0448\u0430\u044f\u0441\u044f \u043f\u043e\u0441\u043b\u0435 Interrupt, Control \u0438 Isochronous \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 Bulk-\u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0430\u043c\u0438 \u2013 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u043a\u0430\u043a\u0438\u0435 \u0435\u0449\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0438\u0434\u0443\u0442 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0441 Bulk.<\/li>\n<\/ol>\n<p>  \u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f \u0442\u0438\u043f \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0430 \u2014 Bulk, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0441\u043b\u0430\u0442\u044c \u0431\u043b\u043e\u043a\u0438 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0430 \u043d\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u0435, \u0438 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0432\u043e\u0439\u043d\u0443\u044e \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044e. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0430\u043c \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a\u0430\u044f-\u043b\u0438\u0431\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u043d\u043e\u0441\u0442\u044c \u0432 \u043f\u043e\u0441\u044b\u043b\u043a\u0430\u0445 \u0438 \u00ab\u043f\u043e\u0442\u043e\u043a\u043e\u0432\u0430\u044f\u00bb \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c Isochronous \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u043e\u0432, \u0442.\u043a. \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0434\u0442\u0438 \u0432 \u043d\u0435\u0441\u0436\u0430\u0442\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0434\u0438\u0441\u043f\u043b\u0435\u044f \u0438 \u0442\u0435\u0440\u044f\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u044b \u043d\u0430\u043c \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0438 \u043a \u0447\u0435\u043c\u0443.<br \/>  \u0427\u0442\u043e\u0431\u044b \u0445\u043e\u0441\u0442 \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0437\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u0447\u0442\u043e \u0443 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u0437\u0430 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u044b \u0438 \u043a\u0430\u043a\u0438\u0435 \u0443 \u043d\u0435\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u0445\u043e\u0441\u0442 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u041a\u043e\u043d\u0442\u0440\u043e\u043b \u042d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 #0.<br \/>  \u041e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u0430\u044f \u0438\u043c\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0430 \u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 \u0438\u0437 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u043e\u0439 \u0432\u044b\u0448\u0435 \u0441\u0442\u0430\u0442\u044c\u0438:<br \/>  <img decoding=\"async\" src=\"http:\/\/www.beyondlogic.org\/usbnutshell\/desctree.gif\" alt=\"image\"\/><br \/>  \u0412\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a \u043d\u0438\u043c\u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0437\u0436\u0435, \u0430 \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u044e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043d\u0430\u0448\u0443 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 USB. \u0411\u0443\u0434\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438 \u043f\u043e \u043f\u0443\u043d\u043a\u0442\u0430\u043c.  <\/p>\n<ol>\n<li>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c <a href=\"http:\/\/www.st.com\/internet\/com\/SOFTWARE_RESOURCES\/SW_COMPONENT\/FIRMWARE\/stm32_usb-fs-device_lib.zip\">\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043e\u0442 STM \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 USB<\/a> \u0441 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430\u0438 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u043c \u043f\u0430\u043f\u043a\u0443 STM32_USB-FS-Device_Driver \u0438\u0437 \u043d\u0435\u0434\u0440 \u0441\u043a\u0430\u0447\u0430\u043d\u043d\u043e\u0433\u043e \u0430\u0440\u0445\u0438\u0432\u0430 (\u043b\u0435\u0436\u0438\u0442 \u0432 \u043f\u0430\u043f\u043a\u0435 Libraries) \u0432 \u043f\u0430\u043f\u043a\u0443 \u0441 \u043d\u0430\u0448\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0433\u043e \u0432 \u043f\u0440\u043e\u0435\u043a\u0442, \u0432\u044b\u0431\u0440\u0430\u0432 <b>File \u2013 Add Linked Folder<\/b>. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u043e\u0432\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u0432 \u043d\u0430\u0448 \u043f\u0440\u043e\u0435\u043a\u0442, \u043e\u0431\u043e\u0437\u0432\u0430\u0432 \u0435\u0435 \u043a\u0430\u043a-\u043d\u0438\u0431\u0443\u0434\u044c \u0442\u0438\u043f\u0430 usb_user, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u0439\u043b\u044b hw_config.h \u0438 usb_conf.h \u2013 \u044d\u0442\u0438 \u0444\u0430\u0439\u043b\u044b \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043e\u0442 STM.<br \/>  \u0412 hw_config.h \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u043f\u0438\u0448\u0435\u043c\n<pre><code class=\"cpp\">#include &quot;stm32f10x.h&quot; <\/code><\/pre>\n<p>  \u0438\u043d\u0430\u0447\u0435 \u0431\u0443\u0434\u0435\u0442 \u043a\u0443\u0447\u0430 \u044d\u0440\u0440\u043e\u0440\u043e\u0432 \u043e\u0442 \u043d\u0435\u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 (uint8_t, uint16_t, uint32_t,\u2026) <br \/>  \u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0430\u043f\u043a\u0443 \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u0438 \u043d\u0430\u0448\u0443 usb_user \u043a\u0430\u043a \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0443\u0442\u0438 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0438\u043d\u043a\u043b\u0443\u0434\u043e\u0432.  <\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 usb_user \u043d\u043e\u0432\u044b\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432, \u043d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0433\u043e, \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c, usb_desc.h, \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0432 \u0442\u0443\u0434\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:\n<pre><code class=\"cpp\">#include &quot;usb_lib.h&quot;  #define SIZ_DEVICE_DESC\t\t0x12 #define SIZ_CONFIG_DESC\t\t0x19 #define SIZ_STRING_LANGID\t0x04 #define SIZ_STRING_VENDOR\t0x10 #define SIZ_STRING_PRODUCT\t0x10 #define SIZ_STRING_SERIAL\t0x12  extern const uint8_t USB_ConfigDescriptor[SIZ_CONFIG_DESC];  extern ONE_DESCRIPTOR Device_Descriptor; extern ONE_DESCRIPTOR Config_Descriptor; extern ONE_DESCRIPTOR String_Descriptor[4]; <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0434\u0435\u0444\u0430\u0439\u043d\u044b, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u043d\u0430 \u00ab<b>SIZ_<\/b>\u00bb \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0431\u0443\u0434\u0443\u0449\u0438\u0445 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u044b \u0443\u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b, \u043d\u043e \u0442.\u043a. \u044f \u0443\u0436\u0435 \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0434\u0435\u0432\u0430\u0439\u0441, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<br \/>  <b>extern const uint8_t USB_ConfigDescriptor<\/b> \u043c\u044b \u0432\u044b\u043d\u043e\u0441\u0438\u043c \u0432 \u0445\u0435\u0434\u0435\u0440 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f. \u041a \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430\u043c \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u043f\u043e \u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435, \u0447\u0442\u043e \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0435 \u0441\u0430\u043c\u0438 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u044b \u0432 \u0432\u0438\u0434\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 uint_8, \u0430 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u043e\u0432\u0443\u0442\u0441\u044f <b>ONE_DESCRIPTOR<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u043f\u043e \u0442\u0430\u043a\u043e\u043c\u0443 \u0441\u043b\u0443\u0447\u0430\u044e, \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u044b \u043d\u0438\u0436\u0435. \u0412 \u043d\u0438\u0445 \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u0442\u0440\u0430\u0448\u043d\u043e\u0433\u043e \u043d\u0435\u0442, \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438\u0437 \u0434\u0432\u0443\u0445 \u0447\u043b\u0435\u043d\u043e\u0432, \u043f\u0435\u0440\u0432\u044b\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u2013 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0432 \u0432\u0438\u0434\u0435 <b>uint8_t*<\/b>, \u0432\u0442\u043e\u0440\u043e\u0439 \u2013 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0438\u0431\u0438\u0442\u043d\u0430\u044f \u0434\u043b\u0438\u043d\u0430 \u044d\u0442\u043e\u0433\u043e \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430.<br \/>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430\u043c, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u043d\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b usb_desc.c \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0432 \u0442\u0443\u0434\u0430 \u043d\u0430\u0448 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a.<br \/>  \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 \u043e\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044f \u0441\u0430\u043c\u043e\u0433\u043e \u0434\u0435\u0432\u0430\u0439\u0441\u0430. \u0412\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u043e\u043b\u044f\u0445 \u0435\u0441\u0442\u044c \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 USB In A Nutshell, \u043e\u0442\u043c\u0435\u0447\u0443 \u0442\u043e\u043b\u044c\u043a\u043e, \u0447\u0442\u043e \u0432\u0441\u0435 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u0441 \u0431\u0430\u0439\u0442\u043e\u0432\u043e\u0439 \u0434\u043b\u0438\u043d\u044b \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430 (\u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0438\u0445 \u0438 \u0432\u044b\u043d\u0435\u0441\u043b\u0438 \u0432 \u0434\u0435\u0444\u0430\u0439\u043d\u044b), \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0431\u0430\u0439\u0442 \u2013 \u0442\u0438\u043f \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430.<br \/>  \u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \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 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">const uint8_t USB_DeviceDescriptor[SIZ_DEVICE_DESC] =   {     0x12,   \/* bLength *\/     0x01,   \/* bDescriptorType *\/     0x00,     0x02,   \/* bcdUSB = 2.00 *\/     0xFF,   \/* bDeviceClass: Vendor Specific *\/     0x00,   \/* bDeviceSubClass *\/     0x00,   \/* bDeviceProtocol *\/     0x40,   \/* bMaxPacketSize0 *\/     0xAD,     0xDE,   \/* idVendor*\/     0x0D,     0xF0,   \/* idProduct*\/     0x00,     0x01,   \/* bcdDevice = 2.00 *\/     1,              \/* Index of string descriptor describing manufacturer *\/     2,              \/* Index of string descriptor describing product *\/     3,              \/* Index of string descriptor describing the device's serial number *\/     0x01    \/* bNumConfigurations *\/   }; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u00abvendor-specific\u00bb \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e (\u043d\u0435 \u043f\u0440\u0435\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u0435 \u043d\u0438 \u043a \u043a\u0430\u043a\u043e\u043c\u0443 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c\u0443 \u043f\u0440\u0435\u0434\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u043a\u043b\u0430\u0441\u0441\u0443 \u0432\u0440\u043e\u0434\u0435 HID), \u0441 VID= 0xDEAD \u0438 PID = 0xF00D, \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0430 64 \u0431\u0430\u0439\u0442\u0430.<br \/>  \u0414\u0430\u043b\u044c\u0448\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u044b \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0438 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u043e\u0432:<\/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<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">const uint8_t USB_ConfigDescriptor[SIZ_CONFIG_DESC] =   {     \/*Configuration Descriptor*\/     0x09,   \/* bLength: Configuration Descriptor size *\/     0x02,      \/* bDescriptorType: Configuration *\/     SIZ_CONFIG_DESC,       \/* wTotalLength:no of returned bytes *\/     0x00,     0x01,   \/* bNumInterfaces: 1 interface *\/     0x01,   \/* bConfigurationValue: Configuration value *\/     0x00,   \/* iConfiguration: Index of string descriptor describing the configuration *\/     0xE0,   \/* bmAttributes: bus powered *\/     0x32,   \/* MaxPower 100 mA *\/      \/*Interface Descriptor*\/     0x09,   \/* bLength: Interface Descriptor size *\/     0x04,  \/* bDescriptorType: Interface *\/     0x00,   \/* bInterfaceNumber: Number of Interface *\/     0x00,   \/* bAlternateSetting: Alternate setting *\/     0x01,   \/* bNumEndpoints: One endpoints used *\/     0xFF,   \/* bInterfaceClass: Vendor Specific*\/     0x00,   \/* bInterfaceSubClass*\/     0x00,   \/* bInterfaceProtocol*\/     0x00,   \/* iInterface: *\/     \/*Endpoint 1 Descriptor*\/     0x07,   \/* bLength: Endpoint Descriptor size *\/     0x05,   \/* bDescriptorType: Endpoint *\/     0x01,   \/* bEndpointAddress: (OUT1) *\/     0x02,   \/* bmAttributes: Bulk *\/     0x40,      \/* wMaxPacketSize: *\/     0x00,     0x00   \/* bInterval: *\/   }; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0422\u0443\u0442 \u043d\u0430\u0434\u043e \u0431\u044b\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u2013 \u043f\u0435\u0440\u0432\u044b\u043c \u0431\u0430\u0439\u0442\u043e\u043c \u0438\u0434\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u043e\u043b\u044c\u043a\u043e, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043a\u043e\u043d\u0444\u0438\u0433-\u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0432\u0435\u043d 0\u044509 \u0431\u0430\u0439\u0442\u0430\u043c. \u0414\u0430\u043b\u044c\u0448\u0435 \u0438\u0434\u0435\u0442 \u0442\u0438\u043f \u044d\u0442\u043e\u0433\u043e \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430, \u0430 \u0432\u043e\u0442 \u0441\u043b\u0435\u0434\u043e\u043c \u0438\u0434\u0435\u0442 \u0434\u0432\u0443\u0445\u0431\u0430\u0439\u0442\u043e\u0432\u0430\u044f \u0434\u043b\u0438\u043d\u0430 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440, \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u044b \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u0438 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u043e\u0432. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d\u0430 \u0432\u043f\u0438\u0441\u0430\u043b\u0430\u0441\u044c \u0432 \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442, \u0442\u0430\u043a \u0447\u0442\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0443\u043b\u0435\u043c.<br \/>  \u0414\u0430\u043b\u044c\u0448\u0435 \u043f\u0438\u0448\u0435\u043c \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u043e\u0434\u0438\u043d \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043e\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f (\u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u0430\u044f \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443 0), \u0447\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0448\u0438\u043d\u044b \u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0435\u0442 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 100 \u043c\u0410.<br \/>  \u0414\u0430\u043b\u044c\u0448\u0435 \u0432 \u0442\u043e\u043c \u0436\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u0438\u0434\u0435\u0442 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0432 \u0442\u0435 \u0436\u0435 0\u044509 \u0431\u0430\u0439\u0442, \u0434\u0432\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u0430, \u043e\u0431\u0430 \u043d\u0443\u043b\u0438, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0445\u043e\u0441\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u044d\u0442\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u043e\u0432 \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u044f \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u2013 \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043e\u0434\u0438\u043d, \u043a\u043b\u0430\u0441\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u043e\u043f\u044f\u0442\u044c \u00abVendor Specific\u00bb, \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0441\u0430\u0431\u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432, \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0445 \u043e\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u0435\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 (\u043d\u0443\u043b\u0438 \u0432\u043e \u0432\u0441\u0435\u0445 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0431\u0430\u0439\u0442\u0430\u0445).<br \/>  \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u0438\u0434\u0435\u0442 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u043d\u0430\u0448\u0435\u0433\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0430. \u042d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 0 \u0432 \u0442\u0430\u043a\u043e\u0432\u043e\u043c \u043d\u0435 \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u0440\u0430\u0437\u0443 Bulk Endpoin 1. \u0411\u0430\u0439\u0442 \u0430\u0434\u0440\u0435\u0441\u0430 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u043e\u043c\u0435\u0440 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0430 \u043d\u043e \u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0441\u0432\u043e\u0438\u043c \u0441\u0442\u0430\u0440\u0448\u0438\u043c \u0431\u0438\u0442\u043e\u043c. \u0417\u0430\u0434\u0430\u0435\u043c \u0442\u0438\u043f \u2013 Bulk, \u043f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0430\u043a\u0435\u0442\u0430 (\u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u043f\u043e\u0434 \u043d\u0435\u0433\u043e \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u044b \u0434\u0432\u0430 \u0431\u0430\u0439\u0442\u0430!) \u0438 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0431\u0430\u0439\u0442 \u0440\u0430\u0432\u043d\u044b\u043c \u043d\u0443\u043b\u044e, \u0442.\u043a. \u043e\u043d \u043d\u0435 \u0438\u0433\u0440\u0430\u0435\u0442 \u0440\u043e\u043b\u0438 \u0434\u043b\u044f Bulk-\u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u043e\u0432.<br \/>  \u0414\u0430\u043b\u044c\u0448\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0435 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u044b:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0435 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u044b<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">\/* USB String Descriptors *\/ const uint8_t USB_StringLangID[SIZ_STRING_LANGID] =   { \tSIZ_STRING_LANGID,\t\/* bLength *\/     0x03,\t\/* String descriptor *\/     0x09,     0x04 \/* LangID = 0x0409: U.S. English *\/   };  const uint8_t USB_StringVendor[SIZ_STRING_VENDOR] =   { \tSIZ_STRING_VENDOR,    \t\t \/* Size of Vendor string *\/     0x03,            \/* bDescriptorType*\/     \/* Manufacturer: &quot;Amon-Ra&quot; *\/     'A', 0, 'm', 0, 'o', 0, 'n', 0, '-', 0, 'R', 0, 'a', 0   };  const uint8_t USB_StringProduct[SIZ_STRING_PRODUCT] =   { \tSIZ_STRING_PRODUCT,          \/* bLength *\/     0x03,        \/* bDescriptorType *\/     \/* Product name: &quot;USB LCD&quot; *\/     'U', 0, 'S', 0, 'B', 0, ' ', 0, 'L', 0, 'C', 0, 'D', 0   };  uint8_t USB_StringSerial[SIZ_STRING_SERIAL] =   { \tSIZ_STRING_SERIAL,           \/* bLength *\/     0x03,           \/* bDescriptorType *\/     'U', 0, 'S', 0, 'B', 0, 'L', 0, 'C', 0, 'D', 0, '0', 0, '1', 0   }; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0421\u0442\u0440\u043e\u043a\u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u044e\u043d\u0438\u043a\u043e\u0434\u043e\u043c \u0438 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u043e \u0436\u0435\u043b\u0430\u043d\u0438\u044e. <br \/>  \u041d\u0430\u043a\u043e\u043d\u0435\u0446 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u043b\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">ONE_DESCRIPTOR Device_Descriptor =   {     (uint8_t*)USB_DeviceDescriptor,     SIZ_DEVICE_DESC   };  ONE_DESCRIPTOR Config_Descriptor =   {     (uint8_t*)USB_ConfigDescriptor,     SIZ_CONFIG_DESC   };  ONE_DESCRIPTOR String_Descriptor[4] =   {     {(uint8_t*)USB_StringLangID, SIZ_STRING_LANGID},     {(uint8_t*)USB_StringVendor, SIZ_STRING_VENDOR},     {(uint8_t*)USB_StringProduct, SIZ_STRING_PRODUCT},     {(uint8_t*)USB_StringSerial, SIZ_STRING_SERIAL}   }; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/li>\n<li>\u0412\u043d\u0435\u0441\u0435\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432 usb_conf.h:\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 usb_conf.h<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#define EP_NUM\t\t\t0x02  #define BTABLE_ADDRESS      (0x00)  \/* EP0  *\/ \/* rx\/tx buffer base address *\/ #define ENDP0_RXADDR        (0x40) #define ENDP0_TXADDR        (0x80)  \/* EP1  *\/ \/* tx buffer base address *\/ #define ENDP1_RXADDR        (0xC0)  \/* IMR_MSK *\/ \/* mask defining which events has to be handled *\/ \/* by the device application software *\/ #define IMR_MSK (CNTR_CTRM  | CNTR_RESETM) <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u0438\u0437 \u0432\u044b\u0448\u0435\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u0438 \u043d\u0443\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u0438 \u043a\u043e\u0434\u0430 \u0432 \u043d\u0430\u0448\u0435\u043c \u0433\u043b\u0430\u0432\u043d\u043e\u043c \u043c\u043e\u0434\u0443\u043b\u0435. \u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u2014 <b>IMR_MSK<\/b>, \u043c\u0430\u0441\u043a\u0430, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0430\u044f, \u043a\u0430\u043a\u0438\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f USB \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f. \u0412\u044b\u0441\u0442\u0430\u0432\u0438\u043c \u0435\u0435 \u0432 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u2013 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 Correct Transfer \u0438 Reset.<br \/>  \u0410\u0434\u0440\u0435\u0441\u0430 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u043e\u0432 \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 PMA, Packet Memory Area, \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0434\u043b\u0438\u043d\u044b \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u0422\u0430\u043a \u043a\u0430\u043a \u0434\u043b\u044f \u043e\u0431\u043e\u0438\u0445 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u043e\u0432 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0430\u043a\u0435\u0442\u0430 \u0437\u0430\u0434\u0430\u043d \u0432 64 \u0431\u0430\u0439\u0442\u0430, \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u043c \u0438\u0445 \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c, \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u044f \u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u044d\u0442\u0438\u0445 \u0441\u0430\u043c\u044b\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0442\u0430\u043c \u0436\u0435 \u0438 \u0442\u043e\u0436\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u0435\u0441\u0442\u043e.   <\/li>\n<li>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u043e\u043b\u0431\u044d\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430. \u042d\u0442\u0438 \u043a\u043e\u043b\u0431\u044d\u043a\u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <b>DEVICE_PROP<\/b> \u0438 <b>USER_STANDARD_REQUESTS<\/b>, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043a\u0430\u0442\u044c \u0438\u0445 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u043f\u043e\u0434 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 <b>Device_Property<\/b> \u0438 <b>User_Standard_Requests<\/b>.<br \/>  \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u043a\u043e\u043b\u0431\u044d\u043a\u0430, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0432 \u0441\u0430\u043c\u043e\u043c-\u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435, \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 USB-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u0447\u044c\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u0441\u0431\u0440\u043e\u0441\u0443 USB-\u043a\u043b\u043e\u043a\u0430, \u0432\u044b\u0437\u043e\u0432\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u0430\u043a\u0442\u0438\u0432\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0434\u0442\u044f\u0436\u043a\u0438 \u043d\u0430 \u043b\u0438\u043d\u0438\u0438 USB, \u0447\u0442\u043e \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0445\u043e\u0441\u0442 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043d\u0430\u0441 \u043d\u0430 \u0448\u0438\u043d\u0435.\n<div class=\"spoiler\"><b class=\"spoiler_title\">void Device_init()<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">void Device_init() { \t DEVICE_INFO *pInfo = &Device_Info; \t pInfo-&gt;Current_Configuration = 0;  \t _SetCNTR(CNTR_FRES);\t\t\/\/Reset USB block \t _SetCNTR(0);\t\t\t\t\/\/Deassert reset signal \t _SetISTR(0);\t\t\t\t\/\/Clear pending interrupts \t USB_SIL_Init(); \t GPIO_ResetBits(GPIOC, GPIO_Pin_13); \/\/Enable pull-up } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>   \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u043b\u0431\u044d\u043a \u0432\u044b\u0437\u044b\u0432\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0445\u043e\u0441\u0442 \u0437\u0430\u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u0431\u0440\u043e\u0441 \u043d\u0430\u0448\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">void Device_Reset()<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">void Device_Reset() { \t \/\/Set device as not configured \t  pInformation-&gt;Current_Configuration = 0; \t  pInformation-&gt;Current_Interface = 0;\t\t\/\/the default Interface \t  \/* Current Feature initialization *\/ \t  pInformation-&gt;Current_Feature = USB_ConfigDescriptor[7];  \t  SetBTABLE(BTABLE_ADDRESS);  \t  \/* Initialize Endpoint 0 *\/ \t  SetEPType(ENDP0, EP_CONTROL); \t  SetEPTxStatus(ENDP0, EP_TX_STALL); \t  SetEPRxAddr(ENDP0, ENDP0_RXADDR); \t  SetEPTxAddr(ENDP0, ENDP0_TXADDR); \t  Clear_Status_Out(ENDP0); \t  SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); \t  SetEPRxValid(ENDP0);  \t  SetEPType(ENDP1, EP_BULK); \t  SetEPRxAddr(ENDP1, ENDP1_RXADDR); \t  SetEPRxCount(ENDP1, 0x40); \t  SetEPRxStatus(ENDP1, EP_RX_VALID); \t  SetEPTxStatus(ENDP1, EP_TX_DIS);  \t  \/* Set this device to response on default address *\/ \t  SetDeviceAddress(0); } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0422\u0443\u0442 \u043c\u044b \u0437\u0430\u0434\u0430\u0435\u043c \u0432\u0441\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u043e\u0432, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 \u0430\u0434\u0440\u0435\u0441 0, \u0447\u0442\u043e\u0431\u044b \u0445\u043e\u0441\u0442 \u043c\u043e\u0433 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u043d\u0435\u043c\u0443 \u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439.<br \/>  \u0414\u0430\u043b\u044c\u0448\u0435 \u0438\u0434\u0435\u0442 \u043f\u0430\u0440\u0430 \u043a\u043e\u043b\u0431\u044d\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c<\/p>\n<pre><code class=\"cpp\">#define Device_Status_In \t\tNOP_Process #define Device_Status_Out\t\tNOP_Process <\/code><\/pre>\n<p>  \u0427\u0435\u0441\u0442\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u044f \u043d\u0435 \u043d\u0430\u0448\u0435\u043b \u0434\u0430\u0436\u0435 \u043c\u0435\u0441\u0442\u0430, \u0433\u0434\u0435 \u043e\u043d\u0438 \u0437\u043e\u0432\u0443\u0442\u0441\u044f, \u0432\u0438\u0434\u0438\u043c\u043e, \u0438\u0445 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0437\u0432\u0430\u0442\u044c \u0438\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u0434\u0430, \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e.<br \/>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043f\u0430\u0440\u0430 \u043a\u043e\u043b\u0431\u044d\u043a\u043e\u0432 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0434\u043b\u044f \u0441\u043b\u0443\u0447\u0430\u044f, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043a\u0430\u043a\u0443\u044e-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0447\u0435\u0440\u0435\u0437 Control Endpoint 0, \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0449\u0443\u044e\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430:<\/p>\n<pre><code class=\"cpp\">RESULT Device_Data_Setup(uint8_t RequestNo) {   return USB_UNSUPPORT; }  RESULT Device_NoData_Setup(uint8_t RequestNo) {   return USB_UNSUPPORT; }  <\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u043c, \u0442\u043e, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f, \u0441\u043a\u0430\u0436\u0435\u043c \u0445\u043e\u0441\u0442\u0443, \u0447\u0442\u043e \u043c\u044b \u044d\u0442\u043e \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c. \u0412 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0441\u044e\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0445\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u043e\u0439, \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043f\u0438\u0442\u0430\u043d\u0438\u0435\u043c \u0438\u043b\u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0434\u0438\u0441\u043f\u043b\u0435\u044f.<br \/>  \u0414\u0430\u043b\u044c\u0448\u0435 \u0438\u0434\u0435\u0442 \u043a\u043e\u043b\u0431\u044d\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0435\u0440\u043d\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0445\u043e\u0441\u0442 \u0437\u0430\u0445\u043e\u0447\u0435\u0442 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b. \u0422\u0430\u043a \u043a\u0430\u043a \u0443 \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d, \u0433\u043e\u0432\u043e\u0440\u0438\u043c <b>USB_UNSUPPORT<\/b> \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043f\u043e \u043b\u044e\u0431\u044b\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c \u043a\u0440\u043e\u043c\u0435 \u043d\u0443\u043b\u044f.<\/p>\n<pre><code class=\"cpp\">RESULT Device_Get_Interface_Setting(uint8_t Interface, uint8_t AlternateSetting) {   if (AlternateSetting &gt; 0)   {     return USB_UNSUPPORT;   }   else if (Interface &gt; 0)   {     return USB_UNSUPPORT;   }   return USB_SUCCESS; } <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0442\u0440\u0438 \u043a\u043e\u043b\u0431\u044d\u043a\u0430 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u0434\u043b\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0445 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432 \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u043e\u0439 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0430\u043c\u0438 STM \u043c\u0430\u043d\u0435\u0440\u0435, \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0445 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">uint8_t *Device_GetDeviceDescriptor(uint16_t Length) {   return Standard_GetDescriptorData(Length, &Device_Descriptor); }  uint8_t *Device_GetConfigDescriptor(uint16_t Length) {   return Standard_GetDescriptorData(Length, &Config_Descriptor); }  uint8_t *Device_GetStringDescriptor(uint16_t Length) {   uint8_t wValue0 = pInformation-&gt;USBwValue0;   if (wValue0 &gt; 4)   {     return NULL;   }   else   {     return Standard_GetDescriptorData(Length, &String_Descriptor[wValue0]);   } } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u0432\u0441\u0435, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443:<\/p>\n<pre><code class=\"cpp\">DEVICE_PROP Device_Property =   {     Device_init,     Device_Reset,     Device_Status_In,     Device_Status_Out,     Device_Data_Setup,     Device_NoData_Setup,     Device_Get_Interface_Setting,     Device_GetDeviceDescriptor,     Device_GetConfigDescriptor,     Device_GetStringDescriptor,     0,     0x40 \/*MAX PACKET SIZE*\/   }; <\/code><\/pre>\n<p>  <\/li>\n<li>\u0422\u0435\u043f\u0435\u0440\u044c \u043e\u043f\u0438\u0448\u0435\u043c \u043a\u043e\u043b\u0431\u044d\u043a\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, <b>User_Standard_Requests<\/b>.<br \/>  \u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0442\u0440\u0443\u0434\u043d\u043e \u2014 \u0442.\u043a. \u043c\u044b \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u043c\u0441\u044f HID \u0438\u043b\u0438 \u0435\u0449\u0435 \u043a\u0430\u043a\u0438\u043c-\u043d\u0438\u0431\u0443\u0434\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0441\u0442\u0440\u043e\u0433\u0438\u0439 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u043d\u0430 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0440\u0435\u043a\u0432\u0435\u0441\u0442\u044b, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0431\u0435\u0437\u0431\u043e\u044f\u0437\u043d\u0435\u043d\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0438\u0445 \u0432\u0441\u0435 \u043a\u0430\u043a <b>NOP_Process<\/b>. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u0443\u0433\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0432 <b>User_SetDeviceAddress<\/b> \u043c\u044b \u043e\u0441\u0442\u0430\u043d\u0435\u043c\u0441\u044f \u0431\u0435\u0437 \u0430\u0434\u0440\u0435\u0441\u0430 \u2013 \u044d\u0442\u043e\u0442 \u043a\u043e\u043b\u0431\u044d\u043a \u043d\u043e\u0441\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440 \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0430\u0434\u0440\u0435\u0441 \u0431\u044b\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d.\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 User_Standard_Requests<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#define Device_GetConfiguration\t\t\tNOP_Process #define Device_SetConfiguration\t\t\tNOP_Process #define Device_GetInterface\t\t\tNOP_Process #define Device_SetInterface\t\t\tNOP_Process #define Device_GetStatus\t\t\tNOP_Process #define Device_ClearFeature\t\t\tNOP_Process #define Device_SetEndPointFeature\t\tNOP_Process #define Device_SetDeviceFeature\t\t\tNOP_Process #define Device_SetDeviceAddress\t\t\tNOP_Process  USER_STANDARD_REQUESTS User_Standard_Requests =   {     Device_GetConfiguration,     Device_SetConfiguration,     Device_GetInterface,     Device_SetInterface,     Device_GetStatus,     Device_ClearFeature,     Device_SetEndPointFeature,     Device_SetDeviceFeature,     Device_SetDeviceAddress   }; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/li>\n<li>\u0422\u0435\u043f\u0435\u0440\u044c \u043e\u043f\u0438\u0448\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439:<br \/> \n<pre><code class=\"cpp\">__IO uint16_t wIstr;  DEVICE Device_Table =   {     EP_NUM,     1   }; <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0441 \u0442\u0435\u043a\u0443\u0449\u0438\u043c\u0438 \u0444\u043b\u0430\u0433\u0430\u043c\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f, \u0438 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u043e\u0432 (\u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043d\u0443\u043b\u0435\u0432\u043e\u0439) \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439.   <\/li>\n<li>\u0414\u0430\u043b\u0435\u0435 \u043e\u0431\u044a\u044f\u0432\u0438\u043c \u043f\u0430\u0440\u0443 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u2013 \u043e\u043d\u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439, \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0437\u043e\u0432\u0435\u043c \u0438\u0445 \u0438\u0437 \u0433\u043b\u0430\u0432\u043d\u043e\u0439:\n<div class=\"spoiler\"><b class=\"spoiler_title\">void USB_Interrupts_Config(void) \u0438 void Set_USBClock()<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">void USB_Interrupts_Config(void) {   NVIC_InitTypeDef NVIC_InitStructure;    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);    NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;   NVIC_Init(&NVIC_InitStructure);     NVIC_InitStructure.NVIC_IRQChannel = USB_HP_CAN1_TX_IRQn;   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;   NVIC_Init(&NVIC_InitStructure); }  void Set_USBClock() {   \/* Select USBCLK source *\/   RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);   \/* Enable the USB clock *\/   RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE); } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u043c \u0434\u0432\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f.<br \/>   Low-Priority \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u043c\u0438 \u0443\u0441\u0431 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u043c\u0438 (\u0443\u0441\u043f\u0435\u0448\u043d\u044b\u043c\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430\u043c\u0438, \u0440\u0435\u0437\u0435\u0442\u043e\u043c \u0438 \u043f\u0440\u043e\u0447\u0438\u043c\u0438), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043d\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0438\u043d\u0442\u0435\u0440\u0440\u0430\u043f\u0442\u0430.<br \/>  \u0412\u044b\u0441\u043e\u043a\u043e\u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u043e\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 Isochronous \u043b\u0438\u0431\u043e Bulk \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0430 \u0441 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0435\u0439, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043e \u0434\u043b\u044f \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 (\u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a). \u0422\u0430\u043a \u043a\u0430\u043a \u0443 \u043d\u0430\u0441 \u043f\u043e\u043a\u0430 \u043d\u0435\u0442 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438, \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<br \/>  \u0412\u0442\u043e\u0440\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 USB \u0432 1.5 \u043e\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0439 (48 \u041c\u0413\u0446) \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u0430 USB.  <\/li>\n<li>\u0414\u0430\u043b\u0435\u0435 \u043f\u0438\u0448\u0435\u043c \u043a\u043e\u0434 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u044b\u0441\u043e\u043a\u043e\u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u043e\u0433\u043e \u0438 \u043d\u0438\u0437\u043a\u043e\u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u0432\u044b\u0437\u043e\u0432\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0434\u043b\u044f \u0432\u044b\u0441\u043e\u043a\u043e\u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u043e\u0433\u043e \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043b\u0438\u0431\u043e \u043d\u0430\u0448\u0438\u0445 \u043a\u043e\u043b\u0431\u044d\u043a\u043e\u0432 \u0434\u043b\u044f \u043d\u0438\u0437\u043a\u043e\u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u043e\u0433\u043e.\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0412\u044b\u0441\u043e\u043a\u043e\u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u043e\u0435 \u0438 \u043d\u0438\u0437\u043a\u043e\u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u044b\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">void USB_HP_CAN1_TX_IRQHandler(void) {   CTR_HP(); }  void USB_LP_CAN1_RX0_IRQHandler(void) {   wIstr = _GetISTR(); \t#if (IMR_MSK & ISTR_CTR) \t  if (wIstr & ISTR_CTR & wInterrupt_Mask) \t  { \t    CTR_LP(); \t  } \t#endif \t#if (IMR_MSK & ISTR_RESET) \t  if (wIstr & ISTR_RESET & wInterrupt_Mask) \t  { \t    _SetISTR((uint16_t)CLR_RESET); \t    Device_Property.Reset(); \t  } \t#endif } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0412\u0441\u0435, \u0447\u0442\u043e \u043d\u0430\u043c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432 \u043c\u0435\u0438\u043d\u0435 \u2013 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0438\u043d \u043f\u043e\u0434\u0442\u044f\u0436\u043a\u0438 USB \u043d\u0430 \u0432\u044b\u0445\u043e\u0434, \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f USB \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f LCD, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0437\u0430\u0432\u0438\u0441\u043d\u0443\u0442\u044c \u0432 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435. \u0421 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u043a\u043e\u043b\u0431\u044d\u043a\u0435, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u043c \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u043f\u043e Bulk Endpoint 1 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u0438 \u043d\u0430\u043f\u0438\u0448\u0435\u043c.  <\/li>\n<li>\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u2013 \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0434\u0432\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, <b>NOT_ADDRESSED<\/b> \u0438 <b>TRANSFER_IN_PROGRESS<\/b>. \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043c\u044b \u0432 \u043f\u0435\u0440\u0432\u043e\u043c, \u0438 \u0432 \u043d\u0435\u043c \u043c\u044b \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0435 8 \u0431\u0430\u0439\u0442 \u043f\u0430\u043a\u0435\u0442\u0430 \u043a\u0430\u043a \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b X \u0438 Y (\u0434\u0432\u0430 16-\u0431\u0438\u0442\u043d\u044b\u0445 \u0447\u0438\u0441\u043b\u0430) \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0430\u0434\u043e \u0432\u044b\u0432\u0435\u0441\u0442\u0438, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u044d\u0442\u0438\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442. \u041f\u043e\u043b\u0443\u0447\u0438\u0432 \u044d\u0442\u043e\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043c\u044b \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438 \u0432\u0441\u0435 \u043f\u0440\u0438\u0448\u0435\u0434\u0448\u0438\u0435 \u043f\u043e\u0442\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0435 (\u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043a\u043e\u043d\u0435\u0446 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430) \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0441\u0440\u0430\u0437\u0443 \u043d\u0430 \u043d\u0430\u0448 \u0434\u0438\u0441\u043f\u043b\u0435\u0439, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0432\u044b\u0432\u0435\u0434\u0435\u043c \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435. \u042d\u0442\u043e, \u043f\u0440\u0430\u0432\u0434\u0430, \u0447\u0440\u0435\u0432\u0430\u0442\u043e \u0442\u0435\u043c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u043c\u0435\u0448\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430, \u0442\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0430\u043a\u0435\u0442 \u0441 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u044f\u0442 \u043a\u0430\u043a \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u043f\u043e\u043b\u0435\u0442\u0438\u0442 \u043c\u0443\u0441\u043e\u0440. \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0430 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0430 \u0448\u0438\u043d\u0435. \u0427\u0442\u043e\u0431\u044b \u0435\u0435 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u0432\u0435\u0441\u0442\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0430\u0439\u0442 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a, \u043d\u043e \u0432 \u043c\u043e\u0435\u043c \u043a\u043e\u0434\u0435 \u044d\u0442\u043e\u0433\u043e \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0435\u0442. <br \/>  \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435, \u0447\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u043f\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u2013 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043d\u043e\u0439 <b>PMAToUserBufferCopy<\/b>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0431\u0430\u0439\u0442\u044b \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438 \u0431\u0443\u0444\u0435\u0440\u0430 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0430 \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430. \u0422\u0430\u043a \u043a\u0430\u043a \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u0443 \u043d\u0430\u0441 \u0442\u0435\u043f\u0435\u0440\u044c \u0442\u043e\u0436\u0435 \u0432\u0438\u0434\u0438\u0442\u0441\u044f \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u043a \u0447\u0435\u043c\u0443 \u043d\u0430\u043c \u0434\u0432\u0430\u0436\u0434\u044b \u0433\u043e\u043d\u044f\u0442\u044c \u0442\u0443\u0434\u0430-\u0441\u044e\u0434\u0430 \u0431\u0430\u0439\u0442\u044b?<br \/>  \u042f \u0432\u0437\u044f\u043b \u043a\u043e\u0434 <b>PMAToUserBufferCopy<\/b> \u0437\u0430 \u043e\u0441\u043d\u043e\u0432\u0443, \u043d\u0430\u0437\u0432\u0430\u043b \u0444\u0443\u043d\u043a\u0446\u0438\u044e <b>PMAToLCDBufferCopy<\/b>, \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u043b \u0432 \u0435\u0435 \u043a\u043e\u0434\u0435 \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0431\u0443\u0444\u0435\u0440 \u043d\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043f\u0430\u043c\u044f\u0442\u044c \u0434\u0438\u0441\u043f\u043b\u0435\u044f:\n<pre><code class=\"cpp\">void PMAToLCDBufferCopy(uint16_t wPMABufAddr, uint16_t offset ,uint16_t wNBytes) { \tuint32_t n = (wNBytes + 1) &gt;&gt; 1; \t uint32_t i; \t uint32_t *pdwVal; \t uint16_t data; \t pdwVal = (uint32_t *)(wPMABufAddr * 2 + PMAAddr+offset); \t for (i = n; i != 0; i--) \t { \t\t data=((*pdwVal&0xFF)&lt;&lt;8)|(*pdwVal&gt;&gt;8); \t\t LCD_WRITE_RAM(data); \t\t pdwVal++; \t } } <\/code><\/pre>\n<p>  \u0421\u0430\u043c \u043a\u043e\u043b\u0431\u044d\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">void EP1_OUT_Callback(void) { \tuint16_t dataLen = GetEPRxCount(EP1_OUT & 0x7F); \tuint16_t offset=0; \tif(GraphicsState==NOT_ADDRESSED) \t{ \t\tif(dataLen&lt;=8) \t\t{ \t\t\tSetEPRxStatus(ENDP1, EP_RX_VALID); \t\t\treturn; \t\t} \t\tPMAToUserBufferCopy(buffer, GetEPRxAddr(EP1_OUT & 0x7F), 8); \t\tuint16_t horz = *((uint16_t*)(buffer)); \t\tuint16_t  vert = *(uint16_t*)(buffer+2); \t\tdataTotal =  *(uint32_t*)(buffer+4); \t\tLCD_WRITE_REGISTER(CTR_HORZ_ADDRESS,vert); \/\/\u044d\u043a\u0440\u0430\u043d \u043f\u043e\u0432\u0435\u0440\u043d\u0443\u0442 \t\tLCD_WRITE_REGISTER(CTR_VERT_ADDRESS,horz); \t\toffset=16; \t\tdataTransfered=0x00; \t\tGraphicsState=TRANSFER_IN_PROGRESS; \t\tdataLen-=8; \t}  \tLCD_BEGIN_RAM_WRITE; \tPMAToLCDBufferCopy(GetEPRxAddr(EP1_OUT & 0x7F), offset, dataLen); \tdataTransfered+=(dataLen)&gt;&gt;1; \tif(dataTransfered&gt;=dataTotal) \t\tGraphicsState=NOT_ADDRESSED; \tSetEPRxStatus(ENDP1, EP_RX_VALID); } <\/code><\/pre>\n<p>  \u0412\u0441\u0435, \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u043b\u0431\u044d\u043a \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0432 \u043a\u043e\u043b\u0431\u044d\u043a\u0438 \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u043e\u0432 (\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442) \u0432 <b>NOP_Process<\/b>:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0441 \u043a\u043e\u043b\u0431\u044d\u043a\u0430\u043c\u0438 \u0434\u043b\u044f \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u043e\u0432<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">void (*pEpInt_IN[7])(void) =   {     NOP_Process,     NOP_Process,     NOP_Process,  NOP_Process, NOP_Process,     NOP_Process,     NOP_Process,   };  void (*pEpInt_OUT[7])(void) =   {     EP1_OUT_Callback,     NOP_Process,     NOP_Process, NOP_Process,     NOP_Process,     NOP_Process, NOP_Process,   }; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/li>\n<\/ol>\n<p>  <\/p>\n<h6>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430<\/h6>\n<p>  \u0412\u043e\u0442 \u0438 \u043f\u0440\u0438\u0448\u043b\u0430 \u0441\u0430\u043c\u0430\u044f \u043f\u0440\u0438\u044f\u0442\u043d\u0430\u044f \u043f\u043e\u0440\u0430 \u2013 \u043f\u043e\u0436\u0438\u043d\u0430\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u044d\u0442\u0430\u043f\u0430.<br \/>  \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0431\u0443\u0434\u0435\u043c \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c \u0438\u0437-\u043f\u043e\u0434 windows (\u0445\u043e\u0442\u044f \u0438 \u0438\u0437-\u043f\u043e\u0434 \u043b\u0438\u043d\u0443\u043a\u0441\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442), \u043f\u043e\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u044f \u044e\u0437\u0435\u0440\u0441\u043f\u0435\u0439\u0441\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 LibUSB.<br \/>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044f \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0435\u0435 \u0431\u0438\u043d\u0434\u0438\u043d\u0433\u043e\u043c \u0434\u043b\u044f C#, LibUSB.Net, \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e <a href=\"http:\/\/sourceforge.net\/projects\/libusbdotnet\/\">\u043e\u0442\u0441\u044e\u0434\u0430<\/a><br \/>  \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043d\u0430\u0448 \u0434\u0435\u0432\u0430\u0439\u0441 \u043a \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0443 \u2013 \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u0445\u043e\u0440\u043e\u0448\u043e, \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c, \u0447\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044b, \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0435\u0433\u043e \u043f\u043e\u0434 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u043d\u0430\u043c\u0438 \u0438\u043c\u0435\u043d\u0435\u043c \u0432 \u0434\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440\u0435 \u0437\u0430\u0434\u0430\u0447.<br \/>  \u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u043c\u043e\u0436\u043d\u043e \u0434\u0430\u0436\u0435 \u043d\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434. \u041f\u0440\u043e\u0441\u0442\u043e \u043a\u0430\u0447\u0430\u0435\u043c \u044d\u0442\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0432 \u043f\u0430\u043f\u043a\u0435 \u0441 \u043d\u0435\u0439 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c InfWizard. \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043d\u0430\u0448\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0434\u043b\u044f \u043d\u0435\u0433\u043e inf-\u0444\u0430\u0439\u043b, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u043e\u0442 libusb.<br \/>  \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0438\u0434\u0443\u0449\u0443\u044e \u0432 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u0435 Test_bulk, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u0430\u0448\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u0436\u043c\u0435\u043c Open, \u0438 \u0432\u0432\u043e\u0434\u0438\u043c \u0432 \u0441\u0442\u0440\u043e\u043a\u0443 \u0431\u043e\u043b\u044c\u0448\u0435 8 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432. \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u044b \u043d\u0430\u0436\u043c\u0435\u043c \u00abWrite\u00bb, \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u0438\u0439\u0442\u0438 \u0432 \u043d\u0430\u0448 \u043a\u043e\u043b\u0431\u044d\u043a \u0438 \u0431\u044b\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043a\u0430\u043a \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0438 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u0435 \u0432 \u0432\u0438\u0434\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0446\u0432\u0435\u0442\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a.<br \/>  \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u044d\u0442\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u044f\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u044d\u0442\u043e\u0433\u043e \u0441\u0430\u043c\u043e\u0433\u043e Test_Bulk, \u0438\u0434\u0435\u043c \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043a\u043d\u043e\u043f\u043a\u0438 Write \u0438, \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0441\u0442\u0440\u043e\u043a\u0438, \u0434\u0435\u043b\u0430\u0435\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0438\u0437 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430.<\/p>\n<pre><code class=\"cs\">var bytesToWrite = File.ReadAllBytes(&quot;D:\\\\myfile.raw&quot;); <\/code><\/pre>\n<p>  \u0422\u0443\u0442 \u043d\u0430\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e, \u043f\u043e\u0439\u0434\u0435\u043c \u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0444\u0430\u0439\u043b. \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 320\u0445240, \u044f \u0432\u044b\u0431\u0440\u0430\u043b \u0432\u043e\u0442 \u044d\u0442\u0443:<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/997\/324\/08a\/99732408a96cee7a90cf214f965f2323.jpg\"\/><br \/>  \u041f\u043e\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0435\u0435 \u043d\u0430\u0431\u043e\u043a, \u043f\u043e\u0442\u043e\u043c \u0432\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u0432 BMP \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0441\u043d\u0438\u0437\u0443 \u0432\u0432\u0435\u0440\u0445, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u043c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u0438\u043c \u0432 \u043a\u043e\u0434\u0435.<br \/>  \u041e\u0442 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043e\u0442\u0440\u0435\u0437\u0430\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0435 0\u044540 \u0431\u0430\u0439\u0442 (\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a), \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u2013 \u0441\u044b\u0440\u043e\u0439 \u0431\u0438\u0442\u043c\u044d\u043f. \u0414\u043e\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0435\u0433\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u043c \u0434\u043b\u044f USB-\u0434\u0435\u0432\u0430\u0439\u0441\u0430 \u2013 \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0432\u044b\u0432\u043e\u0434\u0430 (0000, 0000) \u0438 \u0434\u043b\u0438\u043d\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u0445 (320\u0445240) \u2014 002C0100<br \/>  \u0412\u0441\u0435, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u0434 \u0442\u0435\u043c \u0438\u043c\u0435\u043d\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0443\u043a\u0430\u0437\u0430\u043b\u0438 \u0432 Test_bulk, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u044d\u0442\u0443 \u043f\u0440\u043e\u0433\u0443, \u0436\u043c\u0435\u043c Write \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/3d1\/98b\/21b\/3d198b21b6e58b05357ee74cc34b3d34.jpg\"\/><br \/>  \u041d\u0430 \u044d\u0442\u043e\u043c \u0443 \u043c\u0435\u043d\u044f \u0432\u0441\u0435. \u0421\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0434\u043b\u0438\u043d\u043d\u0430\u044f, \u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0442\u044c \u0435\u0435 \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u043b\u043a\u0438\u0435 \u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u0442\u043e\u0433\u0434\u0430 \u043f\u043e\u0442\u0435\u0440\u044f\u043b\u0430\u0441\u044c \u0431\u044b \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u044c \u044d\u0442\u0430\u043f\u0430. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0432\u044b \u043e\u0441\u0438\u043b\u0438\u043b\u0438 \u0435\u0435 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u0438 \u0433\u043e\u0442\u043e\u0432\u044b \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u044d\u0442\u0430\u043f\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u0437\u043b\u043e\u0436\u0435\u043d \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u2013 \u043c\u044b \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u0432\u043e\u0437\u044c\u043c\u0435\u043c\u0441\u044f \u0437\u0430 \u0440\u043e\u0443\u0442\u0435\u0440 \u0438 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043d\u0430\u0448\u0435\u0439 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u043e\u0439 \u0438\u0437-\u043f\u043e\u0434 OpenWRT.<br \/>  \u0414\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438!    \t   \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\/163689\/\"> http:\/\/habrahabr.ru\/post\/163689\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/74a\/e2d\/b33\/74ae2db338f17b30178cc53af42025d6.jpg\"\/><br \/>  \u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c, \u0443\u0432\u0430\u0436\u0430\u0435\u043c\u044b\u0435 \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0435. \u0412 \u044d\u0442\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u0441\u0442\u0430\u0442\u0435\u0439 \u043c\u044b \u0441 \u0432\u0430\u043c\u0438 \u043f\u0440\u043e\u0439\u0434\u0435\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u0438\u043d\u043d\u044b\u0439, \u043d\u043e \u0432\u0435\u0441\u044c\u043c\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043f\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044e \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0440\u043e\u0443\u0442\u0435\u0440\u0430 \u0432 \u043c\u0438\u043d\u0438-\u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0441 LCD-\u0434\u0438\u0441\u043f\u043b\u0435\u0435\u043c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441\u043d\u0430\u0447\u0430\u043b\u0430 USB-\u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0443 \u043d\u0430 \u0431\u0430\u0437\u0435 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 STM32F103, \u043f\u043e\u0442\u043e\u043c \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0434\u0440\u0430\u0432\u0439\u0432\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u043d\u0435\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0443, \u0438, \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u2013 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0444\u0440\u0435\u0439\u043c\u0431\u0443\u0444\u0444\u0435\u0440\u0430, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a x-\u0441\u0435\u0440\u0432\u0435\u0440. \u0417\u0430\u043e\u0434\u043d\u043e \u043c\u044b \u043d\u0430\u0443\u0447\u0438\u043c\u0441\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043d\u0430\u0448 \u043a\u043e\u0434 \u0432 \u0434\u0435\u0440\u0435\u0432\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 OpenWRT, \u0434\u043e\u043f\u0438\u043b\u0438\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u044f\u0434\u0440\u043e \u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0447\u0438\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0432\u0435\u0449\u0438.<br \/>  \u041d\u0443 \u0430 \u0432 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0446\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u044f \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u043d\u043e\u0441\u0442\u0430\u043b\u044c\u0433\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u043b\u0435\u0437\u0443 \u0443 \u043c\u043d\u043e\u0433\u0438\u0445 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439. \u042f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u0438\u0437\u043b\u0430\u0433\u0430\u0442\u044c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u0442\u0430\u043f\u0430 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u043b\u0438 \u043e\u0441\u044f\u0437\u0430\u0435\u043c\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043d\u0435 \u0434\u0430\u044e\u0449\u0438\u0439 \u0443\u0433\u0430\u0441\u043d\u0443\u0442\u044c \u044d\u043d\u0442\u0443\u0437\u0438\u0430\u0437\u043c\u0443. \u0418\u0442\u0430\u043a, \u043d\u0430\u0447\u043d\u0435\u043c.  <\/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-163689","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/163689","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=163689"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/163689\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=163689"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=163689"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=163689"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}