{"id":334613,"date":"2022-06-17T09:00:16","date_gmt":"2022-06-17T09:00:16","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=334613"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=334613","title":{"rendered":"<span>\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 COM-\u043f\u043e\u0440\u0442 \u043d\u0430 STM32 \u0438\u043b\u0438 \u043a\u0430\u043a \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c \u0447\u0435\u0440\u0435\u0437 USB \u043d\u0435 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u044f \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0441\u0430\u043d\u0438\u0442\u0430\u0440\u043e\u0432<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e \u043c\u0435\u043d\u044f \u0441\u043f\u043e\u0434\u0432\u0438\u0433\u043b\u0438 \u0442\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0439\u0442\u0438 \u0432 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a \u0436\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u044f\u0434\u0440\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 STM32F103 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u043c USB, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u0431\u043e\u0440\u0442\u0443. \u0418\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/habr.com\/ru\/post\/335018\/\" rel=\"noopener noreferrer nofollow\">\u0432\u043e\u0442<\/a> \u0438\u043b\u0438<a href=\"https:\/\/habr.com\/ru\/post\/571704\/\" rel=\"noopener noreferrer nofollow\"> \u0432\u043e\u0442<\/a>) \u043f\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0442\u043d\u044b\u0445, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0441\u0444\u043e\u043a\u0443\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043d\u0430 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. \u042f \u0436\u0435 \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u043e\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432.<\/p>\n<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043c\u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0434\u043b\u044f \u0430\u0434\u0440\u0435\u0441\u043d\u044b\u0445 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432. \u042d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0435\u0441\u0442\u044c \u0446\u0435\u043b\u044b\u0439 \u0440\u044f\u0434 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u0430\u0441\u043f\u0435\u043a\u0442\u043e\u0432, \u043d\u043e \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044c, \u0447\u0442\u043e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u043e\u0442 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043b\u044e\u0434\u0435\u0439 \u0442\u0432\u043e\u0440\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u0439 \u0438 \u0443\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0439 &#8212; \u0431\u0443\u0442\u0430\u0444\u043e\u0440\u043e\u0432, \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0438\u043b\u0438 \u043a\u043e\u0441\u043f\u043b\u0435\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u043c\u0435\u044e\u0442 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0430 \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432, \u0434\u0430 \u0438 \u0441\u0430\u043c \u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u0445\u0443\u0434\u043e\u0436\u043d\u0438\u043a, \u0432\u043d\u0443\u0442\u0440\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0431\u044b\u043b \u043f\u043e\u043c\u0435\u0449\u0451\u043d \u0446\u0435\u043b\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 \u043a\u043e\u043c\u0430\u043d\u0434, \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 G-\u043a\u043e\u0434\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0447\u0438\u0442\u0430\u0435\u0442 \u0441 \u0444\u043b\u044d\u0448-\u043a\u0430\u0440\u0442\u044b \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438, \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0438\u0445 \u0438 \u0434\u0430\u0436\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445. \u0421\u0430\u043c\u043e \u0441\u043e\u0431\u043e\u0439, \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u0443\u044e \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044e \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u043d\u0435 \u0442\u0430\u043a \u043c\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430. \u0418 \u0432 \u044d\u0442\u043e \u043c\u0435\u0441\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043a\u0430\u043a-\u0442\u043e \u0432\u0442\u0438\u0441\u043d\u0443\u0442\u044c \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043a\u043e\u043c\u0430\u043d\u0434, \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0445 \u0447\u0435\u0440\u0435\u0437 USB, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.<\/p>\n<p>\u0418 \u0432\u043e\u0442 \u043d\u0430 \u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043c\u0435\u0441\u0442\u0430, \u043a\u0430\u043a \u0432 \u041f\u0417\u0423, \u0442\u0430\u043a \u0438 \u0432 \u041e\u0417\u0423 \u0434\u043b\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0443\u0436\u0435 \u043d\u0435 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f: \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0447\u0430\u0441\u0442\u043e \u043f\u0438\u0448\u0443\u0442\u0441\u044f \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043b\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043c, \u0433\u0434\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u043f\u0430\u0440\u0443 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0441\u0442\u0440\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432. \u0418 \u0442\u0435 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u043e\u0436\u0438\u0440\u0430\u044e\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043f\u0430\u043c\u044f\u0442\u0438. \u041f\u043e\u0432\u0435\u0440\u0445 \u044d\u0442\u043e\u0433\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043e\u0442 STM \u0441\u0430\u043c\u0438 \u043f\u043e \u0441\u0435\u0431\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u044b \u043f\u043e \u0441\u0432\u043e\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435. \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u043f\u0440\u044f\u0442\u0430\u043d\u044b \u0432 \u043c\u0430\u043a\u0440\u043e\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0437\u0430\u0432\u0451\u0440\u043d\u0443\u0442\u044b \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438. \u0422\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0432\u043e \u0432\u0441\u0451 \u044d\u0442\u043e \u0432\u043b\u0435\u0437\u0430\u0442\u044c \u0438 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c USB \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442. \u041d\u043e \u0432\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438   &#8212; \u044d\u0442\u043e \u0433\u043e\u043b\u043e\u0432\u043e\u043b\u043e\u043c\u043a\u0430 \u043d\u0435 \u0434\u043b\u044f \u0441\u043b\u0430\u0431\u044b\u0445 \u0443\u043c\u043e\u0432. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043e\u0431\u044a\u0451\u043c\u043d\u0443\u044e \u0431\u043b\u043e\u043a-\u0441\u0445\u0435\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 \u043f\u043e\u0434\u0437\u0435\u043c\u0435\u043b\u044c\u044f \u0432 D&amp;D, \u0447\u0435\u043c \u043d\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c. \u0418 \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0441\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u0432 \u044d\u0442\u043e \u043f\u043e\u0434\u0437\u0435\u043c\u0435\u043b\u044c\u0435, \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043d\u0430\u0440\u044f\u0436\u0435\u043d\u0438\u0435.<\/p>\n<h2>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b<\/h2>\n<p>\u0418\u0442\u0430\u043a, \u0447\u0442\u043e \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f. \u0412\u043e\u043e\u0431\u0449\u0435, \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439 Reference Manual (<a href=\"https:\/\/vdocuments.net\/stm32-reference-manual-55849eac7c01d.html?page=580\" rel=\"noopener noreferrer nofollow\">DOC Id 13902, \u0433\u043b\u0430\u0432\u0430 22, \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0441 580 \u043f\u043e 609<\/a>). \u0412 \u044d\u0442\u043e\u043c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0443\u0436\u043d\u044b\u0445 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u0438\u0442\u043e\u0432 \u0432 \u044d\u0442\u0438\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445. \u0410 \u0442\u0430\u043a\u0436\u0435 \u0440\u0435\u0436\u0438\u043c\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u044b \u044d\u0442\u0438\u0445 \u0431\u0438\u0442\u043e\u0432 (\u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e). \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u044f \u0432\u044b\u043d\u0435\u0441 \u044d\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432 \u043c\u0430\u043a\u0440\u043e\u0441\u044b:<\/p>\n<details class=\"spoiler\">\n<summary>\u041c\u0430\u043a\u0440\u043e\u0441\u044b<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/\u043c\u0430\u043a\u0440\u043e\u0441 \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438 #define REG(x)  (*((volatile unsigned int )(x)))  \/\/\u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 #define USB_BASE_ADDR   0x40005C00 \/\/\u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 USB           #define USB_PMA_ADDR    0x40006000  \/\/\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a #define EP0RREG(USB_BASE_ADDR) #define EP1RREG(0x40005C04) #define EP2RREG(0x40005C08) #define EP3RREG(0x40005C0C) #define EP4RREG(0x40005C10) #define EP5RREG(0x40005C14) #define EP6RREG(0x40005C18) #define EP7RREG(0x40005C1C) #define ENDPOINT(bEpNum)        REG(USB_BASE_ADDR + (bEpNum)*4) #define PMA_BUF(INum)        REG(USB_PMA_ADDR + (INum)4)  #define PMA_SBUF(SINum)        (((volatile unsigned short int *)(USB_PMA_ADDR + (SINum)*2)))  \/\/\u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b #define CNTRREG(USB_BASE_ADDR + 0x40)    #define ISTRREG(USB_BASE_ADDR + 0x44)    #define DADDRREG(USB_BASE_ADDR + 0x4C)  #define BTABLEREG(USB_BASE_ADDR + 0x50)<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u043c \u0441\u0435\u0431\u0435 \u0436\u0438\u0437\u043d\u044c, \u0432\u044b\u0437\u044b\u0432\u0430\u044f \u043d\u0443\u0436\u043d\u044b\u0435 \u043d\u0430\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044f \u0441 \u043d\u0438\u043c\u0438 \u043a\u0430\u043a \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c: <\/p>\n<ul>\n<li>\n<p>CNTR &#8212; \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442, \u043a\u0430\u043a\u0438\u0435 \u0438\u0437 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u0438 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u043d\u0430 \u0441\u0435\u0431\u044f \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430. \u041d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f 0x8000 (\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043d\u044f\u0442\u044b) \u0438 0x0400 (\u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430). \u0422\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u043e \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e \u0431\u0443\u0444\u0435\u0440\u0430 \u043f\u0440\u0438\u0451\u043c\u0430 (0x4000), \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u0441\u043f\u044f\u0449\u0438\u0439 \u0440\u0435\u0436\u0438\u043c (0x0800) \u0438 \u0432\u044b\u0445\u043e\u0434\u0430 \u0438\u0437 \u043d\u0435\u0433\u043e (0x1000) \u0438 \u0442.\u0434.<\/p>\n<\/li>\n<li>\n<p>ISTR &#8212; \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f. \u0421\u0442\u0430\u0440\u0448\u0438\u0435 \u0431\u0438\u0442\u044b (\u0441 15 \u043f\u043e 8) &#8212; \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443 CNTR. \u041c\u043b\u0430\u0434\u0448\u0438\u0435 4 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u043e\u043c\u0435\u0440 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0438 \u0431\u0438\u0442 \u043d\u043e\u043c\u0435\u0440 4 (0x0010) &#8212; \u044d\u0442\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435: 1 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u043e\u0442 \u0445\u043e\u0441\u0442\u0430 (\u043e\u0431\u044b\u0447\u043d\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430, \u043d\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u044d\u0442\u043e \u0443\u043c\u0435\u044e\u0442 \u0438 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u044b) \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440. 0 &#8212; \u0447\u0442\u043e \u0445\u043e\u0441\u0442  \u0436\u0434\u0451\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442 \u043d\u0430\u0441.<\/p>\n<\/li>\n<li>\n<p>DADDR &#8212; \u043c\u043b\u0430\u0434\u0448\u0438\u0435 7 \u0431\u0438\u0442 \u0445\u0440\u0430\u043d\u044f\u0442 \u043d\u043e\u043c\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u043e\u0441\u0442 \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u043b \u043d\u0430\u0448\u0435\u043c\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0441\u0435\u0441\u0441\u0438\u0438. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043d\u043e\u043b\u044c. \u0421\u0442\u0430\u0440\u0448\u0438\u0439 \u0431\u0438\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u0440\u0430\u0439\u0432\u0435\u0440 USB \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u0433\u043e\u0442\u043e\u0432 \u043a \u0440\u0430\u0431\u043e\u0442\u0435.<\/p>\n<\/li>\n<li>\n<p>BTABLE &#8212; \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043a\u0443\u0434\u0430-\u0442\u043e \u043f\u043e\u043c\u0435\u0449\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 &#8212; \u043a\u0430\u043a \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0435, \u0442\u0430\u043a \u0438 \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c. \u041c\u0435\u0441\u0442\u043e\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0443\u0436\u0438\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430, Packet Memory (PMA). \u0418 \u0434\u043b\u044f \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438 \u044d\u0442\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u043b\u0443\u0436\u0438\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0430, \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u043c\u0430\u044f \u0432 \u0442\u043e\u0439 \u0436\u0435 \u0441\u0430\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 BTABLE. \u042d\u0442\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043f\u043e\u043b\u0435\u0439: \u0410\u0434\u0440\u0435\u0441 \u0431\u0443\u0444\u0435\u0440\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0439\u0442, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u0448\u0430\u0433\u0435, \u0430\u0434\u0440\u0435\u0441 \u0431\u0443\u0444\u0435\u0440\u0430 \u043f\u0440\u0438\u0451\u043c\u0430, \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0443\u0444\u0435\u0440\u0430 \u043f\u0440\u0438\u0451\u043c\u0430 (\u0438 \u0435\u0433\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0441\u0442\u044c).<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, PMA_BUF \u0438 PMA_SBUF &#8212; \u0442\u0430 \u0441\u0430\u043c\u0430\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430, \u0432\u0441\u0435\u0433\u043e 512 \u0431\u0430\u0439\u0442. PMA_BUF \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u043d\u0435\u0439 \u043a\u0430\u043a \u043a \u043c\u0430\u0441\u0441\u0438\u0432\u0443 DWORD, \u0430 PMA_SBUF \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u043d\u0435\u0439 \u043a\u0430\u043a \u043a \u043c\u0430\u0441\u0441\u0438\u0432\u0443 WORD. \u0410\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044f \u0432 \u044d\u0442\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u0434\u0451\u0442 \u043f\u043e \u0441\u043b\u043e\u0432\u0430\u043c, \u0442\u0430\u043a \u0447\u0442\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u0431\u0430\u0439\u0442\u0443 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f.<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438. \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u044f \u043e\u0431\u0440\u0430\u0449\u0430\u044e\u0441\u044c \u043a \u043d\u0438\u043c \u043a\u0430\u043a \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0442\u0430\u043a \u0438 \u043a\u0430\u043a \u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0430. \u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u0442\u043e\u0440\u043e\u0433\u043e, \u043d\u043e \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 \u0440\u044f\u0434\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0440\u0430\u0431\u043e\u0442\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439, \u0442\u043e \u0434\u043b\u044f \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0449\u0435 \u0441\u0440\u0430\u0437\u0443 \u0435\u0451 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u0442\u044c.<\/p>\n<p>\u0421\u0430\u043c\u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 &#8212; \u044d\u0442\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u043e\u0441\u0442 \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f. \u041d\u0443\u043b\u0435\u0432\u0430\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 EP0R \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0442\u0443 \u0440\u0430\u0431\u043e\u0442\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442 \u043d\u0430\u0448\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.<\/p>\n<h2>\u0417\u0430\u043f\u0443\u0441\u043a USB<\/h2>\n<p> \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0447\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443, \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043d\u043e\u0433\u0438:<\/p>\n<details class=\"spoiler\">\n<summary>SystemInit();<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/\u042d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432  \u0444\u0430\u0439\u043b\u0435 system_stm32f10x.c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.  #include \"stm32f10x.h\" \/* Reset the RCC clock configuration to the default reset state(for debug purpose) *\/  \/* Set HSION bit *\/  RCC->CR |= (uint32_t)0x00000001; \/* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits *\/  RCC->CFGR &amp;= (uint32_t)0xF8FF0000; \/* Reset HSEON, CSSON and PLLON bits *\/  RCC->CR &amp;= (uint32_t)0xFEF6FFFF; \/* Reset HSEBYP bit *\/  RCC->CR &amp;= (uint32_t)0xFFFBFFFF; \/* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE\/OTGFSPRE bits *\/  RCC->CFGR &amp;= (uint32_t)0xFF80FFFF; \/* Disable all interrupts and clear pending bits  *\/  RCC->CIR = 0x009F0000; \/* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers *\/  \/* Configure the Flash Latency cycles and enable prefetch buffer *\/  __IO uint32_t StartUpCounter = 0, HSEStatus = 0;  \/* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*\/  \/* Enable HSE *\/  RCC->CR |= ((uint32_t)RCC_CR_HSEON);  \/\/  RCC->CR |= ((uint32_t)RCC_CR_HSION);  \/* Wait till HSE is ready and if Time out is reached exit *\/  do {  HSEStatus = RCC->CR &amp; RCC_CR_HSERDY;  \/\/    HSEStatus = RCC->CR &amp; RCC_CR_HSIRDY;  StartUpCounter++;  } while(((RCC->CR &amp; RCC_CR_HSERDY) == 0) &amp;&amp; (StartUpCounter &lt; HSE_STARTUP_TIMEOUT));  if ((RCC->CR &amp; RCC_CR_HSERDY) != RESET) \/\/  if ((RCC->CR &amp; RCC_CR_HSIRDY) != RESET)  {  \/\/HSEStatus = (uint32_t)0x01;     \/* Enable Prefetch Buffer *\/      FLASH->ACR |= FLASH_ACR_PRFTBE;       \/* Flash 2 wait state *\/      FLASH->ACR &amp;= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);      FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;        \/* HCLK = SYSCLK *\/      RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;       \/* PCLK2 = HCLK *\/      RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;       \/* PCLK1 = HCLK *\/        RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;       \/*  PLL configuration: PLLCLK = HSE * 9 = 72 MHz *\/ RCC->CFGR &amp;= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |                                         RCC_CFGR_PLLMULL));      RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);    \/\/PLLMULL9 - for 8MHz  \/\/    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSI_Div2 | RCC_CFGR_PLLMULL9);    \/\/PLLMULL9 - for 8MHz      \/* Enable PLL *\/ RCC->CR |= RCC_CR_PLLON;       \/* Wait till PLL is ready *\/      while((RCC->CR &amp; RCC_CR_PLLRDY) == 0)     {     }      \/* Select PLL as system clock source *\/      RCC->CFGR &amp;= (uint32_t)((uint32_t)~(RCC_CFGR_SW));      RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;       \/* Wait till PLL is used as system clock source *\/      while ((RCC->CFGR &amp; (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)     {     }  }SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET;  \/* Vector Table Relocation in Internal FLASH. *\/ <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>USB_Init()<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">SystemInit();  \/\/\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 SystemInit \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432\u044b\u0448\u0435.  \/\/\u0421\u0430\u043c\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432  \u0444\u0430\u0439\u043b\u0435 system_stm32f10x.c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.  \/\/ Enable USB_DISCONNECT GPIO clock  RCC->APB2ENR |= RCC_APB2Periph_GPIOF;  \/\/ \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 11 \u043f\u0438\u043d\u0430 \u043a\u0430\u043a USB pull-up pin  GPIOF->CRH &amp;= 0xFFFF0FFF;  GPIOF->CRH |= 0x00007000;   \/\/general output, open drain, 50MHz \/\/\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f  *(__IO uint32_t *) (0x424200D8) = 0; \/\/\u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0448\u0438\u043d\u044b USB  RCC->APB1ENR |=RCC_APB1Periph_USB; \/\/\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f (\u043d\u0438\u0437\u0448\u0438\u0439 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0438\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 0xf0, \u0432\u044b\u0441\u0448\u0438\u0439 0x10) NVIC->IP[USB_LP_CAN1_RX0_IRQn] = 0xA0;  \/\/pending - \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0432 \u0446\u0438\u043a\u043b\u0435  NVIC->ISER[(uint32_t)(USB_LP_CAN1_RX0_IRQn) >> 0x05] = (uint32_t)0x01 &lt;&lt; (USB_LP_CAN1_RX0_IRQn &amp; (uint8_t)0x1F);  USB_RESET();<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0443 PMA \u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c USB  \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435. \u0417\u0430 \u044d\u0442\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f USB_RESET():<\/p>\n<details class=\"spoiler\">\n<summary>USB_RESET()<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#define EP0RX_OFFSET 0x80 #define EP0TX_OFFSET 0x40 #define EP1TX_OFFSET 0xC0 #define EP2TX_OFFSET 0x100 #define EP3RX_OFFSET 0x110  BTABLE = 0;\/\/ \u0410\u0434\u0440\u0435\u0441 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0434\u0438\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u0438 PMA  \/\/EP 0 - \u043d\u0443\u043b\u0435\u0432\u0430\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430  \/\/ ADDR_TX  PMA_BUF(0) = EP0TX_OFFSET;  \/\/ COUNT_TX = 0 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445  PMA_BUF(1) = 0;  \/\/ ADDR_RX  PMA_BUF(2) = EP0RX_OFFSET;  \/\/ \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0443\u0444\u0435\u0440\u0430 \u043f\u0440\u0438\u0435\u043c\u0430 64 \u0431\u0430\u0439\u0442\u0430, BL_size = 1 (32 \u0431\u0430\u0439\u0442\u0430 \u043d\u0430 \u0431\u043b\u043e\u043a), 2 \u0448\u0442\u0443\u043a\u0438  PMA_BUF(3) = 0x8400; EP0R = ((EP0R ^ 0x3020) &amp; 0x3030) | 0x0200;   \/\/EP 1 CDC TX  PMA_BUF(4) = EP1TX_OFFSET;  PMA_BUF(5) = 0;  PMA_BUF(6) = 0;  PMA_BUF(7) = 0;  ENDPOINT(1) = ((ENDPOINT(1) ^ 0x0020) &amp; 0x3030);  \/\/EP 2 CDC interrupt  PMA_BUF(8) = EP2TX_OFFSET;  PMA_BUF(9) = 0;  PMA_BUF(10) = 0;  PMA_BUF(11) = 0;  ENDPOINT(2) = ((ENDPOINT(2) ^ 0x0020) &amp; 0x3030)|0x0600;  \/\/EP 3 CDC RX  PMA_BUF(12) = 0;  PMA_BUF(13) = 0;  PMA_BUF(14) = EP3RX_OFFSET;  PMA_BUF(15) = 0x8400;  ENDPOINT(3) = ((ENDPOINT(3) ^ 0x3000) &amp; 0x3030);  \/\/\u0414\u0430\u043d\u043d\u044b\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043d\u0443\u0436\u043d\u044b \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0445\u043e\u0441\u0442\u0430: USB_Feature = 0xC0; USB_Configuration = 0; USB_Interface = 0;  \/\/\u041e\u0431\u043d\u0443\u043b\u044f\u0435\u043c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 ISTR = 0; \/\/ \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043c\u043e\u0434\u0443\u043b\u044c USB, \u0430\u0434\u0440\u0435\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 0 DADDR = 0x80; \/\/ \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0444\u043b\u0430\u0433\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439(\u0441\u043e\u0431\u044b\u0442\u0438\u0439) USB ISTR &amp;= ~ISTR_RESET; <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0417\u0434\u0435\u0441\u044c \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a. \u0420\u0430\u0437\u043d\u044b\u0435 \u0431\u0438\u0442\u044b \u0432 \u043d\u0438\u0445 \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430 \u0440\u0430\u0437\u043d\u044b\u0435 \u0440\u0435\u0436\u0438\u043c\u044b \u0440\u0430\u0431\u043e\u0442\u044b, \u043d\u043e \u0438 \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443 \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u044e\u0442 \u043d\u0430 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043d\u0438\u0445 0 \u0438\u043b\u0438 1. \u0422\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u0438\u0441\u0430\u0436\u0438\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u043f\u043e\u0443\u0434\u043e\u0431\u043d\u0435\u0435.<\/p>\n<ul>\n<li>\n<p>\u0421\u0442\u0430\u0440\u0448\u0438\u0439 \u0431\u0438\u0442, 0x8000, CTR_RX \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043f\u0440\u0438\u0451\u043c \u0438 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u044c PMA \u0434\u043b\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u043f\u0440\u0438\u0448\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 \u0445\u043e\u0441\u0442\u0430. \u041f\u043e\u0434\u043d\u044f\u0442\u044c \u0435\u0433\u043e \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043d\u0435\u043b\u044c\u0437\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0432 0.<\/p>\n<\/li>\n<li>\n<p>\u0411\u0438\u0442 0x4000, DTOG_RX \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0451\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u043d\u0435\u0433\u043e 1 \u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u0432\u043e\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 COM-\u043f\u043e\u0440\u0442\u043e\u043c \u043e\u043d \u043d\u0430\u043c \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p>\u0411\u0438\u0442\u044b 0x2000 \u0438 0x1000 &#8212; STAT_RX &#8212; \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a\u0430 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438. \u041c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f 0x3000 &#8212; \u0433\u043e\u0442\u043e\u0432\u0430 \u043a \u043f\u0440\u0438\u0451\u043c\u0443, 0x2000 &#8212; \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0438 \u0442\u043e\u0447\u043a\u0430 \u0437\u0430\u043d\u044f\u0442\u0430, 0x1000 &#8212; \u043e\u0448\u0438\u0431\u043a\u0430 \u0438 0x0000 &#8212; \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043e. \u042d\u0442\u0438 \u0431\u0438\u0442\u044b \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438 DTOG_RX. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443  \u0432\u043c\u0435\u0441\u0442\u043e EP0R = 0x3020 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0433\u043e\u0440\u043e\u0434\u0438\u0442\u044c EP0R = ((EP0R ^ 0x3020) &amp; 0x3030)<\/p>\n<\/li>\n<li>\n<p>\u0411\u0438\u0442 0x0800, SETUP &#8212; \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0442\u0438\u043f \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0442.\u0435. \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043b\u0438 \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0411\u0438\u0442 0x0400 \u0438 0x0200 &#8212; EP_TYPE &#8212; \u0442\u0438\u043f \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438: 0x0000 &#8212; \u0434\u0430\u043d\u043d\u044b\u0435 (BULK), 0x0100 &#8212; \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f (CONTROL), 0x0400 &#8212; \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430\u044f (ISO) \u0438 0x0600 &#8212; \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0445\u043e\u0441\u0442\u0430 (INTERRUPT).<\/p>\n<\/li>\n<li>\n<p>\u0411\u0438\u0442 0x0100, EP_KIND &#8212; \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440. \u0414\u043b\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a \u0442\u0438\u043f\u0430 BULK \u044d\u0442\u043e\u0442 \u0431\u0438\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0434\u0432\u043e\u0439\u043d\u0443\u044e \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044e, \u0440\u0435\u0436\u0438\u043c, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u0431\u043b\u0430\u0441\u0442\u0438 PMA \u0434\u043b\u044f \u043f\u0440\u0438\u0451\u043c\u0430 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0440\u043e\u043b\u044f\u043c\u0438 \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0451\u043c\u0430-\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438. \u0414\u043b\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0442\u0438\u043f\u0430 CONTROL \u0434\u0430\u043d\u043d\u044b\u0439 \u0431\u0438\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0440\u0435\u0436\u0438\u043c STATUS_OUT. \u0411\u044b\u0432\u0430\u0435\u0442 \u043d\u0443\u0436\u0435\u043d \u043f\u0440\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u043e\u0442\u0432\u0435\u0442\u0430, \u043d\u043e \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u0431\u0435\u0437 \u043d\u0435\u0433\u043e.<\/p>\n<\/li>\n<li>\n<p>\u0411\u0438\u0442\u044b \u0441 0x0080 \u043f\u043e 0x0010 (CTR_TX, DTOG_TX, STAT_TX) \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438 \u0441\u0442\u0430\u0440\u0448\u0438\u0435 4, \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u043d\u0435 \u0437\u0430 \u043f\u0440\u0438\u0451\u043c, \u0430 \u0437\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0445\u043e\u0441\u0442\u0443<\/p>\n<\/li>\n<li>\n<p>\u043c\u043b\u0430\u0434\u0448\u0438\u0435 4 \u0431\u0438\u0442\u0430 \u0445\u0440\u0430\u043d\u044f\u0442 \u043d\u043e\u043c\u0435\u0440 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438. \u041d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u0445 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u0433\u0434\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0441\u0432\u043e\u0439 \u043d\u043e\u043c\u0435\u0440 \u043e\u0442 \u0445\u043e\u0441\u0442\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0443 \u043d\u0430\u0441 4 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0442\u043e\u0447\u043a\u0438: \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u043d\u0443\u043b\u0435\u0432\u0430\u044f, \u043e\u0434\u043d\u0430 \u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 (\u043f\u0435\u0440\u0432\u0430\u044f), \u043e\u0434\u043d\u0430 \u0434\u043b\u044f \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 (\u0432\u0442\u043e\u0440\u0430\u044f) \u0438 \u043e\u0434\u043d\u0430 \u043d\u0430 \u043f\u0440\u0438\u0451\u043c (\u0442\u0440\u0435\u0442\u044c\u044f). \u0422\u0430\u0431\u043b\u0438\u0446\u0443 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438 \u043c\u044b \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0438\u043b\u0438 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 PMA. \u0412 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438. \u0417\u0430\u0442\u0435\u043c &#8212; \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0430\u0439\u0442 \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c. \u0417\u0430\u0442\u0435\u043c &#8212; \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u043f\u0440\u0438\u0451\u043c\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u0435\u0441\u0442\u0430 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445: \u0441\u0442\u0430\u0440\u0448\u0438\u0439 \u0431\u0438\u0442 (0x8000) \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0431\u043b\u043e\u043a\u0438 \u0438\u043c\u0435\u044e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 32 \u0431\u0430\u0439\u0442\u0430 (\u0435\u0441\u043b\u0438 0 &#8212; \u0442\u043e 2 \u0431\u0430\u0439\u0442\u0430 \u043d\u0430 \u0431\u043b\u043e\u043a), \u0437\u0430\u0442\u0435\u043c \u0431\u0438\u0442\u044b \u0441 0x4000 \u043f\u043e 0x0400 &#8212; \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u0442\u0438\u0445 \u0431\u043b\u043e\u043a\u043e\u0432 (\u043c\u0438\u043d\u0443\u0441 1). \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u0449\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 &#8212; 512 \u0431\u0430\u0439\u0442. \u041e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f 10 \u0431\u0438\u0442 \u0431\u0443\u0434\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0447\u0438\u0441\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0445 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0431\u0430\u0439\u0442.<\/p>\n<p>\u0418 \u0434\u0430\u043b\u0435\u0435 \u043f\u043e \u043a\u0440\u0443\u0433\u0443 \u0434\u043b\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a. \u041f\u0440\u0438 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0435 \u0432\u0430\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u043b\u0430\u0441\u0442\u0438 PMA \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u043d\u0443\u0436\u0434 \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u043b\u0438\u0441\u044c. \u0418\u043d\u0430\u0447\u0435 \u043c\u044b \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0447\u0438\u0442\u0430\u0435\u043c.<\/p>\n<h2>\u0414\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u044b<\/h2>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0432\u0430\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u0431\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0430\u0448\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e &#8212; \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u044b. \u042d\u0442\u043e \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0438 \u043e\u0442\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0445\u043e\u0441\u0442\u0430 &#171;\u0447\u0442\u043e \u0442\u044b \u0442\u0430\u043a\u043e\u0435&#187; \u0438 &#171;\u043a\u0430\u043a \u0442\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0448\u044c&#187;. <\/p>\n<details class=\"spoiler\">\n<summary>\u0414\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">const char DeviceDiscriptor[] = {  0x12,   \/\/ bLength \/  0x01,     \/\/ bDescriptorType \/  0x00, 0x02,\/\/ bcdUSB = 2.00 \/   \/\/ \u043a\u043b\u0430\u0441\u0441 \u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 https:\/\/www.usb.org\/defined-class-codes 0x02, \/\/ bDeviceClass: CDC \/  0x00,   \/\/ bDeviceSubClass \/  0x00,   \/\/ bDeviceProtocol \/  0x40,   \/\/ bMaxPacketSize0 \/   \/\/STMicroelectronics  \u0421DC \/\/ \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0441\u0430\u0439\u0442\u0430 https:\/\/www.the-sz.com\/products\/usbid\/index.php?v=0x04830x83,  0x04,   \/\/ idVendor = 0x0483 \/  0x40, 0x57,\/\/ idProduct = 0x7540 \/  0x00, 0x02,\/\/ 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>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0414\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\"> const char ConfigDescriptor[] = {  \/\/Configuration Descriptor  0x09,   \/\/ bLength: Configuration Descriptor size  0x02,\/\/ bDescriptorType: Configuration  67,\/\/ wTotalLength:no of returned bytes  0x00, 0x02,   \/\/ bNumInterfaces: 2 interface  0x01,   \/\/ bConfigurationValue: Configuration value  0x00,   \/\/ iConfiguration: Index of string descriptor describing the configuration  0xC0,   \/\/ bmAttributes: self powered  0x32,   \/\/ MaxPower 0 mA  \/\/Interface Descriptor  0x09,   \/\/ bLength: Interface Descriptor size  0x04,\/\/ bDescriptorType: Interface  \/\/ Interface descriptor type  0x00,   \/\/ bInterfaceNumber: Number of Interface  0x00,   \/\/ bAlternateSetting: Alternate setting  0x01,   \/\/ bNumEndpoints: One endpoints used  0x02,   \/\/ bInterfaceClass: Communication Interface Class  0x02,   \/\/ bInterfaceSubClass: Abstract Control Model  0x01,   \/\/ bInterfaceProtocol: Common AT commands  0x00,   \/\/ iInterface:  \/\/Header Functional Descriptor  0x05,   \/\/ bLength: Endpoint Descriptor size  0x24,   \/\/ bDescriptorType: CS_INTERFACE  0x00,   \/\/ bDescriptorSubtype: Header Func Desc  0x10,   \/\/ bcdCDC: spec release number  0x01,\/\/Call Management Functional Descriptor  0x05,   \/\/ bFunctionLength  0x24,   \/\/ bDescriptorType: CS_INTERFACE  0x01,   \/\/ bDescriptorSubtype: Call Management Func Desc  0x00,   \/\/ bmCapabilities: D0+D1  0x01,   \/\/ bDataInterface: 1  \/\/ACM Functional Descriptor  0x04,   \/\/ bFunctionLength  0x24,   \/\/ bDescriptorType: CS_INTERFACE  0x02,   \/\/ bDescriptorSubtype: Abstract Control Management desc  0x02,   \/\/ bmCapabilities  \/\/Union Functional Descriptor  0x05,   \/\/ bFunctionLength  0x24,   \/\/ bDescriptorType: CS_INTERFACE  0x06,   \/\/ bDescriptorSubtype: Union func desc  0x00,   \/\/ bMasterInterface: Communication class interface  0x01,   \/\/ bSlaveInterface0: Data Class Interface  \/\/Endpoint 2 Descriptor  0x07,   \/\/ bLength: Endpoint Descriptor size  0x05,   \/\/ bDescriptorType: Endpoint  0x82,   \/\/ bEndpointAddress: (IN2)  0x03,   \/\/ bmAttributes: Interrupt  8,   \/\/ wMaxPacketSize:  0x00, 0xFF,   \/\/ bInterval:  \/\/Data class interface descriptor  0x09,   \/\/ bLength: Endpoint Descriptor size  0x04,  \/\/ bDescriptorType:  0x01,   \/\/ bInterfaceNumber: Number of Interface  0x00,   \/\/ bAlternateSetting: Alternate setting  0x02,   \/\/ bNumEndpoints: Two endpoints used  0x0A,   \/\/ bInterfaceClass: CDC  0x00,   \/\/ bInterfaceSubClass:  0x00,   \/\/ bInterfaceProtocol:  0x00,   \/\/ iInterface:  \/\/Endpoint 3 Descriptor  0x07,   \/\/ bLength: Endpoint Descriptor size  0x05,   \/\/ bDescriptorType: Endpoint  0x03,   \/\/ bEndpointAddress: (OUT3)  0x02,   \/\/ bmAttributes: Bulk  64,\/\/ wMaxPacketSize: 0x00,  0x00,   \/\/ bInterval: ignore for Bulk transfer  \/\/Endpoint 1 Descriptor  0x07,   \/\/ bLength: Endpoint Descriptor size  0x05,   \/\/ bDescriptorType: Endpoint  0x81,   \/\/ bEndpointAddress: (IN1)  0x02,   \/\/ bmAttributes: Bulk  64,\/\/ wMaxPacketSize:  0x00, 0x00\/\/ bInterval   }; <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0414\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u044b \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0430\u0445, \u0434\u0430 \u0438 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445 \u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0438\u0445 \u043d\u0430\u0439\u0442\u0438 \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u043e. \u0422\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u0443 \u0447\u0430\u0441\u0442\u044c \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438,<a href=\"https:\/\/www.beyondlogic.org\/usbnutshell\/usb1.shtml\" rel=\"noopener noreferrer nofollow\"> USB in a nutshell <\/a>\u0438\u043b\u0438 <a href=\"https:\/\/www.usbmadesimple.co.uk\/\" rel=\"noopener noreferrer nofollow\">USB made simple<\/a>. \u0412\u0441\u0451-\u0442\u0430\u043a\u0438 \u043c\u043e\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0441\u043a\u043e\u0440\u0435\u0435 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u043e\u0431\u0440\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u044f\u0442\u043e.<\/p>\n<details class=\"spoiler\">\n<summary>\u0410 \u043d\u0435 \u043a\u0430\u043a \u0442\u0443\u0442<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u043b\u043e\u0441\u044c \u0434\u043e \u043a\u043e\u043d\u0446\u0430. \u0412\u0440\u043e\u0434\u0435 COM, \u043d\u043e \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0441\u043a\u043e\u043c\u043a\u0430\u043d\u043d\u044b\u0439. \u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u0441\u043c\u043e\u0433 \u043e\u0434\u0438\u043d \u0438\u0437 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0435\u0434\u0438\u043d\u044b\u043c \u043a\u0443\u0441\u043a\u043e\u043c. \u0410 \u0447\u0438\u0442\u0430\u044e \u0442\u043e \u044f \u0435\u0433\u043e &#171;\u043e\u0442 \u0437\u0430\u0431\u043e\u0440\u0430 \u0438 \u0434\u043e \u043e\u0431\u0435\u0434\u0430&#187;! \u0422\u0430\u043a \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440, \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0430 \u0441\u0432\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 &#171;\u043a\u0430\u043a \u0442\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0448\u044c&#187;, \u0432\u043c\u0435\u0441\u0442\u043e \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0430 &#171;\u044f \u0434\u0435\u043b\u0430\u044e \u0432\u043e\u0442 \u044d\u0442\u043e \u0438 \u0432\u043e\u0442 \u044d\u0442\u043e&#187; \u043f\u043e\u043b\u0443\u0447\u0430\u043b \u043e\u0442\u0432\u0435\u0442 &#171;\u0447\u0435\u0440\u0435\u0437 \u0416&#8230;&#187; \u0438 \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u043b \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c. \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u044d\u0442\u043e\u0442 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u0435\u0439 \u043f\u043e 16 \u0431\u0430\u0439\u0442 \u0438 \u0441\u043b\u0430\u0442\u044c \u0438\u0445 \u043e\u0434\u043d\u0443 \u0437\u0430 \u0434\u0440\u0443\u0433\u043e\u0439. \u0417\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e.<\/p>\n<p>\u041f\u043e\u0442\u043e\u043c \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u044f  \u043f\u0435\u0440\u0435\u043e\u0431\u044a\u044f\u0432\u043b\u044f\u043b \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u0444\u0430\u0439\u043b\u0435, \u0438 \u043e\u0442 \u043a\u043e\u0441\u0442\u044b\u043b\u044f \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f. \u0422\u0435\u043f\u0435\u0440\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e \u0441\u0432\u043e\u0438 \u0434\u0435\u0444\u0430\u0439\u043d\u044b.<\/p>\n<\/div>\n<\/details>\n<p>\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \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 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0447\u0442\u0435\u043d\u0438\u044f-\u0437\u0430\u043f\u0438\u0441\u0438 PMA<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">typedef enum _CONTROL_STATE{ WAIT_SETUP, SETTING_UP, IN_DATA, OUT_DATA, LAST_IN_DATA, LAST_OUT_DATA, WAIT_STATUS_IN, WAIT_STATUS_OUT, STALLED, PAUSE } CONTROL_STATE;   \/\/\u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c  unsigned char USB_Buff1[64];  unsigned char USB_COM_TX_Buff1[64];  uint16_t USB_RX_Start_pointer=0;  uint16_t USB_Recieved_bytes=0;  uint16_t USB_Bytes_to_send_left = 0;  \/\/\u042d\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043d\u0443\u0436\u043d\u0430 \u043d\u0430\u043c \u0434\u043b\u044f \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043c\u0438\u0440\u043e\u043c  uint8_t USB_Function_flags=0;  \/\/1 - \u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u043f\u0440\u0430\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0445\u043e\u0441\u0442(IN)  \/\/2 - \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442 \u0445\u043e\u0441\u0442\u0430 (OUT)  \/\/4 - \u0435\u0441\u0442\u044c, \u0447\u0442\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c  \/\/8 - \u0414\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 \u0445\u043e\u0441\u0442\u0430 \u0432 EP3 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b  \/\/\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439   uint16_t USB_Command;  uint16_t USB_wValue;  uint16_t USB_wLength; \/\/\u0421\u0442\u0430\u0434\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043e\u0442 \u0445\u043e\u0441\u0442\u0430  CONTROL_STATE USB_state_flag = WAIT_SETUP; \/\/\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430  uint8_t USB_DADDR = 0;  uint8_t USB_Feature;  uint8_t USB_Configuration;  uint8_t USB_Interface;  uint8_t EPindex;  uint16_t BKIstr=0; uint16_t SaveTState; <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0427\u0442\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 PMA<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/P1 - \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u043e\u0442\u043a\u0443\u0434\u0430 \u0447\u0438\u0442\u0430\u0435\u043c \/\/P2 - \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 PMA, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \/\/N - \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0439\u0442 \/\/max - \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 PMA \u0440\u0430\u0437\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0439 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 void TO_WRITE_PMA(uint16_t *P1, uint32_t P2, uint16_t N, uint16_t max){ uint8_t i; N = (N > max)? max : N;  for(i=0; i&lt;N; i+=2){  PMA_SBUF(P2+i) = *P1; P1++;  } }  void TO_READ_PMA(uint32_t P2, uint16_t *P1, uint16_t N, uint16_t max){ uint8_t i; N = (N > max)? max : N;  for(i=0; i&lt;N; i+=2){  *P1 = PMA_SBUF(P2+i);  P1++;  } }  \/\/\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432. \/\/\u0441\u0442\u0440\u043e\u043a\u0430 Str[] \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0443\u0441\u0442\u044b\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c \/\/EP - \u0446\u0435\u043b\u0435\u0432\u0430\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 void USB_Message (char Str[], uint8_t EP){ uint16_t b1 = PMA_BUF(EP * 4); uint8_t i; \/\/\u043d\u0435 \u0431\u043e\u043b\u0435\u0435 31 \u0441\u0438\u043c\u0432\u043e\u043b\u0430, \u0442.\u043a. \u0432\u0441\u0435\u0433\u043e \u0443 \u043d\u0430\u0441 64 \u0431\u0430\u0439\u0442\u0430, \/\/\u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 2 - \u044d\u0442\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a  \/\/(\u043c\u043b\u0430\u0434\u0448\u0438\u0439 \u0431\u0430\u0439\u0442 - \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e, \u0441\u0442\u0430\u0440\u0448\u0438\u0439 - \u0442\u0438\u043f \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430), \/\/\u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 - \u0442\u0435\u043a\u0441\u0442 \u0432 \u044e\u043d\u0438\u043a\u043e\u0434\u0435  for (i = 0; (Str[i] &amp;&amp; i &lt; 31); i++) {  b1 += 2;  PMA_SBUF(b1) = Str[i];  } i =i * 2 + 2 b1 = PMA_BUF(EP * 4);  PMA_SBUF(b1) = i | 0x0300;  \/\/N bytes, 3 - string descriptor  PMA_BUF(EP * 4+1) = i; }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h2>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u0432\u0445\u043e\u0434\u0438\u043c \u0432 \u043f\u043e\u0434\u0437\u0435\u043c\u0435\u043b\u044c\u0435<\/h2>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435. \u0422\u0443\u0442 \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e: \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0443 \u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a. \u041f\u0440\u0438\u0447\u0438\u043d \u0443 \u043d\u0430\u0441 \u0434\u0432\u0435 &#8212; \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043d\u044f\u0442\u044b \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440 (\u0441\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440 CNTR \u0432\u044b\u0448\u0435)<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">void USB_LP_CAN1_RX0_IRQHandler(){ BKIstr = ISTR; if(BKIstr &amp; ISTR_CTR){ CTR_LP_CTRX(); }   if(BKIstr &amp; ISTR_RESET){ USB_RESET(); } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041c\u044b \u0443\u0436\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 USB_RESET(), \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0442\u0443\u0434\u0430 \u0437\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0442\u044c. \u041d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u043f\u0440\u0438\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0436\u0434\u0451\u0442 \u043d\u0430\u0441 \u0432 CTR_LP_CTRX().<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434 CTR_LP_CTRX()<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#define ISTR_CTR0x8000 #define ISTR_EP_ID0x000F #define EP_CTR_TX0x0080 #define EP_CTR_RX0x8000 #define USB_EP0_MAX_PACKET_SIZE0x0040  void CTR_LP_CTRX() { uint16_t TempEP; uint8_t Related_Endpoint, Reserved; uint16_t USB_wIndex;  while (((BKIstr = ISTR) &amp; ISTR_CTR)) {     \/\/ extract highest priority endpoint number      EPindex = (uint8_t)(BKIstr &amp; ISTR_EP_ID);    if (EPindex == 1 &amp;&amp; (EP1R &amp; EP_CTR_TX)){ \/\/CDC Transmit       EP1R &amp;= 0x8F0F;       USB_Function_flags |= 1; } else if (EPindex == 3 &amp;&amp; (EP3R &amp; EP_CTR_RX)){ \/\/CDC Receive USB_Function_flags &amp;= 0xEF; USB_RX_Start_pointer = 0;  \/\/you can save up current time     \/\/in case you have a limited timeframe for processing this data     EP3R = (EP3R ^ 0x2000) &amp; 0x3F8F;     USB_Recieved_bytes = (PMA_BUF(15)&amp;0x3FF);     TO_READ_PMA(EP3RX_OFFSET, USB_Buff1, 64,64); USB_Function_flags |= 2;          \/\/ Decode and service non control endpoints interrupt          \/\/ process related endpoint register       } else if(EPindex == 0){          \/\/ Decode and service control endpoint interrupt          \/\/ calling related service routine          \/\/ (Setup0_Process, In0_Process, Out0_Process)           \/\/ save RX &amp; TX status          \/\/ and set both to NAK         SaveTState = EP0R &amp; 0x3030;        EP0R = (EP0R^0x2020)&amp;0xBFBF;         \/\/ DIR bit = origin of the interrupt          if (BKIstr &amp; ISTR_DIR) {             \/\/ DIR = 1 *\/             \/\/ DIR = 1 &amp; CTR_RX       => SETUP or OUT int              \/\/ DIR = 1 &amp; (CTR_TX | CTR_RX) => 2 int pending              EP0R &amp;=0x0F8F;\/\/ SETUP bit kept frozen while CTR_RX = 1              USB_state_flag = STALLED;             if (EP0R &amp; EP_SETUP) {                USB_Command = PMA_SBUF(EP0RX_OFFSET);               USB_wValue  = PMA_SBUF(EP0RX_OFFSET+2);               USB_wIndex  = PMA_SBUF(EP0RX_OFFSET+4);               USB_wLength = PMA_SBUF(EP0RX_OFFSET+6);               if (USB_wLength == 0)               {                 \/\/ Setup with no data stage                 USB_state_flag = WAIT_STATUS_IN;\/\/ After no data stage SETUP               PMA_BUF(1) = 0;               if (USB_Command == 0x0900){    \/\/ SET_CONFIGURATION               USB_Configuration = USB_wValue;               } else if (USB_Command == 0x0500){\/\/SET ADDRESS               USB_DADDR = USB_wValue | DADDR_EF;               } else if ((USB_Command &amp;0xFDFF) == 0x0100){\/\/SET FEATURE for Device 0300, CLEAR FEATURE for Device 0100                } else if (USB_Command == 0x0B01 &amp;&amp; (USB_Configuration) &amp;&amp; ((USB_wIndex &amp; 0xFF) &lt;= 1)){\/\/SET INTERFACE               USB_Interface = USB_wIndex;               } else if (USB_Command == 0x0102){               \/\/EndPoint Clear Feature               Related_Endpoint = USB_wIndex &amp; 0x7F;                   if ((USB_wValue == 0)\/\/ENDPOINT_STALL)                       &amp;&amp; (USB_wIndex > 0x100) &amp;&amp; USB_Configuration)                   {                     \/\/Get Status of endpoint &amp; stall the request if the related_ENdpoint                     is Disabled                   TempEP = ENDPOINT(Related_Endpoint);                   if (USB_wIndex &amp; 0x80) {                   \/\/ IN endpoint                    if ((TempEP&amp;0x0030)==0x0010)                   {                       ENDPOINT(Related_Endpoint) = (TempEP ^ 0x0030)&amp;0x8FFF;                   }                   } else {                   \/\/ OUT endpoint                   if ((TempEP&amp;0x3000)==0x1000)                   {                   if (Related_Endpoint == 0)                       {                         \/\/ After clear the STALL, enable the default endpoint receiver                        PMA_BUF(3) = 0x8400;                       EP0R = (EP0R ^ 0x3000)&amp;0xBF8F;                       }                       else                       {                         ENDPOINT(Related_Endpoint) = (TempEP ^ 0x3000)&amp;0xFF8F;                       }                   }                   }                   }               } else if (USB_Command == 0x0302){ \/\/ get Status of endpoint &amp; stall the request if the related_ENdpoint is Disabled                   Related_Endpoint = USB_wIndex &amp; 0x7F;                   if ((USB_wValue==0) &amp;&amp; USB_Configuration){                   TempEP = ENDPOINT(Related_Endpoint);                   if (USB_wIndex &amp; 0x80) {                                  if(TempEP&amp;0x0030){                 ENDPOINT(Related_Endpoint) = (TempEP ^ 0x0010)&amp;0x8FBF;                 }               } else {                 if(TempEP&amp;0x3000){                 ENDPOINT(Related_Endpoint) = (TempEP ^ 0x1000)&amp;0xBF8F;                 }               }                   }                } else if ((USB_Command &amp; 0xDDFF) == 0x0021){                   \/\/SET_COMM_FEATURE 0221                   \/\/SET_CONTROL_LINE_STATE 2221                   \/\/SET Linecoding 2021                             USB_Message(\"Device connected\\r\\0\",1);               USB_main_COM_react();                } else {               USB_state_flag = STALLED;               }                SaveTState |= 0x0030;               } else {                 \/\/ Setup with data stage                USB_state_flag =  LAST_IN_DATA;               PMA_BUF(1) = USB_wLength;             if (USB_Command == 0x0680){\/\/GET DESCRIPTOR                   if (USB_wValue == 0x0100){                   TO_WRITE_PMA(DeviceDiscriptor,EP0TX_OFFSET,0x12,USB_EP0_MAX_PACKET_SIZE);                   PMA_BUF(1)= 0x12;                   } else if (USB_wValue == 0x0200){                   TO_WRITE_PMA(ConfigDescriptor,EP0TX_OFFSET,64,USB_EP0_MAX_PACKET_SIZE);                    if (USB_wLength>9){                                              PMA_BUF(1)= USB_EP0_MAX_PACKET_SIZE;                   USB_state_flag = IN_DATA;                   }                      } else if (USB_wValue == 0x0300){                   PMA_SBUF(EP0TX_OFFSET) = 0x0304; \/\/ 3 - string descriptor, N=4                   PMA_SBUF(EP0TX_OFFSET + 2) = 0x0409;\/\/Lang ID - US                   PMA_BUF(1)= 4;                   } else if (USB_wValue == 0x0301){                   USB_Message(\"VENDOR\\0\",0);                   } else if (USB_wValue == 0x0302){                   USB_Message(\"Device name\\0\",0);                   } else if (USB_wValue == 0x0303){                   uint32_t buf1 = *(__IO uint32_t*)(0x1FFFF7F0);\/\/get unique chip ID                   for (Reserved = 2; Reserved&lt;24; Reserved+=2){                   PMA_SBUF(EP0TX_OFFSET + Reserved)= (buf1 &amp; 0x7) + '0';                   buf1 >>= 3;                   }                   PMA_SBUF(EP0TX_OFFSET)= 0x0318;                   PMA_BUF(1)=24;                   }\/\/ End of GET_DESCRIPTOR             } else if ((USB_Command&amp;0xFFFE) == 0x0080){\/\/ GET STATUS for Device, GET STATUS for Interface             Reserved = 0;             if (USB_Command == 0x0080){                 if (USB_Feature &amp; 0x20){\/\/ is Remote Wakeup enabled?                 Reserved |= 2;                 }                 if (USB_Feature &amp; 0x40){\/\/ is Bus-powered?                 Reserved |= 1;                 }             }             PMA_SBUF(EP0TX_OFFSET) = Reserved;              } else if (USB_Command == 0x0082){\/\/ GET STATUS for EndPoint             Related_Endpoint = USB_wIndex &amp; 0x7F;             PMA_SBUF(EP0TX_OFFSET) =0;             TempEP = ENDPOINT(Related_Endpoint);            if (USB_wIndex &amp; 0x80) {             \/\/ get Status of endpoint &amp; stall the request if the related_ENdpoint is Disabled             if(TempEP&amp;0x0030 == 0x0010){             PMA_SBUF(EP0TX_OFFSET) =1;\/\/ IN Endpoint stalled              }             } else {             if(TempEP&amp;0x3000 == 0x1000){             PMA_SBUF(EP0TX_OFFSET) =1;\/\/OUT Endpoint stalled              }             }              } else if (USB_Command == 0x0880){\/\/GET CONFIGURATION             PMA_SBUF(EP0TX_OFFSET) = USB_Configuration;              } else if ((USB_Command &amp; 0xFE7F) == 0x2021){                   \/\/Get (21A1)\/set (20A1) Line Coding             PMA_BUF(EP0TX_OFFSET) = 9600;\/\/baudrate             PMA_SBUF(EP0TX_OFFSET+4) = 0;\/\/parity*256+format             PMA_SBUF(EP0TX_OFFSET+6) = 8;\/\/datatype             } else {             USB_state_flag = STALLED;             }                 SaveTState = (0x3030);                }             }         } else {             \/\/ DIR = 0              \/\/ DIR = 0      => IN  int              \/\/ DIR = 0 implies that (EP_CTR_TX = 1) always           EP0R &amp;=0x8F0F;          if (USB_state_flag == IN_DATA){             \/\/last 3 bytes of Config Descriptor             \/\/no need to use procedure as there is only 2 assignments     PMA_SBUF(EP0TX_OFFSET) = 0x0040;     PMA_SBUF(EP0TX_OFFSET + 2) = 0;     USB_state_flag =  LAST_IN_DATA;     PMA_BUF(1)= 3;     SaveTState = (0x3030);         } else if (USB_state_flag == LAST_IN_DATA){         USB_state_flag = WAIT_STATUS_OUT;       SaveTState = (0x3010);         } else {         if (USB_DADDR){\/\/SetDeviceAddress         for (Reserved = 0; Reserved &lt; EP_NUM; Reserved++) {         ENDPOINT(Reserved) = (ENDPOINT(Reserved) &amp; 0x8F80) | Reserved ;         }         DADDR = USB_DADDR; \/\/ set device address and enable device function         USB_DADDR = 0;         }         USB_state_flag = STALLED;         }          }         PMA_BUF(3) = 0x8400;                 if (USB_state_flag == STALLED) SaveTState = 0x1010;          EP0R = (EP0R^(SaveTState))&amp;0xBFBF;         return;     }    } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u0442\u0443\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. \u0418 \u044d\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e, \u0440\u0430\u0434\u0438 \u0447\u0435\u0433\u043e \u0432\u0441\u044f \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0438\u0441\u0430\u043b\u0430\u0441\u044c \u0438 \u0440\u0430\u0434\u0438 \u0447\u0435\u0433\u043e \u0432\u044b \u0435\u0451 \u0441\u0435\u0439\u0447\u0430\u0441 \u0447\u0438\u0442\u0430\u0435\u0442\u0435.<\/p>\n<p>\u0412\u043d\u0430\u0447\u0430\u043b\u0435 \u043c\u044b \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u043c \u0432 \u0446\u0438\u043a\u043b, \u0437\u0430\u0434\u0430\u0447\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e &#8212; \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432\u0441\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u043e ISTR_CTR (\u043e\u043d \u0436\u0435 0x8000 &#8212; \u043f\u0440\u0438\u0451\u043c \u0434\u0430\u043d\u043d\u044b\u0445).<\/p>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043c\u044b \u0442\u0443\u0442 \u0434\u0435\u043b\u0430\u0435\u043c, \u044d\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c, \u043a\u0430\u043a\u0443\u044e \u0438\u043c\u0435\u043d\u043d\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u0438\u0451\u043c \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443. \u041d\u043e\u043c\u0435\u0440 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0443\u0437\u043d\u0430\u0451\u043c \u0438\u0437 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f. \u042d\u0442\u043e \u043c\u043b\u0430\u0434\u0448\u0438\u0435 4 \u0431\u0438\u0442\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 ISTR. \u041f\u0440\u0438\u0451\u043c \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f 5 \u0431\u0438\u0442\u043e\u043c (0x0010). <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u043d\u043e\u043c\u0435\u0440 1, \u0438 \u0431\u0438\u0442 EP_CTR_TX (0x0080) \u043f\u043e\u0434\u043d\u044f\u0442, \u0445\u043e\u0441\u0442 \u0445\u043e\u0447\u0435\u0442 \u0447\u0442\u043e-\u0442\u043e \u043e\u0442 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0430\u043c \u044d\u0442\u043e \u043d\u0435 \u0432\u0430\u0436\u043d\u043e, \u0442\u0430\u043a \u0447\u0442\u043e \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0431\u0438\u0442 CTR_TX (EP1R &amp;= 0x8F0F), \u0438, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0447\u0442\u043e-\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u043c. \u0422\u0443\u0442 \u0432\u0430\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u043c \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043e\u0442\u0432\u0435\u0442, \u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0432 \u0440\u0435\u0436\u0438\u043c NAK, \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e EP1R = (EP1R ^ 0x0020) &amp; 0x8F3F, \u0437\u0430\u0442\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 PMA \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 EP1TX_OFFSET (\u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 PMA_BUF(4)), \u0437\u0430\u0442\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 PMA_BUF(5) \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u0442\u0438\u0445 \u0431\u0430\u0439\u0442, \u0438, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0432 \u0440\u0435\u0436\u0438\u043c &#171;\u0433\u043e\u0442\u043e\u0432\u043e&#187; \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 EP1R = (EP1R ^ 0x0030) &amp; 0x8FBF<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u043c\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0438\u0437 \u0434\u0440\u0443\u0433\u0438\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0442\u043e \u0435\u0441\u0442\u044c \u043a\u043e\u0433\u0434\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c, \u0447\u0442\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0443\u0436\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 (\u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0440\u0430\u043d\u0435\u0435 \u0432 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 USB_COM_TX_Buff1, \u0430 \u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 USB_Bytes_to_send_left)<\/p>\n<details class=\"spoiler\">\n<summary>\u0427\u0442\u043e\u0431\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0445\u043e\u0441\u0442\u0443<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 (\u043f\u0430\u043a\u0435\u0442 \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c USB_EP1_MAX_PACKET_SIZE_TX) \u0432 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0431\u0443\u0444\u0435\u0440 USB_COM_TX_Buff1,<\/p>\n<p>\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e USB_Bytes_to_send_left \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u0431\u0430\u0439\u0442 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043f\u0430\u043a\u0435\u0442\u0435<\/p>\n<p>\u0412\u044b\u0437\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443<\/p>\n<pre><code class=\"cpp\">#define USB_EP1_MAX_PACKET_SIZE_TX0x40  \/\/\u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0445\u043e\u0441\u0442\u0443 \/\/\u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0432 USB_COM_TX_Buff1 \/\/\u0438 \u0432 USB_Bytes_to_send_left \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. void USB_main_COM_react(){  if (USB_Bytes_to_send_left){ \/\/send pack back to the Host USB_Function_flags &amp;= 0xFE; TO_WRITE_PMA(USB_COM_TX_Buff1 ,EP1TX_OFFSET, 64, USB_EP1_MAX_PACKET_SIZE_TX); PMA_BUF(5) = USB_Bytes_to_send_left; EP1R = (EP1R^0x0030)&amp;0x8FBF; USB_Bytes_to_send_left = 0;  uint32_t i = 5000; while (((EP1R &amp; 0x80) == 0) &amp;&amp; (i)) {i--;}   } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u043d\u043e\u043c\u0435\u0440 3. \u041e\u043d\u0430 \u0441\u043b\u0443\u0436\u0438\u0442 \u0434\u043b\u044f \u043f\u0440\u0438\u0451\u043c\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u0418\u0442\u0430\u043a, \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u043d\u043e\u043c\u0435\u0440 3 \u0438 \u0435\u0451 \u0431\u0438\u0442 EP_CTR_RX (0x8000) \u043f\u043e\u0434\u043d\u044f\u0442. \u041c\u044b \u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u044d\u0442\u043e\u0442 \u0431\u0438\u0442 \u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0432 \u0440\u0435\u0436\u0438\u043c \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f: EP3R = (EP3R ^ 0x2000) &amp; 0x3F8F. \u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043c\u0430\u0445\u0430\u0442\u044c \u0444\u043b\u0430\u0433\u0430\u043c\u0438 \u0434\u043b\u044f \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 \u043e\u0431\u0449\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043d\u043e \u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u0447\u0442\u043e \u043d\u0430\u0441 \u0441\u0435\u0439\u0447\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 &#8212; \u044d\u0442\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0445 \u0431\u0430\u0439\u0442. \u042d\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043c\u043b\u0430\u0434\u0448\u0438\u0445 10 \u0431\u0438\u0442\u0430\u0445 \u044f\u0447\u0435\u0439\u043a\u0438 (PMA_BUF(15)&amp;0x3FF). \u0414\u0430\u043b\u0435\u0435 \u043c\u044b \u043f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 PMA \u0432 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438 \u0438\u0445 \u043a\u0430\u043a-\u0442\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c.<\/p>\n<p>\u041d\u043e \u044d\u0442\u043e \u043d\u0435 \u0432\u0441\u0451. \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u044d\u0442\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 &#171;\u0433\u043e\u0442\u043e\u0432\u0430 \u043a \u043f\u0440\u0438\u0451\u043c\u0443&#187;. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0438\u043d\u0430\u0447\u0435, \u043f\u043e \u043f\u0440\u043e\u0448\u0435\u0441\u0442\u0432\u0438\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0445\u043e\u0441\u0442 \u0440\u0435\u0448\u0438\u0442, \u0447\u0442\u043e \u043d\u0430\u0448\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0437\u0430\u0432\u0438\u0441\u043b\u043e. \u0414\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e: EP3R = (EP3R^0x3000)&amp;0xBF8F. \u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0445 \u0431\u0430\u0439\u0442 \u0432 \u043d\u043e\u043b\u044c, \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u043b\u043e\u0441\u044c \u0432 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0435 USB_RESET: PMA_BUF(15) = 0x8400.<\/p>\n<details class=\"spoiler\">\n<summary>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0414\u0430\u043d\u043d\u044b\u0435 \u043b\u0435\u0436\u0430\u0442 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 USB_Buff1<\/p>\n<p>\u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 USB_Recieved_bytes<\/p>\n<p>\u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"cpp\">PMA_BUF(15) = 0x8400; EP3R = (EP3R^0x3000)&amp;0xBF8F;<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h2>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u0441\u0430\u043c\u043e\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0435<\/h2>\n<p> \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430, \u043d\u043e\u043c\u0435\u0440 0.<\/p>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 IN \u0438 OUT (EP_CTR_RX \u0438 EP_CTR_TX \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e), \u0435\u0441\u0442\u044c \u0435\u0449\u0451 \u0437\u0430\u043f\u0440\u043e\u0441 SETUP (\u0431\u0438\u0442 0x0800 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 EP0R). \u041f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u0443 \u043d\u0430\u0441 \u0434\u0432\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u0439 &#8212; \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u043e\u0442\u0432\u0435\u0442 \u0438 \u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442. \u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u0438\u0445 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 (\u043a\u0430\u043a \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439), \u0438 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.<\/p>\n<p>\u0422\u0430\u043d\u0435\u0446 \u0441 \u0431\u0443\u0431\u043d\u043e\u043c \u043d\u043e\u043c\u0435\u0440 1. \u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430.<\/p>\n<p>\u0428\u0430\u0433 1. \u0418\u0437 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043c\u044b \u0432\u043e\u0448\u043b\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0438 \u0432 \u0446\u0438\u043a\u043b \u0432\u043d\u0443\u0442\u0440\u0438 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b. \u0412\u044b\u044f\u0441\u043d\u0438\u043b\u0438, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 0 \u043a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430. \u041d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0440\u0438\u0451\u043c\u0430 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 (SaveTState = EP0R &amp; 0x3030), \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u043d\u0443\u043b\u0435\u0432\u0443\u044e \u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 NAK (\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445) \u0438 \u043f\u043e \u043a\u0430\u043d\u0430\u043b\u0443 \u043f\u0440\u0438\u0451\u043c\u0430, \u0438 \u043f\u043e \u043a\u0430\u043d\u0430\u043b\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438. \u0422\u0430\u043a \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0432\u0440\u0435\u043c\u044f \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u0445\u043e\u0441\u0442\u0443.<\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 (ISTR_DIR) \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c OUT (\u0431\u0438\u0442 \u043f\u043e\u0434\u043d\u044f\u0442), \u0411\u0438\u0442 EP_SETUP \u043f\u043e\u0434\u043d\u044f\u0442. \u0411\u0438\u0442 EP_CTR_RX \u0442\u043e\u0436\u0435 \u043f\u043e\u0434\u043d\u044f\u0442(\u0435\u0433\u043e \u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c).<\/p>\n<p>\u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 PMA, \u0440\u0430\u0437\u043c\u0435\u0447\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u044f \u043f\u0440\u0438\u0451\u043c\u0430 \u0432 \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435. \u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 USB_Command = PMA_SBUF(EP0RX_OFFSET);<br \/>\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 USB_wValue  = PMA_SBUF(EP0RX_OFFSET+2);<br \/>\u0438\u043d\u0434\u0435\u043a\u0441 USB_wIndex  = PMA_SBUF(EP0RX_OFFSET+4);<br \/>\u0438 \u0434\u043b\u0438\u043d\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0430 USB_wLength = PMA_SBUF(EP0RX_OFFSET+6);<\/p>\n<p>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f:<\/p>\n<ul>\n<li>\n<p>\u0432\u0435\u0440\u0445\u043d\u0438\u0435 8 \u0431\u0438\u0442 (0x8000 &#8230; 0x0100) &#8212; \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f,<\/p>\n<\/li>\n<li>\n<p>7 \u0431\u0438\u0442 (0x0080) &#8212; \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 \u043f\u043e\u0434\u043d\u044f\u0442, \u0442\u043e \u0445\u043e\u0441\u0442 \u0436\u0434\u0451\u0442 \u043e\u0442 \u043d\u0430\u0441 \u043e\u0442\u0432\u0435\u0442\u0430<\/p>\n<\/li>\n<li>\n<p>5 \u0431\u0438\u0442 (0x0020) &#8212; \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0437\u0430\u043f\u0440\u043e\u0441 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u043d \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432<\/p>\n<\/li>\n<li>\n<p>\u043c\u043b\u0430\u0434\u0448\u0438\u0435 4 \u0431\u0438\u0442\u0430 &#8212; \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430 \u0442\u043e, \u043a \u043a\u0430\u043a\u043e\u043c\u0443 \u0441\u043b\u043e\u044e USB \u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f &#8212; \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443, \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u0438\u043b\u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0435<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c, \u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043e\u0442\u0432\u0435\u0442. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 USB_wLength. \u0412 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 (\u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438) \u044d\u0442\u043e \u043d\u0435 \u043d\u043e\u043b\u044c.<\/p>\n<p>\u0421\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0443. \u0415\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0x0680 &#8212; \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440. \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440. \u041e\u043d \u0440\u0430\u0432\u0435\u043d 0x0200 &#8212; \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.<\/p>\n<p>\u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0447\u0430\u043b\u043e \u043d\u0430\u0448\u0435\u0433\u043e \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u044c PMA, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0437\u043c\u0435\u0447\u0435\u043d\u0430 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0445\u043e\u0441\u0442\u0443 \u043e\u0442 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 0. <\/p>\n<p>\u0422\u0443\u0442 \u0443 \u043d\u0430\u0441 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0445\u043e\u0441\u0442 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u044d\u0442\u043e\u0433\u043e \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430, \u043e\u043d \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u044b\u0435 9 \u0431\u0430\u0439\u0442 (\u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0431 \u043e\u0431\u0449\u0435\u0439 \u0434\u043b\u0438\u043d\u0435). \u042d\u0442\u043e 6 \u0438 7 \u0431\u0430\u0439\u0442\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u043c\u044b \u0438\u0445 \u0445\u0440\u0430\u043d\u0438\u043c \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 USB_wLength. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 \u044f\u0447\u0435\u0439\u043a\u0443 PMA (PMA_BUF(1)), \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0439\u0442 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438, \u0447\u0438\u0441\u043b\u043e 9. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0448\u0430\u0433\u0443 3 (LAST_IN_DATA).<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0436\u0435 \u0443 \u043d\u0430\u0441 \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430, \u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c 2 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430: \u043e\u043d \u043c\u0435\u043d\u044c\u0448\u0435 \u0447\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0443\u0444\u0435\u0440\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438, \u0438\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043b\u0438\u0431\u043e \u0440\u0430\u0432\u0435\u043d \u0435\u043c\u0443. \u0415\u0441\u043b\u0438 \u043c\u0435\u043d\u044c\u0448\u0435, \u0442\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0442\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0439\u0442, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0435\u0441\u0442\u044c \u0438 \u0442\u0430\u043a\u0436\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0448\u0430\u0433\u0443 3 (LAST_IN_DATA). \u0415\u0441\u043b\u0438 \u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435, \u0442\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 PMA_BUF(1) \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0439\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043e\u0434\u043d\u0438\u043c \u043f\u0430\u043a\u0435\u0442\u043e\u043c, \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0448\u0430\u0433\u0443 2 (IN_DATA).<\/p>\n<p>\u0428\u0430\u0433 2. IN_DATA. \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043d\u0443\u043b\u0435\u0432\u0443\u044e \u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0434\u043b\u044f \u043f\u0440\u0438\u0451\u043c\u0430 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 EP0R = (EP0R^0x3030)&amp;0xBFBF \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0432\u0438\u0442\u043e\u043a \u0446\u0438\u043a\u043b\u0430.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u043c \u0432 \u0446\u0438\u043a\u043b \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438:<br \/>(ISTR_DIR) \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c IN (\u0431\u0438\u0442 \u043e\u043f\u0443\u0449\u0435\u043d),<br \/>EP_SETUP \u043e\u043f\u0443\u0449\u0435\u043d, <br \/>\u0411\u0438\u0442 EP_CTR_TX \u043f\u043e\u0434\u043d\u044f\u0442(\u0435\u0433\u043e \u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c)<br \/>\u0415\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0442\u0430\u043a, \u0442\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u043d\u0443\u043b\u0435\u0432\u0443\u044e \u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 STALL (EP0R = (EP0R^0x1010)&amp;0xBFBF) \u0438 \u0432\u044b\u0445\u043e\u0434\u0438\u043c \u0438\u0437 \u0446\u0438\u043a\u043b\u0430.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0441\u0451 \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u0434\u043e, \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u043d\u0443\u043b\u0435\u0432\u0443\u044e \u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 NAK \u043d\u0430 \u043f\u0440\u0438\u0451\u043c \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443, \u0434\u043e\u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u0431\u0430\u0439\u0442\u044b \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430. \u0422\u0443\u0442 \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0438\u0445 \u043d\u043e\u043b\u044c, \u043d\u043e \u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e. \u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u0432 PMA_BUF(1).<\/p>\n<p>\u041e\u043f\u044f\u0442\u044c \u0436\u0435, \u0432 \u044d\u0442\u043e\u043c \u0448\u0430\u0433\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043a\u0440\u0443\u0442\u0438\u0442\u044c\u0441\u044f \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043e\u0441\u0442\u0430\u0432\u0448\u0435\u0435\u0441\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0439\u0442 \u0434\u043b\u044f \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u0440\u043e\u0433\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u0447\u0435\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0430\u043a\u0435\u0442\u0430 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438. \u0422\u043e\u0433\u0434\u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0435 \u0441\u043d\u043e\u0432\u0430 \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u0448\u0430\u0433\u0430 2(IN_DATA), \u0430 \u043a \u0448\u0430\u0433\u0443 3 (LAST_IN_DATA).<\/p>\n<p>\u0428\u0430\u0433 3. LAST_IN_DATA. \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043d\u0443\u043b\u0435\u0432\u0443\u044e \u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0434\u043b\u044f \u043f\u0440\u0438\u0451\u043c\u0430 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 EP0R = (EP0R^0x3030)&amp;0xBFBF \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0432\u0438\u0442\u043e\u043a \u0446\u0438\u043a\u043b\u0430.<\/p>\n<p>\u041c\u044b \u0441\u043d\u043e\u0432\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u043c \u0432 \u0446\u0438\u043a\u043b \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438:<br \/>ISTR_DIR \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c IN (\u0431\u0438\u0442 \u043e\u043f\u0443\u0449\u0435\u043d),<br \/>EP_SETUP \u043e\u043f\u0443\u0449\u0435\u043d, <br \/>\u0411\u0438\u0442 EP_CTR_TX \u043f\u043e\u0434\u043d\u044f\u0442(\u0435\u0433\u043e \u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c).<br \/>\u0415\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0442\u0430\u043a, \u0442\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u043d\u0443\u043b\u0435\u0432\u0443\u044e \u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 STALL (EP0R = (EP0R^0x1010)&amp;0xBFBF) \u0438 \u0432\u044b\u0445\u043e\u0434\u0438\u043c \u0438\u0437 \u0446\u0438\u043a\u043b\u0430.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0441\u0451 \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u0434\u043e, \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u043d\u0443\u043b\u0435\u0432\u0443\u044e \u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 RX_VALID, TX_STALL (EP0R = (EP0R^0x3010)&amp;0xBFBF). \u0418 \u0441\u043d\u043e\u0432\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u043c \u0432 \u0446\u0438\u043a\u043b, \u043d\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0443 \u043d\u0430\u0441 \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u0435:<br \/>ISTR_DIR \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c OUT (\u0431\u0438\u0442 \u043f\u043e\u0434\u043d\u044f\u0442),<br \/>EP_SETUP \u043e\u043f\u0443\u0449\u0435\u043d,<br \/>\u0411\u0438\u0442 EP_CTR_RX \u0442\u043e\u0436\u0435 \u043f\u043e\u0434\u043d\u044f\u0442(\u0435\u0433\u043e \u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c).<\/p>\n<p>\u041f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u043d\u0443\u043b\u0435\u0432\u0443\u044e \u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 STALL (EP0R = (EP0R^0x1010)&amp;0xBFBF) \u0438 \u0432\u044b\u0445\u043e\u0434\u0438\u043c \u0438\u0437 \u0446\u0438\u043a\u043b\u0430.<\/p>\n<p>\u0414\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d.<\/p>\n<p>\u0422\u0430\u043d\u0435\u0446 \u0441 \u0431\u0443\u0431\u043d\u043e\u043c \u043d\u043e\u043c\u0435\u0440 2. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>\u0428\u0430\u0433 1 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a \u0436\u0435.  <\/summary>\n<div class=\"spoiler__content\">\n<p>\u0418\u0437 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043c\u044b \u0432\u043e\u0448\u043b\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0438 \u0432 \u0446\u0438\u043a\u043b \u0432\u043d\u0443\u0442\u0440\u0438 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b. \u0412\u044b\u044f\u0441\u043d\u0438\u043b\u0438, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 0 \u043a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430. \u041d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0440\u0438\u0451\u043c\u0430 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 (SaveTState = EP0R &amp; 0x3030), \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u043d\u0443\u043b\u0435\u0432\u0443\u044e \u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 NAK (\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445) \u0438 \u043f\u043e \u043a\u0430\u043d\u0430\u043b\u0443 \u043f\u0440\u0438\u0451\u043c\u0430, \u0438 \u043f\u043e \u043a\u0430\u043d\u0430\u043b\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438. \u0422\u0430\u043a \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0432\u0440\u0435\u043c\u044f \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u0445\u043e\u0441\u0442\u0443.<\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 (ISTR_DIR) \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c OUT (\u0431\u0438\u0442 \u043f\u043e\u0434\u043d\u044f\u0442), \u0411\u0438\u0442 EP_SETUP \u043f\u043e\u0434\u043d\u044f\u0442. \u0411\u0438\u0442 EP_CTR_RX \u0442\u043e\u0436\u0435 \u043f\u043e\u0434\u043d\u044f\u0442(\u0435\u0433\u043e \u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c).<\/p>\n<p>\u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 PMA, \u0440\u0430\u0437\u043c\u0435\u0447\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u044f \u043f\u0440\u0438\u0451\u043c\u0430 \u0432 \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435. \u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 USB_Command = PMA_SBUF(EP0RX_OFFSET);<br \/>\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 USB_wValue  = PMA_SBUF(EP0RX_OFFSET+2);<br \/>\u0438\u043d\u0434\u0435\u043a\u0441 USB_wIndex  = PMA_SBUF(EP0RX_OFFSET+4);<br \/>\u0438 \u0434\u043b\u0438\u043d\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0430 USB_wLength = PMA_SBUF(EP0RX_OFFSET+6);<\/p>\n<\/div>\n<\/details>\n<p>\u0421\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 USB_wLength. \u041d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043e\u043d\u0430 \u0440\u0430\u0432\u043d\u043e \u043d\u0443\u043b\u044e. \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0443. \u0415\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0x0500 &#8212; \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 USB_wValue, \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0435\u0451 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e USB_DADDR, \u0437\u0430\u043e\u0434\u043d\u043e \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u044f \u0435\u0439 \u0441\u0442\u0430\u0440\u0448\u0438\u0439 \u0431\u0438\u0442. \u041c\u043e\u0436\u043d\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0442\u044c, \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435. \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0448\u0430\u0433\u0443 2 (WAIT_STATUS_IN).<\/p>\n<p>\u0428\u0430\u0433 2. WAIT_STATUS_IN. \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043d\u0443\u043b\u0435\u0432\u0443\u044e \u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0434\u043b\u044f \u043f\u0440\u0438\u0451\u043c\u0430 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 EP0R = (EP0R^0x3030)&amp;0xBFBF \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0432\u0438\u0442\u043e\u043a \u0446\u0438\u043a\u043b\u0430.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u043c \u0432 \u0446\u0438\u043a\u043b \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438:<br \/>(ISTR_DIR) \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c IN (\u0431\u0438\u0442 \u043e\u043f\u0443\u0449\u0435\u043d),<br \/>EP_SETUP \u043e\u043f\u0443\u0449\u0435\u043d, <br \/>\u0411\u0438\u0442 EP_CTR_TX \u043f\u043e\u0434\u043d\u044f\u0442(\u0435\u0433\u043e \u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c)<\/p>\n<p>\u0422\u0443\u0442 \u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u043d\u0430\u043c \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441 (\u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0438 \u0432 USB_DADDR \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435). \u0415\u0441\u043b\u0438 \u0434\u0430, \u0442\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0435\u0433\u043e \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0430\u0434\u0440\u0435\u0441\u0430 DADDR, \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 \u043c\u043b\u0430\u0434\u0448\u0438\u0435 4 \u0431\u0438\u0442\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a \u0438\u0445 \u043d\u043e\u043c\u0435\u0440 &#8212; \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0443, \u0447\u0442\u043e \u0441 \u043d\u0438\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.<br \/>\u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u043d\u0443\u043b\u0435\u0432\u0443\u044e \u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 STALL (EP0R = (EP0R^0x1010)&amp;0xBFBF) \u0438 \u0432\u044b\u0445\u043e\u0434\u0438\u043c \u0438\u0437 \u0446\u0438\u043a\u043b\u0430.<\/p>\n<p>\u0410\u0434\u0440\u0435\u0441 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d.<\/p>\n<p>\u0418 \u043d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a,<\/p>\n<h2>\u0415\u0449\u0451 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043c\u0430\u043d\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u043c\u0435\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c<\/h2>\n<details class=\"spoiler\">\n<summary>\u0422\u0430\u0431\u043b\u0438\u0446\u0430<\/summary>\n<div class=\"spoiler__content\">\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"162\" width=\"162\">\n<p align=\"left\">\u041a\u043e\u043c\u0430\u043d\u0434\u0430 (USB_Command)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0427\u0442\u043e \u043e\u0442 \u043d\u0430\u0441 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"162\" width=\"162\">\n<p align=\"left\">0x0900<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (\u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c). \u041d\u043e\u043c\u0435\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 USB_wValue \u0438 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"162\" width=\"162\">\n<p align=\"left\">0x0500<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0441\u0435\u0441\u0441\u0438\u0438. \u0410\u0434\u0440\u0435\u0441 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0442 1 \u0434\u043e 127 (0 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u043e\u043a\u0430 \u0431\u0435\u0437 \u0430\u0434\u0440\u0435\u0441\u0430). \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u043d\u043e\u043c\u0435\u0440\u0443 \u0445\u043e\u0441\u0442 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"162\" width=\"162\">\n<p align=\"left\">0x0100<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u0441\u043f\u044f\u0449\u0438\u0439 \u0440\u0435\u0436\u0438\u043c \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0440\u0442 (Clear Feature) <\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"162\" width=\"162\">\n<p align=\"left\">0x0300<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u0441\u043f\u044f\u0449\u0438\u0439 \u0440\u0435\u0436\u0438\u043c \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e (SET Feature) <\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"162\" width=\"162\">\n<p align=\"left\">0x0B01<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441. \u041d\u043e\u043c\u0435\u0440 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432 \u043c\u043b\u0430\u0434\u0448\u0435\u043c \u0431\u0430\u0439\u0442\u0435 USB_wIndex, \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043a \u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"162\" width=\"162\">\n<p align=\"left\">0x0102<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 VALID (0x3000 \u0438\u043b\u0438 0x0030), \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u0447\u0442\u043e \u043e\u043d\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 STALL. \u041d\u043e\u043c\u0435\u0440 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043c\u043b\u0430\u0434\u0448\u0438\u0445 7 \u0431\u0438\u0442\u0430\u0445 USB_wIndex, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 &#8212; \u0432 8\u043c \u0431\u0438\u0442\u0435. \u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 &#8212; \u0430\u043a\u0442\u0438\u0432\u043d\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"162\" width=\"162\">\n<p align=\"left\">0x0302<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 STALL<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"162\" width=\"162\">\n<p align=\"left\">0x0221<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c COM \u043f\u043e\u0440\u0442<\/p>\n<p align=\"left\">\u0412 \u043c\u043e\u0451\u043c \u043a\u043e\u0434\u0435 \u0432 \u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043d\u043e \u044f \u0437\u0430\u043c\u0435\u0442\u0438\u043b, \u0447\u0442\u043e \u043a \u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0438 \u0445\u043e\u0441\u0442 \u0443\u0436\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0438\u0441\u044c, \u0438 \u044d\u0442\u043e\u0442 (\u0430 \u0442\u0430\u043a \u0436\u0435 \u043e\u0434\u0438\u043d \u0438\u0437 \u0434\u0432\u0443\u0445 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445) \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0441\u044e\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"162\" width=\"162\">\n<p align=\"left\">0x2021<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0431\u043e\u0434\u0440\u0435\u0439\u0442 \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"162\" width=\"162\">\n<p align=\"left\">0x2221<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043b\u0438\u043d\u0438\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0440\u0442\u043e\u043c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"162\" width=\"162\">\n<p align=\"left\">0x0680<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0445\u043e\u0441\u0442\u0443 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440. \u041a\u0430\u043a\u043e\u0439 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c USB_wValue:<br \/>0x0100 &#8212; \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430<br \/>0x0200 &#8212; \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438<br \/>0x0300 &#8212; <a href=\"http:\/\/www.baiheee.com\/Documents\/090518\/090518112619\/USB_LANGIDs.pdf\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0438<\/a><br \/>0x0301 &#8212; \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a, \u0441\u0442\u0440\u043e\u043a\u0430 \u0432 \u044e\u043d\u0438\u043a\u043e\u0434\u0435<br \/>0x0302 &#8212; \u0438\u043c\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u0441\u0442\u0440\u043e\u043a\u0430 \u0432 \u044e\u043d\u0438\u043a\u043e\u0434\u0435<br \/>0x0303 &#8212; \u0441\u0435\u0440\u0438\u0439\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0432 \u044e\u043d\u0438\u043a\u043e\u0434\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"162\" width=\"162\">\n<p align=\"left\">0x0080<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0445\u043e\u0441\u0442\u0443 \u0441\u0442\u0430\u0442\u0443\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u0415\u0441\u043b\u0438 \u043f\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0445\u043e\u0441\u0442\u0430, \u0442\u043e \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u0431\u0438\u0442 0x01, \u0435\u0441\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u0432 \u0441\u043f\u044f\u0449\u0438\u0439 \u0440\u0435\u0436\u0438\u043c \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430, \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u0431\u0438\u0442 0x02. \u0418\u043d\u0430\u0447\u0435 \u0432\u0435\u0440\u043d\u0443\u0442\u044c 0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"162\" width=\"162\">\n<p align=\"left\">0x0081<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0442\u0430\u0442\u0443\u0441 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c 0.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"162\" width=\"162\">\n<p align=\"left\">0x0082<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0442\u0430\u0442\u0443\u0441 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438. \u041d\u043e\u043c\u0435\u0440 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043c\u043b\u0430\u0434\u0448\u0438\u0445 7 \u0431\u0438\u0442\u0430\u0445 USB_wIndex, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 &#8212; \u0432 8\u043c \u0431\u0438\u0442\u0435.<br \/>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 1, \u0435\u0441\u043b\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 &#8212; STALL.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"162\" width=\"162\">\n<p align=\"left\">0x0880<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u043e\u043c\u0435\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438. \u042d\u0442\u043e \u0442\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u043b\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 0x0900<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"162\" width=\"162\">\n<p align=\"left\">0x2021<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0431\u043e\u0434\u0440\u0435\u0439\u0442 \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438. \u0418 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<br \/><code>PMA_BUF(EP0TX_OFFSET) = 9600;\/\/baudrate bytes<br \/> PMA_SBUF(EP0TX_OFFSET+4) = 0;\/\/parity*256+format<br \/> PMA_SBUF(EP0TX_OFFSET+6) = 8;\/\/datatype<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"162\" width=\"162\">\n<p align=\"left\">0x2121<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0445\u043e\u0441\u0442\u0443 \u0431\u043e\u0434\u0440\u0435\u0439\u0442 \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438. \u041e\u0442\u0432\u0435\u0442 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/details>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u043a\u043e\u043c\u0443-\u0442\u043e \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0430. \u041f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u043c\u043d\u0435 \u0441\u0430\u043c\u043e\u043c\u0443 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u043b\u043e \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u043b\u043e\u0433\u0438\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b USB.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/671914\/\"> https:\/\/habr.com\/ru\/post\/671914\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e \u043c\u0435\u043d\u044f \u0441\u043f\u043e\u0434\u0432\u0438\u0433\u043b\u0438 \u0442\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0439\u0442\u0438 \u0432 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a \u0436\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u044f\u0434\u0440\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 STM32F103 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u043c USB, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u0431\u043e\u0440\u0442\u0443. \u0418\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/habr.com\/ru\/post\/335018\/\" rel=\"noopener noreferrer nofollow\">\u0432\u043e\u0442<\/a> \u0438\u043b\u0438<a href=\"https:\/\/habr.com\/ru\/post\/571704\/\" rel=\"noopener noreferrer nofollow\"> \u0432\u043e\u0442<\/a>) \u043f\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0442\u043d\u044b\u0445, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0441\u0444\u043e\u043a\u0443\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043d\u0430 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. \u042f \u0436\u0435 \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u043e\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432.<\/p>\n<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043c\u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0434\u043b\u044f \u0430\u0434\u0440\u0435\u0441\u043d\u044b\u0445 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432. \u042d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0435\u0441\u0442\u044c \u0446\u0435\u043b\u044b\u0439 \u0440\u044f\u0434 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u0430\u0441\u043f\u0435\u043a\u0442\u043e\u0432, \u043d\u043e \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044c, \u0447\u0442\u043e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u043e\u0442 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043b\u044e\u0434\u0435\u0439 \u0442\u0432\u043e\u0440\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u0439 \u0438 \u0443\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0439 &#8212; \u0431\u0443\u0442\u0430\u0444\u043e\u0440\u043e\u0432, \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0438\u043b\u0438 \u043a\u043e\u0441\u043f\u043b\u0435\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u043c\u0435\u044e\u0442 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0430 \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432, \u0434\u0430 \u0438 \u0441\u0430\u043c \u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u0445\u0443\u0434\u043e\u0436\u043d\u0438\u043a, \u0432\u043d\u0443\u0442\u0440\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0431\u044b\u043b \u043f\u043e\u043c\u0435\u0449\u0451\u043d \u0446\u0435\u043b\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 \u043a\u043e\u043c\u0430\u043d\u0434, \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 G-\u043a\u043e\u0434\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0447\u0438\u0442\u0430\u0435\u0442 \u0441 \u0444\u043b\u044d\u0448-\u043a\u0430\u0440\u0442\u044b \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438, \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0438\u0445 \u0438 \u0434\u0430\u0436\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445. \u0421\u0430\u043c\u043e \u0441\u043e\u0431\u043e\u0439, \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u0443\u044e \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044e \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u043d\u0435 \u0442\u0430\u043a \u043c\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430. \u0418 \u0432 \u044d\u0442\u043e \u043c\u0435\u0441\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043a\u0430\u043a-\u0442\u043e \u0432\u0442\u0438\u0441\u043d\u0443\u0442\u044c \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043a\u043e\u043c\u0430\u043d\u0434, \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0445 \u0447\u0435\u0440\u0435\u0437 USB, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.<\/p>\n<p>\u0418 \u0432\u043e\u0442 \u043d\u0430 \u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043c\u0435\u0441\u0442\u0430, \u043a\u0430\u043a \u0432 \u041f\u0417\u0423, \u0442\u0430\u043a \u0438 \u0432 \u041e\u0417\u0423 \u0434\u043b\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0443\u0436\u0435 \u043d\u0435 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f: \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0447\u0430\u0441\u0442\u043e \u043f\u0438\u0448\u0443\u0442\u0441\u044f \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043b\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043c, \u0433\u0434\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u043f\u0430\u0440\u0443 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0441\u0442\u0440\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432. \u0418 \u0442\u0435 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u043e\u0436\u0438\u0440\u0430\u044e\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043f\u0430\u043c\u044f\u0442\u0438. \u041f\u043e\u0432\u0435\u0440\u0445 \u044d\u0442\u043e\u0433\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043e\u0442 STM \u0441\u0430\u043c\u0438 \u043f\u043e \u0441\u0435\u0431\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u044b \u043f\u043e \u0441\u0432\u043e\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435. \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u043f\u0440\u044f\u0442\u0430\u043d\u044b \u0432 \u043c\u0430\u043a\u0440\u043e\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0437\u0430\u0432\u0451\u0440\u043d\u0443\u0442\u044b \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438. \u0422\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0432\u043e \u0432\u0441\u0451 \u044d\u0442\u043e \u0432\u043b\u0435\u0437\u0430\u0442\u044c \u0438 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c USB \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442. \u041d\u043e \u0432\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438   &#8212; \u044d\u0442\u043e \u0433\u043e\u043b\u043e\u0432\u043e\u043b\u043e\u043c\u043a\u0430 \u043d\u0435 \u0434\u043b\u044f \u0441\u043b\u0430\u0431\u044b\u0445 \u0443\u043c\u043e\u0432. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043e\u0431\u044a\u0451\u043c\u043d\u0443\u044e \u0431\u043b\u043e\u043a-\u0441\u0445\u0435\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 \u043f\u043e\u0434\u0437\u0435\u043c\u0435\u043b\u044c\u044f \u0432 D&amp;D, \u0447\u0435\u043c \u043d\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c. \u0418 \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0441\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u0432 \u044d\u0442\u043e \u043f\u043e\u0434\u0437\u0435\u043c\u0435\u043b\u044c\u0435, \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043d\u0430\u0440\u044f\u0436\u0435\u043d\u0438\u0435.<\/p>\n<h2>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b<\/h2>\n<p>\u0418\u0442\u0430\u043a, \u0447\u0442\u043e \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f. \u0412\u043e\u043e\u0431\u0449\u0435, \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439 Reference Manual (<a href=\"https:\/\/vdocuments.net\/stm32-reference-manual-55849eac7c01d.html?page=580\" rel=\"noopener noreferrer nofollow\">DOC Id 13902, \u0433\u043b\u0430\u0432\u0430 22, \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0441 580 \u043f\u043e 609<\/a>). \u0412 \u044d\u0442\u043e\u043c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0443\u0436\u043d\u044b\u0445 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u0438\u0442\u043e\u0432 \u0432 \u044d\u0442\u0438\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445. \u0410 \u0442\u0430\u043a\u0436\u0435 \u0440\u0435\u0436\u0438\u043c\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u044b \u044d\u0442\u0438\u0445 \u0431\u0438\u0442\u043e\u0432 (\u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e). \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u044f \u0432\u044b\u043d\u0435\u0441 \u044d\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432 \u043c\u0430\u043a\u0440\u043e\u0441\u044b:<\/p>\n<details class=\"spoiler\">\n<summary>\u041c\u0430\u043a\u0440\u043e\u0441\u044b<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/\u043c\u0430\u043a\u0440\u043e\u0441 \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438 #define REG(x)  (*((volatile unsigned int )(x)))  \/\/\u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 #define USB_BASE_ADDR   0x40005C00 \/\/\u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 USB           #define USB_PMA_ADDR    0x40006000  \/\/\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a #define EP0RREG(USB_BASE_ADDR) #define EP1RREG(0x40005C04) #define EP2RREG(0x40005C08) #define EP3RREG(0x40005C0C) #define EP4RREG(0x40005C10) #define EP5RREG(0x40005C14) #define EP6RREG(0x40005C18) #define EP7RREG(0x40005C1C) #define ENDPOINT(bEpNum)        REG(USB_BASE_ADDR + (bEpNum)*4) #define PMA_BUF(INum)        REG(USB_PMA_ADDR + (INum)4)  #define PMA_SBUF(SINum)        (((volatile unsigned short int *)(USB_PMA_ADDR + (SINum)*2)))  \/\/\u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b #define CNTRREG(USB_BASE_ADDR + 0x40)    #define ISTRREG(USB_BASE_ADDR + 0x44)    #define DADDRREG(USB_BASE_ADDR + 0x4C)  #define BTABLEREG(USB_BASE_ADDR + 0x50)<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u043c \u0441\u0435\u0431\u0435 \u0436\u0438\u0437\u043d\u044c, \u0432\u044b\u0437\u044b\u0432\u0430\u044f \u043d\u0443\u0436\u043d\u044b\u0435 \u043d\u0430\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044f \u0441 \u043d\u0438\u043c\u0438 \u043a\u0430\u043a \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c: <\/p>\n<ul>\n<li>\n<p>CNTR &#8212; \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442, \u043a\u0430\u043a\u0438\u0435 \u0438\u0437 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u0438 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u043d\u0430 \u0441\u0435\u0431\u044f \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430. \u041d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f 0x8000 (\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043d\u044f\u0442\u044b) \u0438 0x0400 (\u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430). \u0422\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u043e \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e \u0431\u0443\u0444\u0435\u0440\u0430 \u043f\u0440\u0438\u0451\u043c\u0430 (0x4000), \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u0441\u043f\u044f\u0449\u0438\u0439 \u0440\u0435\u0436\u0438\u043c (0x0800) \u0438 \u0432\u044b\u0445\u043e\u0434\u0430 \u0438\u0437 \u043d\u0435\u0433\u043e (0x1000) \u0438 \u0442.\u0434.<\/p>\n<\/li>\n<li>\n<p>ISTR &#8212; \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f. \u0421\u0442\u0430\u0440\u0448\u0438\u0435 \u0431\u0438\u0442\u044b (\u0441 15 \u043f\u043e 8) &#8212; \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443 CNTR. \u041c\u043b\u0430\u0434\u0448\u0438\u0435 4 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u043e\u043c\u0435\u0440 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0438 \u0431\u0438\u0442 \u043d\u043e\u043c\u0435\u0440 4 (0x0010) &#8212; \u044d\u0442\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435: 1 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u043e\u0442 \u0445\u043e\u0441\u0442\u0430 (\u043e\u0431\u044b\u0447\u043d\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430, \u043d\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u044d\u0442\u043e \u0443\u043c\u0435\u044e\u0442 \u0438 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u044b) \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440. 0 &#8212; \u0447\u0442\u043e \u0445\u043e\u0441\u0442  \u0436\u0434\u0451\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442 \u043d\u0430\u0441.<\/p>\n<\/li>\n<li>\n<p>DADDR &#8212; \u043c\u043b\u0430\u0434\u0448\u0438\u0435 7 \u0431\u0438\u0442 \u0445\u0440\u0430\u043d\u044f\u0442 \u043d\u043e\u043c\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u043e\u0441\u0442 \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u043b \u043d\u0430\u0448\u0435\u043c\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0441\u0435\u0441\u0441\u0438\u0438. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043d\u043e\u043b\u044c. \u0421\u0442\u0430\u0440\u0448\u0438\u0439 \u0431\u0438\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u0440\u0430\u0439\u0432\u0435\u0440 USB \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u0433\u043e\u0442\u043e\u0432 \u043a \u0440\u0430\u0431\u043e\u0442\u0435.<\/p>\n<\/li>\n<li>\n<p>BTABLE &#8212; \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043a\u0443\u0434\u0430-\u0442\u043e \u043f\u043e\u043c\u0435\u0449\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 &#8212; \u043a\u0430\u043a \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0435, \u0442\u0430\u043a \u0438 \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c. \u041c\u0435\u0441\u0442\u043e\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0443\u0436\u0438\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430, Packet Memory (PMA). \u0418 \u0434\u043b\u044f \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438 \u044d\u0442\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u043b\u0443\u0436\u0438\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0430, \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u043c\u0430\u044f \u0432 \u0442\u043e\u0439 \u0436\u0435 \u0441\u0430\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 BTABLE. \u042d\u0442\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043f\u043e\u043b\u0435\u0439: \u0410\u0434\u0440\u0435\u0441 \u0431\u0443\u0444\u0435\u0440\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0439\u0442, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u0448\u0430\u0433\u0435, \u0430\u0434\u0440\u0435\u0441 \u0431\u0443\u0444\u0435\u0440\u0430 \u043f\u0440\u0438\u0451\u043c\u0430, \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0443\u0444\u0435\u0440\u0430 \u043f\u0440\u0438\u0451\u043c\u0430 (\u0438 \u0435\u0433\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0441\u0442\u044c).<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, PMA_BUF \u0438 PMA_SBUF &#8212; \u0442\u0430 \u0441\u0430\u043c\u0430\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430, \u0432\u0441\u0435\u0433\u043e 512 \u0431\u0430\u0439\u0442. PMA_BUF \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u043d\u0435\u0439 \u043a\u0430\u043a \u043a \u043c\u0430\u0441\u0441\u0438\u0432\u0443 DWORD, \u0430 PMA_SBUF \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u043d\u0435\u0439 \u043a\u0430\u043a \u043a \u043c\u0430\u0441\u0441\u0438\u0432\u0443 WORD. \u0410\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044f \u0432 \u044d\u0442\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u0434\u0451\u0442 \u043f\u043e \u0441\u043b\u043e\u0432\u0430\u043c, \u0442\u0430\u043a \u0447\u0442\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u0431\u0430\u0439\u0442\u0443 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f.<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438. \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u044f \u043e\u0431\u0440\u0430\u0449\u0430\u044e\u0441\u044c \u043a \u043d\u0438\u043c \u043a\u0430\u043a \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0442\u0430\u043a \u0438 \u043a\u0430\u043a \u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0430. \u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u0442\u043e\u0440\u043e\u0433\u043e, \u043d\u043e \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 \u0440\u044f\u0434\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0440\u0430\u0431\u043e\u0442\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439, \u0442\u043e \u0434\u043b\u044f \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0449\u0435 \u0441\u0440\u0430\u0437\u0443 \u0435\u0451 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u0442\u044c.<\/p>\n<p>\u0421\u0430\u043c\u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 &#8212; \u044d\u0442\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u043e\u0441\u0442 \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f. \u041d\u0443\u043b\u0435\u0432\u0430\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 EP0R \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0442\u0443 \u0440\u0430\u0431\u043e\u0442\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442 \u043d\u0430\u0448\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.<\/p>\n<h2>\u0417\u0430\u043f\u0443\u0441\u043a USB<\/h2>\n<p> \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0447\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443, \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043d\u043e\u0433\u0438:<\/p>\n<details class=\"spoiler\">\n<summary>SystemInit();<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/\u042d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432  \u0444\u0430\u0439\u043b\u0435 system_stm32f10x.c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.  #include \"stm32f10x.h\" \/* Reset the RCC clock configuration to the default reset state(for debug purpose) *\/  \/* Set HSION bit *\/  RCC->CR |= (uint32_t)0x00000001; \/* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits *\/  RCC->CFGR &amp;= (uint32_t)0xF8FF0000; \/* Reset HSEON, CSSON and PLLON bits *\/  RCC->CR &amp;= (uint32_t)0xFEF6FFFF; \/* Reset HSEBYP bit *\/  RCC->CR &amp;= (uint32_t)0xFFFBFFFF; \/* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE\/OTGFSPRE bits *\/  RCC->CFGR &amp;= (uint32_t)0xFF80FFFF; \/* Disable all interrupts and clear pending bits  *\/  RCC->CIR = 0x009F0000; \/* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers *\/  \/* Configure the Flash Latency cycles and enable prefetch buffer *\/  __IO uint32_t StartUpCounter = 0, HSEStatus = 0;  \/* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*\/  \/* Enable HSE *\/  RCC->CR |= ((uint32_t)RCC_CR_HSEON);  \/\/  RCC->CR |= ((uint32_t)RCC_CR_HSION);  \/* Wait till HSE is ready and if Time out is reached exit *\/  do {  HSEStatus = RCC->CR &amp; RCC_CR_HSERDY;  \/\/    HSEStatus = RCC->CR &amp; RCC_CR_HSIRDY;  StartUpCounter++;  } while(((RCC->CR &amp; RCC_CR_HSERDY) == 0) &amp;&amp; (StartUpCounter &lt; HSE_STARTUP_TIMEOUT));  if ((RCC->CR &amp; RCC_CR_HSERDY) != RESET) \/\/  if ((RCC->CR &amp; RCC_CR_HSIRDY) != RESET)  {  \/\/HSEStatus = (uint32_t)0x01;     \/* Enable Prefetch Buffer *\/      FLASH->ACR |= FLASH_ACR_PRFTBE;       \/* Flash 2 wait state *\/      FLASH->ACR &amp;= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);      FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;        \/* HCLK = SYSCLK *\/      RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;       \/* PCLK2 = HCLK *\/      RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;       \/* PCLK1 = HCLK *\/        RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;       \/*  PLL configuration: PLLCLK = HSE * 9 = 72 MHz *\/ RCC->CFGR &amp;= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |                                         RCC_CFGR_PLLMULL));      RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);    \/\/PLLMULL9 - for 8MHz  \/\/    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSI_Div2 | RCC_CFGR_PLLMULL9);    \/\/PLLMULL9 - for 8MHz      \/* Enable PLL *\/ RCC->CR |= RCC_CR_PLLON;       \/* Wait till PLL is ready *\/      while((RCC->CR &amp; RCC_CR_PLLRDY) == 0)     {     }      \/* Select PLL as system clock source *\/      RCC->CFGR &amp;= (uint32_t)((uint32_t)~(RCC_CFGR_SW));      RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;       \/* Wait till PLL is used as system clock source *\/      while ((RCC->CFGR &amp; (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)     {     }  }SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET;  \/* Vector Table Relocation in Internal FLASH. *\/ <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>USB_Init()<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">SystemInit();  \/\/\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 SystemInit \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432\u044b\u0448\u0435.  \/\/\u0421\u0430\u043c\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432  \u0444\u0430\u0439\u043b\u0435 system_stm32f10x.c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.  \/\/ Enable USB_DISCONNECT GPIO clock  RCC->APB2ENR |= RCC_APB2Periph_GPIOF;  \/\/ \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 11 \u043f\u0438\u043d\u0430 \u043a\u0430\u043a USB pull-up pin  GPIOF->CRH &amp;= 0xFFFF0FFF;  GPIOF->CRH |= 0x00007000;   \/\/general output, open drain, 50MHz \/\/\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f  *(__IO uint32_t *) (0x424200D8) = 0; \/\/\u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0448\u0438\u043d\u044b USB  RCC->APB1ENR |=RCC_APB1Periph_USB; \/\/\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f (\u043d\u0438\u0437\u0448\u0438\u0439 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0438\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 0xf0, \u0432\u044b\u0441\u0448\u0438\u0439 0x10) NVIC->IP[USB_LP_CAN1_RX0_IRQn] = 0xA0;  \/\/pending - \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0432 \u0446\u0438\u043a\u043b\u0435  NVIC->ISER[(uint32_t)(USB_LP_CAN1_RX0_IRQn) >> 0x05] = (uint32_t)0x01 &lt;&lt; (USB_LP_CAN1_RX0_IRQn &amp; (uint8_t)0x1F);  USB_RESET();<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0443 PMA \u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c USB  \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435. \u0417\u0430 \u044d\u0442\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f USB_RESET():<\/p>\n<details class=\"spoiler\">\n<summary>USB_RESET()<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#define EP0RX_OFFSET 0x80 #define EP0TX_OFFSET 0x40 #define EP1TX_OFFSET 0xC0 #define EP2TX_OFFSET 0x100 #define EP3RX_OFFSET 0x110  BTABLE = 0;\/\/ \u0410\u0434\u0440\u0435\u0441 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0434\u0438\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u0438 PMA  \/\/EP 0 - \u043d\u0443\u043b\u0435\u0432\u0430\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430  \/\/ ADDR_TX  PMA_BUF(0) = EP0TX_OFFSET;  \/\/ COUNT_TX = 0 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\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-334613","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/334613","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=334613"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/334613\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=334613"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=334613"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=334613"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}