{"id":332257,"date":"2022-04-21T21:00:15","date_gmt":"2022-04-21T21:00:15","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=332257"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=332257","title":{"rendered":"<span>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b STM32 \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445 \u043d\u0430 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u044f\u0445, UART (Tx, Rx-\u0434\u043b\u0438\u043d\u0430?) + DMA<\/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<h2>\u041f\u0440\u043e \u043c\u0435\u043d\u044f<\/h2>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440, 33 \u0433\u043e\u0434\u0430, \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043c\u043e\u043d\u0442\u0451\u0440\u043e\u043c, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u043e\u0431\u0431\u0438. \u0423\u0447\u0438\u043b\u0441\u044f \u0432\u0441\u0435\u043c\u0443 \u0447\u0438\u0441\u0442\u043e \u043d\u0430 \u044d\u043d\u0442\u0443\u0437\u0438\u0430\u0437\u043c\u0435 \u0438 \u0432 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u043c \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0435\u0441\u0442\u044c \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0442\u0435\u0441\u043d\u0435\u0435 \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0436\u0438\u0437\u043d\u044c \u0441 \u043c\u0438\u0440\u043e\u043c IT. \u0414\u043e\u043b\u0433\u043e \u0440\u0435\u0448\u0430\u043b\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u043d\u0430 Habr \u0438 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u043c\u0438\u0440\u043e\u043c \u0441\u0432\u043e\u0438\u043c\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c\u0438. \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u0440\u0438\u0442\u0438\u043a\u0443, \u0441\u043e\u0432\u0435\u0442\u044b \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043b\u0443\u0447\u0448\u0435 \u0438\u043b\u0438 \u0441\u043b\u043e\u0432\u0430 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u0438 \u0435\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u044b\u043b\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439. \u0418 \u0432\u043e\u0442 \u043c\u043e\u044f \u043f\u0435\u0440\u0432\u0430\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f.<\/p>\n<h2>\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u0438\u043b\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u0431\u0438\u0442\u0430, \u043f\u043e\u0432\u0441\u0435\u043c\u0435\u0441\u0442\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u043c\u0430\u0441\u043a\u0438 \u0438 \u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0451\u0442 \u043f\u0440\u043e \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b STM32, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0441\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0438\u043c\u0435\u044e\u0442 32 \u0431\u0438\u0442\u0430. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f STMicroelectronics \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 CubeMX \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 HAL \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432 \u043e\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432. \u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e, \u043c\u044b \u0432 \u043a\u0440\u043e\u0442\u0447\u0430\u0439\u0448\u0438\u0435  \u0441\u0440\u043e\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0440\u0430\u0431\u043e\u0447\u0443\u044e \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044e, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0434\u0430\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c, \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0447\u0438\u0442\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e. \u041d\u043e \u0440\u0430\u043d\u043e \u0438\u043b\u0438 \u043f\u043e\u0437\u0434\u043d\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043a\u043e\u0432\u044b\u0440\u044f\u0442\u044c\u0441\u044f \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445 (\u0434\u0443\u043c\u0430\u044e \u043a\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 HAL \u043c\u0435\u043d\u044f \u043f\u043e\u0439\u043c\u0451\u0442). \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 CMSIS \u043d\u0430\u043c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0435\u0441\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438. \u041d\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e, \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0442\u043e, \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0431\u0438\u0442\u0430\u043c\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u043a\u0430\u043a \u0441 \u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438. \u0418 \u0432\u043e\u0442 \u0432, \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043a \u043d\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043d\u0430 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u044f\u0445. <\/p>\n<p><strong><em>\u0426\u0435\u043b\u044c \u0441\u0442\u0430\u0442\u044c\u0438<\/em><\/strong><em> &#8212; \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0431\u0438\u0442\u0430\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 STM32 \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u0438\u0442\u0430\u043c\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438. \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0431\u044b\u0442\u044c \u0433\u043e\u043b\u043e\u0441\u043b\u043e\u0432\u043d\u044b\u043c, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442 UART+DMA \u0441 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 \u0438 \u043f\u0440\u0438\u0451\u043c\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0443\u044e \u0447\u0438\u0441\u0442\u043e \u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445 c \u0431\u0438\u0442\u043e\u0432\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u044b \u043a \u0430\u0434\u0440\u0435\u0441\u0430\u043c \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 STM32. <\/em><\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043e\u0431\u043c\u0435\u043d \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043c\u0435\u0436\u0434\u0443 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c STM32 \u0438 Bluetooth \u043c\u043e\u0434\u0443\u043b\u0435\u043c FSC-BT802 \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 UART \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c DMA. <em>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 HAL \u0443 \u043c\u0435\u043d\u044f \u0442\u0430\u043a \u0438 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u043c\u0435\u043d \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u043e UART. \u0411\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043d\u0435 \u0437\u043d\u0430\u0435\u043c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442 bluetooth \u043c\u043e\u0434\u0443\u043b\u044c \u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0431\u0430\u0439\u0442\u044b \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0438 \u0438\u0441\u043a\u0430\u0442\u044c \u043a\u043e\u043d\u0435\u0446 \u0441\u0442\u0440\u043e\u043a\u0438. \u041d\u043e \u0441\u043f\u0443\u0441\u0442\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u0441\u0451 \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0451\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438 \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e, \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438\u0451\u043c \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 UART \u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445.<\/em><\/p>\n<p>\u0423 \u043d\u0430\u0441 \u0438\u043c\u0435\u0435\u0442\u0441\u044f:<\/p>\n<ul>\n<li>\n<p>\u0421\u0440\u0435\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 STM32CubeIDE v1.9.0<\/p>\n<\/li>\n<li>\n<p>FreeRTOS v9.0.0<\/p>\n<\/li>\n<li>\n<p>\u041c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 STM32F405RGT6<\/p>\n<\/li>\n<li>\n<p>Bluetooth \u043c\u043e\u0434\u0443\u043b\u044c FSC-BT802<\/p>\n<\/li>\n<li>\n<p>\u0421\u0432\u044f\u0437\u044c \u043c\u0435\u0436\u0434\u0443 STM32 \u0438 Bluetooth \u043f\u043e UART, \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c 115200<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u0441\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f: \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, UART, DMA, FreeRTOS \u0438 \u0442.\u043f. \u044f \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0437\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 HAL, \u043e\u043d\u0430 \u0441 \u044d\u0442\u0438\u043c \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e \u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0430 \u044d\u0442\u043e\u043c \u0444\u043e\u043d\u0435 \u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u043b\u043e + \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0438 \u0431\u044b\u0441\u0442\u0440\u043e.<\/p>\n<h2>\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 CubeIDE<\/h2>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435 \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c &#8212; \u044d\u0442\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442: \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 UART, \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f, DMA \u0438 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e FreeRTOS. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/41a\/b60\/f5e\/41ab60f5ec5c86add1e569d9e3acb421.jpg\" alt=\"\u0420\u0438\u0441.1 UART1 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u0430\u043a \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 \u044d\u0442\u043e \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442\" title=\"\u0420\u0438\u0441.1 UART1 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u0430\u043a \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 \u044d\u0442\u043e \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442\" width=\"734\" height=\"445\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/41a\/b60\/f5e\/41ab60f5ec5c86add1e569d9e3acb421.jpg\" data-blurred=\"true\"\/><figcaption>\u0420\u0438\u0441.1 UART1 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u0430\u043a \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 \u044d\u0442\u043e \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442<\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/0d4\/14f\/10b\/0d414f10bdd60a4922d678a13105e04b.jpg\" alt=\"\u0420\u0438\u0441 2. \u041f\u043e\u0442\u043e\u043a\u0438 DMA \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f TX \u0438 RX \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438\" title=\"\u0420\u0438\u0441 2. \u041f\u043e\u0442\u043e\u043a\u0438 DMA \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f TX \u0438 RX \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438\" width=\"734\" height=\"354\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0d4\/14f\/10b\/0d414f10bdd60a4922d678a13105e04b.jpg\" data-blurred=\"true\"\/><figcaption>\u0420\u0438\u0441 2. \u041f\u043e\u0442\u043e\u043a\u0438 DMA \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f TX \u0438 RX \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438<\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/a58\/392\/eb5\/a58392eb531c70d2c3bf70ebb4bba448.jpg\" alt=\"\u0420\u0438\u0441. 3 \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0441\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f\" title=\"\u0420\u0438\u0441. 3 \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0441\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f\" width=\"734\" height=\"115\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a58\/392\/eb5\/a58392eb531c70d2c3bf70ebb4bba448.jpg\" data-blurred=\"true\"\/><figcaption>\u0420\u0438\u0441. 3 \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0441\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f<\/figcaption><\/figure>\n<p>\u0414\u0430\u043b\u0435\u0435, \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c FreeRTOS \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0435\u043c\u0430\u0444\u043e\u0440 \u0434\u043b\u044f \u0437\u0430\u0449\u0438\u0442\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a\u0430 UART DMA.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/770\/f38\/a5c\/770f38a5c4274fdceae1a265c91d4d91.jpg\" alt=\"\u0420\u0438\u0441. 4 \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0442\u043e\u043a. \u041c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0430\u043a \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0432\u044b\u0434\u0435\u043b\u0435\u043d \u0441\u0438\u043d\u0438\u043c \u0438 \u043f\u043e\u0434\u0447\u0451\u0440\u043a\u043d\u0443\u0442 \u043a\u0440\u0430\u0441\u043d\u043e\u0439 \u043b\u0438\u043d\u0438\u0435\u0439, \u043d\u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u043d\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0439\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435.\" title=\"\u0420\u0438\u0441. 4 \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0442\u043e\u043a. \u041c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0430\u043a \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0432\u044b\u0434\u0435\u043b\u0435\u043d \u0441\u0438\u043d\u0438\u043c \u0438 \u043f\u043e\u0434\u0447\u0451\u0440\u043a\u043d\u0443\u0442 \u043a\u0440\u0430\u0441\u043d\u043e\u0439 \u043b\u0438\u043d\u0438\u0435\u0439, \u043d\u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u043d\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0439\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435.\" width=\"857\" height=\"266\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/770\/f38\/a5c\/770f38a5c4274fdceae1a265c91d4d91.jpg\" data-blurred=\"true\"\/><figcaption>\u0420\u0438\u0441. 4 \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0442\u043e\u043a. \u041c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0430\u043a \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0432\u044b\u0434\u0435\u043b\u0435\u043d \u0441\u0438\u043d\u0438\u043c \u0438 \u043f\u043e\u0434\u0447\u0451\u0440\u043a\u043d\u0443\u0442 \u043a\u0440\u0430\u0441\u043d\u043e\u0439 \u043b\u0438\u043d\u0438\u0435\u0439, \u043d\u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u043d\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0439\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435.<\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/53b\/e59\/561\/53be59561fdb87b489de6f2e6464ea0d.jpg\" alt=\"\u0420\u0438\u0441. 5 \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0435\u043c\u0430\u0444\u043e\u0440 \u043a\u0430\u043a \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438, \u0432\u044b\u0434\u0435\u043b\u0435\u043d \u0441\u0438\u043d\u0438\u043c \u0446\u0432\u0435\u0442\u043e\u043c \u0438 \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443\u0442 \u043a\u0440\u0430\u0441\u043d\u043e\u0439 \u043b\u0438\u043d\u0438\u0435\u0439, \u043d\u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u043d\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0439\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435.\" title=\"\u0420\u0438\u0441. 5 \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0435\u043c\u0430\u0444\u043e\u0440 \u043a\u0430\u043a \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438, \u0432\u044b\u0434\u0435\u043b\u0435\u043d \u0441\u0438\u043d\u0438\u043c \u0446\u0432\u0435\u0442\u043e\u043c \u0438 \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443\u0442 \u043a\u0440\u0430\u0441\u043d\u043e\u0439 \u043b\u0438\u043d\u0438\u0435\u0439, \u043d\u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u043d\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0439\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435.\" width=\"816\" height=\"344\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/53b\/e59\/561\/53be59561fdb87b489de6f2e6464ea0d.jpg\" data-blurred=\"true\"\/><figcaption>\u0420\u0438\u0441. 5 \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0435\u043c\u0430\u0444\u043e\u0440 \u043a\u0430\u043a \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438, \u0432\u044b\u0434\u0435\u043b\u0435\u043d \u0441\u0438\u043d\u0438\u043c \u0446\u0432\u0435\u0442\u043e\u043c \u0438 \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443\u0442 \u043a\u0440\u0430\u0441\u043d\u043e\u0439 \u043b\u0438\u043d\u0438\u0435\u0439, \u043d\u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u043d\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0439\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435.<\/figcaption><\/figure>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0432 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u044b, \u043c\u043e\u0436\u043d\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442.<\/p>\n<h2>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043d\u0430 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u044f\u0445<\/h2>\n<p>\u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u044f \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u044f\u0437\u044b\u043a\u0430 C, \u044d\u0442\u043e <strong>\u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044f<\/strong>. \u041d\u0435 \u0431\u0443\u0434\u0443 \u0440\u0430\u0441\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435, \u0435\u0441\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043d\u0430\u0439\u0434\u0451\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435. \u041a\u0430\u043a \u043c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 &#8212; \u044d\u0442\u043e \u0441\u0430\u043c\u0430\u044f \u0443\u0434\u043e\u0431\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f.<\/p>\n<p>\u0418 \u0442\u0430\u043a, \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u043c 2 header \u0444\u0430\u0439\u043b\u0430, \u043c\u043e\u0436\u043d\u043e \u0438 \u043e\u0434\u0438\u043d, \u043d\u043e \u0442\u0430\u043a \u043f\u0440\u043e\u0449\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c, Register_UART.h \u0438 Register_DMA.h.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0438\u0434\u0451\u043c \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442, \u0438\u0449\u0435\u043c Reference Manual \u043d\u0430 \u0441\u0432\u043e\u0439 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 (\u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u044d\u0442\u043e RM0090 \u0434\u043b\u044f STM32F405), \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c, \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0440\u0430\u0437\u0434\u0435\u043b 30.6.8 USART register map \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 1018. \u0418 \u0432 \u0444\u0430\u0439\u043b\u0435 Register_UART.h \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043a\u0430\u043a \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u0420\u0438\u0441. 6<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/878\/065\/e3c\/878065e3c8ee31521e45d9854f22ce83.jpg\" alt=\"\u0420\u0438\u0441.6 \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0441 \u0431\u0438\u0442\u043e\u0432\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u0430\u0440\u0442\u044b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 UART, \u0441 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 3\u043c\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435 (\u0441\u044e\u0434\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0432\u043b\u0435\u0437\u043b\u0438)\" title=\"\u0420\u0438\u0441.6 \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0441 \u0431\u0438\u0442\u043e\u0432\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u0430\u0440\u0442\u044b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 UART, \u0441 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 3\u043c\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435 (\u0441\u044e\u0434\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0432\u043b\u0435\u0437\u043b\u0438)\" width=\"1350\" height=\"692\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/878\/065\/e3c\/878065e3c8ee31521e45d9854f22ce83.jpg\" data-blurred=\"true\"\/><figcaption>\u0420\u0438\u0441.6 \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0441 \u0431\u0438\u0442\u043e\u0432\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u0430\u0440\u0442\u044b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 UART, \u0441 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 3\u043c\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435 (\u0441\u044e\u0434\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0432\u043b\u0435\u0437\u043b\u0438)<\/figcaption><\/figure>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u0420\u0438\u0441. 6, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0441 \u0431\u0438\u0442\u043e\u0432\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438  \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0442 \u043a\u0430\u0440\u0442\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 UART.  \u041e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u043e, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u0438\u0442\u043e\u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0441\u0442\u0440\u043e\u0433\u043e \u043a\u0430\u043a \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u043a\u0430\u0440\u0442\u0435 \u0438 \u0435\u0441\u043b\u0438 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0443\u0447\u0430\u0441\u0442\u043a\u0438 \u0431\u0438\u0442, \u0438\u0445 \u0442\u043e\u0436\u0435  \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c, \u0442\u0430\u043a\u0436\u0435 \u0432\u0441\u0435 \u044d\u0442\u0438 \u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c <strong>volatile<\/strong> \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0431\u0435\u0437 \u0443\u0447\u0430\u0441\u0442\u0438\u044f \u043d\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u0434\u043b\u044f \u0437\u0430\u0449\u0438\u0442\u044b \u043e\u0442 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u0432\u0441\u0451 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u043e\u0434\u043d\u0430 \u0442\u0430\u043a\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u0440\u043e\u0432\u043d\u043e 32\u0431\u0438\u0442\u0430. <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0441 \u0431\u0438\u0442\u043e\u0432\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 \u0438\u0437 \u043a\u0430\u0440\u0442\u044b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u043c \u0432\u0441\u0451 \u0432 \u043e\u0431\u0449\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 &#171;sUART1_TypeDef&#187;, \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u0435\u0451 \u043a\u0430\u043a \u0443\u0433\u043e\u0434\u043d\u043e.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/e21\/f3e\/2e6\/e21f3e2e64a0ea7bb89fbb2b0f795780.jpg\" alt=\"\u0420\u0438\u0441. 7 \u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0441 \u0431\u0438\u0442\u043e\u0432\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 \u0432 \u043e\u0431\u0449\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 sUART1_TypeDef\" title=\"\u0420\u0438\u0441. 7 \u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0441 \u0431\u0438\u0442\u043e\u0432\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 \u0432 \u043e\u0431\u0449\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 sUART1_TypeDef\" width=\"1100\" height=\"691\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e21\/f3e\/2e6\/e21f3e2e64a0ea7bb89fbb2b0f795780.jpg\" data-blurred=\"true\"\/><figcaption>\u0420\u0438\u0441. 7 \u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0441 \u0431\u0438\u0442\u043e\u0432\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 \u0432 \u043e\u0431\u0449\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 sUART1_TypeDef<\/figcaption><\/figure>\n<details class=\"spoiler\">\n<summary>\u0424\u0430\u0439\u043b Register_UART.h<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>#ifndef STM32_F405_UART1_REGISTER_H_ #define STM32_F405_UART1_REGISTER_H_ #include \"stdio.h\"  #define rUART1 ((sUART1_TypeDef *) USART1_BASE)  typedef struct{ volatile uint32_t  PE        :1;  \/\/0 volatile uint32_t  FE        :1;  \/\/1 volatile uint32_t  NF        :1;  \/\/2 volatile uint32_t  ORE       :1;  \/\/3 volatile uint32_t  IDLE      :1;  \/\/4 volatile uint32_t  RXNE      :1;  \/\/5 volatile uint32_t  TC        :1;  \/\/6 volatile uint32_t  TXE       :1;  \/\/7 volatile uint32_t  LBD       :1;  \/\/8 volatile uint32_t  CTS       :1;  \/\/9 volatile uint32_t  Reserved  :22; \/\/10-31 } sUSART_SR;  typedef struct{ volatile uint32_t  DR        :9;  \/\/0-8 volatile uint32_t  Reserved  :23; \/\/9-31 } sUSART_DR;  typedef struct{ volatile uint32_t  DIV_Fraction  :4;  \/\/0-3 volatile uint32_t  DIV_Mantissa  :12; \/\/4-15 volatile uint32_t  Reserved3     :16; \/\/16-31 } sUSART_BRR;  typedef struct{ volatile uint32_t  SBK       :1;  \/\/0 volatile uint32_t  RWU       :1;  \/\/1 volatile uint32_t  RE        :1;  \/\/2 volatile uint32_t  TE        :1;  \/\/3 volatile uint32_t  IDLEIE    :1;  \/\/4 volatile uint32_t  RXNEIEIE  :1;  \/\/5 volatile uint32_t  TCIE      :1;  \/\/6 volatile uint32_t  TXEIE     :1;  \/\/7 volatile uint32_t  PEIE      :1;  \/\/8 volatile uint32_t  PS        :1;  \/\/9 volatile uint32_t  PCE       :1;  \/\/10 volatile uint32_t  WAKE      :1;  \/\/11 volatile uint32_t  M         :1;  \/\/12 volatile uint32_t  UE        :1;  \/\/13 volatile uint32_t  Reserved1 :1;  \/\/14 volatile uint32_t  OVER8     :1;  \/\/15 volatile uint32_t  Reserved2 :16; \/\/16-31 } sUSART_CR1;  typedef struct{ volatile uint32_t  ADD       :4;  \/\/0-3 volatile uint32_t  Reserved1 :1;  \/\/4 volatile uint32_t  LBDL      :1;  \/\/5 volatile uint32_t  LBDIE     :1;  \/\/6 volatile uint32_t  Reserved2 :1;  \/\/7 volatile uint32_t  LBCL      :1;  \/\/8 volatile uint32_t  CPHA      :1;  \/\/9 volatile uint32_t  CPOL      :1;  \/\/10 volatile uint32_t  CLKEN     :1;  \/\/11 volatile uint32_t  STOP      :2;  \/\/12-13 volatile uint32_t  LINEN     :1;  \/\/14 volatile uint32_t  Reserved3 :17; \/\/15-31 } sUSART_CR2;  typedef struct{ volatile uint32_t  EIE       :1;  \/\/0 volatile uint32_t  IREN      :1;  \/\/1 volatile uint32_t  IRLP      :1;  \/\/2 volatile uint32_t  HDSEL     :1;  \/\/3 volatile uint32_t  NACK      :1;  \/\/4 volatile uint32_t  SCEN      :1;  \/\/5 volatile uint32_t  DMAR      :1;  \/\/6 volatile uint32_t  DMAT      :1;  \/\/7 volatile uint32_t  RTSE      :1;  \/\/8 volatile uint32_t  CTSE      :1;  \/\/9 volatile uint32_t  CTSIE     :1;  \/\/10 volatile uint32_t  ONEBIT    :1;  \/\/11 volatile uint32_t  Reserved  :20; \/\/12-31 } sUSART_CR3;  typedef struct{ volatile uint32_t  PSC       :8;  \/\/0-7 volatile uint32_t  GT        :8;  \/\/8-15 volatile uint32_t  Reserved  :16; \/\/16-31 } sUSART_GTPR;  typedef struct {   volatile sUSART_SR   SR;    \/* Status register,                   Address offset: 0x00 *\/   volatile sUSART_DR   DR;    \/* Data register,                     Address offset: 0x04 *\/   volatile sUSART_BRR  BRR;   \/* Baud rate register,                Address offset: 0x08 *\/   volatile sUSART_CR1  CR1;   \/* Control register 1,                Address offset: 0x0C *\/   volatile sUSART_CR2  CR2;   \/* Control register 2,                Address offset: 0x10 *\/   volatile sUSART_CR3  CR3;   \/* Control register 3,                Address offset: 0x14 *\/   volatile sUSART_GTPR GTPR;  \/* Guard time and prescaler register, Address offset: 0x18 *\/  } sUART1_TypeDef;  #endif \/* STM32_F405_UART1_REGISTER_H_ *\/<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0441 \u0431\u0438\u0442\u043e\u0432\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 DMA<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0422\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u0438 \u0441 \u043a\u0430\u0440\u0442\u043e\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 DMA, \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0432 \u0444\u0430\u0439\u043b Register_DMA.h. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043f\u0443\u0433\u0430\u0442\u044c &#8212; \u044d\u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0430\u0440\u0442\u044b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 DMA, \u043e\u043d\u0430 \u0440\u0430\u0441\u0442\u044f\u043d\u0443\u043b\u0430\u0441\u044c \u0430\u0436 \u043d\u0430 4 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b. \u041d\u043e \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0442\u0430\u043c \u043c\u043d\u043e\u0433\u043e\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f, \u0442\u0430\u043a \u043a\u0430\u043a DMA \u0438\u043c\u0435\u0435\u0442 8 \u043f\u043e\u0442\u043e\u043a\u043e\u0432. \u0413\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 DMA, \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0432 8 \u0440\u0430\u0437. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 &#171;sDMA_TypeDef&#187;  \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043a DMA1 \u0438 \u043a DMA2.<\/p>\n<details class=\"spoiler\">\n<summary>\u0424\u0430\u0439\u043b Register_DMA.h<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>#ifndef STM32_F405_DMA_REGISTER_H_ #define STM32_F405_DMA_REGISTER_H_ #include \"stdio.h\"  #define rDMA1 ((sDMA_TypeDef *) DMA1_BASE) #define rDMA2 ((sDMA_TypeDef *) DMA2_BASE)  typedef struct{ volatile uint32_t  FEIF0       :1;  \/\/0 volatile uint32_t  Reserved1   :1;  \/\/1 volatile uint32_t  DMEIF0      :1;  \/\/2 volatile uint32_t  TEIF0       :1;  \/\/3 volatile uint32_t  HTIF0       :1;  \/\/4 volatile uint32_t  TCIF0       :1;  \/\/5 volatile uint32_t  FEIF1       :1;  \/\/6 volatile uint32_t  Reserved2   :1;  \/\/7 volatile uint32_t  DMEIF1      :1;  \/\/8 volatile uint32_t  TEIF1       :1;  \/\/9 volatile uint32_t  HTIF1       :1;  \/\/10 volatile uint32_t  TCIF1       :1;  \/\/11 volatile uint32_t  Reserved3   :4;  \/\/12-15 volatile uint32_t  FEIF2       :1;  \/\/16 volatile uint32_t  Reserved4   :1;  \/\/17 volatile uint32_t  DMEIF2      :1;  \/\/18 volatile uint32_t  TEIF2       :1;  \/\/19 volatile uint32_t  HTIF2       :1;  \/\/20 volatile uint32_t  TCIF2       :1;  \/\/21 volatile uint32_t  FEIF3       :1;  \/\/22 volatile uint32_t  Reserved5   :1;  \/\/23 volatile uint32_t  DMEIF3      :1;  \/\/24 volatile uint32_t  TEIF3       :1;  \/\/25 volatile uint32_t  HTIF3       :1;  \/\/26 volatile uint32_t  TCIF3       :1;  \/\/27 volatile uint32_t  Reserved6   :4;  \/\/28-31 } sDMA_LISR;  typedef struct{ volatile uint32_t  FEIF4       :1;  \/\/0 volatile uint32_t  Reserved1   :1;  \/\/1 volatile uint32_t  DMEIF04     :1;  \/\/2 volatile uint32_t  TEIF4       :1;  \/\/3 volatile uint32_t  HTIF4       :1;  \/\/4 volatile uint32_t  TCIF4       :1;  \/\/5 volatile uint32_t  FEIF5       :1;  \/\/6 volatile uint32_t  Reserved2   :1;  \/\/7 volatile uint32_t  DMEIF5      :1;  \/\/8 volatile uint32_t  TEIF5       :1;  \/\/9 volatile uint32_t  HTIF5       :1;  \/\/10 volatile uint32_t  TCIF5       :1;  \/\/11 volatile uint32_t  Reserved3   :4;  \/\/12-15 volatile uint32_t  FEIF6       :1;  \/\/16 volatile uint32_t  Reserved4   :1;  \/\/17 volatile uint32_t  DMEIF6      :1;  \/\/18 volatile uint32_t  TEIF6       :1;  \/\/19 volatile uint32_t  HTIF6       :1;  \/\/20 volatile uint32_t  TCIF6       :1;  \/\/21 volatile uint32_t  FEIF7       :1;  \/\/22 volatile uint32_t  Reserved5   :1;  \/\/23 volatile uint32_t  DMEIF7      :1;  \/\/24 volatile uint32_t  TEIF7       :1;  \/\/25 volatile uint32_t  HTIF7       :1;  \/\/26 volatile uint32_t  TCIF7       :1;  \/\/27 volatile uint32_t  Reserved6   :4;  \/\/28-31 } sDMA_HISR;  typedef struct{ volatile uint32_t  CFEIF0      :1;  \/\/0 volatile uint32_t  Reserved1   :1;  \/\/1 volatile uint32_t  CDMEIF0     :1;  \/\/2 volatile uint32_t  CTEIF0      :1;  \/\/3 volatile uint32_t  CHTIF0      :1;  \/\/4 volatile uint32_t  CTCIF0      :1;  \/\/5 volatile uint32_t  CFEIF1      :1;  \/\/6 volatile uint32_t  Reserved2   :1;  \/\/7 volatile uint32_t  CDMEIF1     :1;  \/\/8 volatile uint32_t  CTEIF1      :1;  \/\/9 volatile uint32_t  CHTIF1      :1;  \/\/10 volatile uint32_t  CTCIF1      :1;  \/\/11 volatile uint32_t  Reserved3   :4;  \/\/12-15 volatile uint32_t  CFEIF2      :1;  \/\/16 volatile uint32_t  Reserved4   :1;  \/\/17 volatile uint32_t  CDMEIF2     :1;  \/\/18 volatile uint32_t  CTEIF2      :1;  \/\/19 volatile uint32_t  CHTIF2      :1;  \/\/20 volatile uint32_t  CTCIF2      :1;  \/\/21 volatile uint32_t  CFEIF3      :1;  \/\/22 volatile uint32_t  Reserved5   :1;  \/\/23 volatile uint32_t  CDMEIF3     :1;  \/\/24 volatile uint32_t  CTEIF3      :1;  \/\/25 volatile uint32_t  CHTIF3      :1;  \/\/26 volatile uint32_t  CTCIF3      :1;  \/\/27 volatile uint32_t  Reserved6   :4;  \/\/28-31 } sDMA_LIFCR;  typedef struct{ volatile uint32_t  CFEIF4      :1;  \/\/0 volatile uint32_t  Reserved1   :1;  \/\/1 volatile uint32_t  CDMEIF4     :1;  \/\/2 volatile uint32_t  CTEIF4      :1;  \/\/3 volatile uint32_t  CHTIF4      :1;  \/\/4 volatile uint32_t  CTCIF4      :1;  \/\/5 volatile uint32_t  CFEIF5      :1;  \/\/6 volatile uint32_t  Reserved2   :1;  \/\/7 volatile uint32_t  CDMEIF5     :1;  \/\/8 volatile uint32_t  CTEIF5      :1;  \/\/9 volatile uint32_t  CHTIF5      :1;  \/\/10 volatile uint32_t  CTCIF5      :1;  \/\/11 volatile uint32_t  Reserved3   :4;  \/\/12-15 volatile uint32_t  CFEIF6      :1;  \/\/16 volatile uint32_t  Reserved4   :1;  \/\/17 volatile uint32_t  CDMEIF6     :1;  \/\/18 volatile uint32_t  CTEIF6      :1;  \/\/19 volatile uint32_t  CHTIF6      :1;  \/\/20 volatile uint32_t  CTCIF6      :1;  \/\/21 volatile uint32_t  CFEIF7      :1;  \/\/22 volatile uint32_t  Reserved5   :1;  \/\/23 volatile uint32_t  CDMEIF7     :1;  \/\/24 volatile uint32_t  CTEIF7      :1;  \/\/25 volatile uint32_t  CHTIF7      :1;  \/\/26 volatile uint32_t  CTCIF7      :1;  \/\/27 volatile uint32_t  Reserved6   :4;  \/\/28-31 } sDMA_HIFCR;  typedef struct{ volatile uint32_t  EN          :1;  \/\/0 volatile uint32_t  DMEIE       :1;  \/\/1 volatile uint32_t  TEIE        :1;  \/\/2 volatile uint32_t  HTIE        :1;  \/\/3 volatile uint32_t  TCIE        :1;  \/\/4 volatile uint32_t  PFCTRL      :1;  \/\/5 volatile uint32_t  DIR         :2;  \/\/6-7 volatile uint32_t  CIRC        :1;  \/\/8 volatile uint32_t  PINC        :1;  \/\/9 volatile uint32_t  MINC        :1;  \/\/10 volatile uint32_t  PSIZE       :2;  \/\/11-12 volatile uint32_t  MSIZE       :2;  \/\/13-14 volatile uint32_t  PINCOS      :1;  \/\/15 volatile uint32_t  PL          :2;  \/\/16-17 volatile uint32_t  DBM         :1;  \/\/18 volatile uint32_t  CT          :1;  \/\/19 volatile uint32_t  Reserved1   :1;  \/\/20 volatile uint32_t  PBURST      :2;  \/\/21-22 volatile uint32_t  MBURST      :2;  \/\/23-24 volatile uint32_t  CHSEL       :3;  \/\/25-27 volatile uint32_t  Reserved2   :4;  \/\/28-31 } sDMA_CR;  typedef struct{ volatile uint32_t  NDT         :16;  \/\/0-15 volatile uint32_t  Reserved1   :16;  \/\/15-31 } sDMA_NDTR;  typedef struct{ volatile uint32_t  FTH         :2;  \/\/0-1 volatile uint32_t  DMDIS       :1;  \/\/2 volatile uint32_t  FS          :3;  \/\/3-5 volatile uint32_t  Reserved1   :1;  \/\/6 volatile uint32_t  FEIE        :1;  \/\/7 volatile uint32_t  Reserved2   :24; \/\/8-31 } sDMA_FCR;  typedef struct{ volatile sDMA_CR   CR;        \/* DMA stream x configuration register,      Address offset: 0x10 + 0x18 \u00d7 stream number *\/ volatile sDMA_NDTR NDTR;      \/* DMA stream x number of data register,     Address offset: 0x14 + 0x18 \u00d7 stream number *\/ volatile uint32_t  PAR;       \/* DMA stream x peripheral address register, Address offset: 0x18 + 0x18 \u00d7 stream number *\/ volatile uint32_t  M0AR;      \/* DMA stream x memory 0 address register,   Address offset: 0x1C + 0x18 \u00d7 stream number *\/ volatile uint32_t  M1AR;      \/* DMA stream x memory 1 address register,   Address offset: 0x20 + 0x18 \u00d7 stream number *\/ volatile sDMA_FCR  FCR;       \/* DMA stream x FIFO control register,       Address offset: 0x24 + 0x18 \u00d7 stream number *\/ } sDMA_Stream;  typedef struct {   volatile sDMA_LISR   LISR;        \/* DMA low interrupt status register,        Address offset: 0x00 *\/   volatile sDMA_HISR   HISR;        \/* DMA high interrupt status register,       Address offset: 0x04 *\/   volatile sDMA_LIFCR  LIFCR;       \/* DMA low interrupt flag clear register,    Address offset: 0x08 *\/   volatile sDMA_HIFCR  HIFCR;       \/* DMA high interrupt flag clear register,   Address offset: 0x0C *\/   volatile sDMA_Stream Stream0;     \/* DMA stream number 1*\/   volatile sDMA_Stream Stream1;     \/* DMA stream number 1*\/   volatile sDMA_Stream Stream2;     \/* DMA stream number 1*\/   volatile sDMA_Stream Stream3;     \/* DMA stream number 1*\/   volatile sDMA_Stream Stream4;     \/* DMA stream number 1*\/   volatile sDMA_Stream Stream5;     \/* DMA stream number 1*\/   volatile sDMA_Stream Stream6;     \/* DMA stream number 1*\/   volatile sDMA_Stream Stream7;     \/* DMA stream number 1*\/ } sDMA_TypeDef;  #endif \/* STM32_F405_DMA_REGISTER_H_ *\/<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<\/div>\n<\/details>\n<p>\u0414\u0430\u043b\u0435\u0435, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b sDMA_TypeDef \u0438 sUART1_TypeDef \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u043a \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u0430\u0434\u0440\u0435\u0441\u0430\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 STM32. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u0444\u0430\u0439\u043b\u0430\u0445 \u0441\u043e\u0437\u0434\u0430\u0451\u043c define  rUART1, rDMA1 \u0438 rDMA2 \u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0438\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0441 \u0441\u0441\u044b\u043b\u043a\u043e\u0439 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432.<\/p>\n<p>\u0432 \u0444\u0430\u0439\u043b\u0435 Register_UART.h<\/p>\n<pre><code>#define rUART1 ((sUART1_TypeDef *) USART1_BASE)<\/code><\/pre>\n<p>\u0432 \u0444\u0430\u0439\u043b\u0435 Register_DMA.h<\/p>\n<pre><code>#define rDMA1 ((sDMA_TypeDef *) DMA1_BASE) #define rDMA2 ((sDMA_TypeDef *) DMA2_BASE)<\/code><\/pre>\n<p>\u0410\u0434\u0440\u0435\u0441\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 USART1_BASE, DMA1_BASE \u0438 DMA2_BASE \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 CMSIS, \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0432\u0430\u043c \u0430\u0434\u0440\u0435\u0441 \u0432 \u0444\u0430\u0439\u043b\u0435 stm32F405xx.h (\u0441\u043c\u043e\u0442\u0440\u044f \u043a\u0430\u043a\u043e\u0439 \u0443 \u0432\u0430\u0441 \u041c\u041a). \u041f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u0432\u0437\u044f\u0432 \u0435\u0451 \u0438\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0432 Reference Manual  \u0440\u0430\u0437\u0434\u0435\u043b 2.3 Memory map. <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0445 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0439 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0440\u044f\u043c\u043e\u0439 \u0438 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u0430\u043c\u044f\u0442\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0438\u0437 \u043d\u0430\u0448\u0438\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0438 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043c\u0430\u0441\u043e\u043a \u0438 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/883\/272\/044\/8832720443d0e236b7ddf3db1796441a.jpg\" alt=\"\u0420\u0438\u0441. 8 \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0441 \u0431\u0438\u0442\u043e\u0432\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438\" title=\"\u0420\u0438\u0441. 8 \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0441 \u0431\u0438\u0442\u043e\u0432\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438\" width=\"800\" height=\"501\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/883\/272\/044\/8832720443d0e236b7ddf3db1796441a.jpg\" data-blurred=\"true\"\/><figcaption>\u0420\u0438\u0441. 8 \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0441 \u0431\u0438\u0442\u043e\u0432\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438<\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/a2f\/f73\/5e9\/a2ff735e916fa14218fd27e77ef9cc72.jpg\" alt=\"\u0420\u0438\u0441. 9 \u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0430\u0448\u0438\u043c\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c\u0438, \u043a\u0430\u043a \u043c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0442\u0430\u043a \u0432\u0441\u0451 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0443\u0434\u0430 \u043f\u043e\u043d\u044f\u0442\u043d\u0435\u0439 \u0447\u0435\u043c \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438.\" title=\"\u0420\u0438\u0441. 9 \u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0430\u0448\u0438\u043c\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c\u0438, \u043a\u0430\u043a \u043c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0442\u0430\u043a \u0432\u0441\u0451 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0443\u0434\u0430 \u043f\u043e\u043d\u044f\u0442\u043d\u0435\u0439 \u0447\u0435\u043c \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438.\" width=\"952\" height=\"296\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a2f\/f73\/5e9\/a2ff735e916fa14218fd27e77ef9cc72.jpg\" data-blurred=\"true\"\/><figcaption>\u0420\u0438\u0441. 9 \u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0430\u0448\u0438\u043c\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c\u0438, \u043a\u0430\u043a \u043c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0442\u0430\u043a \u0432\u0441\u0451 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0443\u0434\u0430 \u043f\u043e\u043d\u044f\u0442\u043d\u0435\u0439 \u0447\u0435\u043c \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438.<\/figcaption><\/figure>\n<h3>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0438 \u043f\u0440\u0438\u0451\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e UART DMA<\/h3>\n<p>\u0414\u043b\u044f \u043f\u0440\u0438\u0451\u043c\u0430 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043f\u043e UART \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c DMA  \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0443\u044e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 DMA, \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0438 \u043f\u0440\u0438\u0451\u043c\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043f\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044e (\u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438, \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u0442.\u043f.) \u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0439 \u0431\u0443\u0444\u0435\u0440 \u043d\u0430 \u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a\u0435, \u0447\u0442\u043e\u0431 \u043d\u0435 \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 DMA.<\/p>\n<h4>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u0432 DMA <\/h4>\n<p>\u0414\u043b\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 \u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a\u0430 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0430\u0434\u0440\u0435\u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 UART DR,  \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b (\u043e\u0448\u0438\u0431\u043a\u0438, \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438, \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438). \u0412 \u043f\u0440\u0438\u0451\u043c\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0431\u0443\u0444\u0435\u0440\u0430 \u043a\u0443\u0434\u0430 DMA \u043f\u043e\u043b\u043e\u0436\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438 \u0443\u0434\u0430\u0447\u043d\u043e\u043c \u043f\u0440\u0438\u0451\u043c\u0435 \u0438 \u0434\u043b\u0438\u043d\u0443 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u0422\u0430\u043a\u0436\u0435, \u0437\u0434\u0435\u0441\u044c \u0432\u044b\u0437\u043e\u0432\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e UART1_Received_DMA(), \u0434\u043b\u044f \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u043e \u043f\u0440\u0438\u0451\u043c\u0443 \u0431\u0430\u0439\u0442\u0430. \u0414\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0437\u0434\u0435\u0441\u044c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a\u0435. \u0424\u0443\u043d\u043a\u0446\u0438\u044e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 UART_Initialization() \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u0446\u0438\u043a\u043b\u043e\u043c \u0432 \u043f\u043e\u0442\u043e\u043a\u0435 UART_RESIVE FreeRTOS \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434: \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u0432 DMA <\/summary>\n<div class=\"spoiler__content\">\n<pre><code>static uint8_t Bluetooth;  void UART_Initialization(){   \/*Received UART1 DMA Stream*\/ rDMA2->Stream5.CR.DBM = 0;          \/\/ 0: No buffer switching at the end of transfer rDMA2->Stream5.CR.CIRC = 0;         \/\/ 0: Circular mode disabled rDMA2->Stream5.NDTR.NDT = 1;        \/\/ Received data len rDMA2->Stream5.PAR = &amp;(rUART1->DR); \/\/ Uart ADRR rDMA2->Stream5.M0AR = &amp;Bluetooth;   \/\/ ReadBuff rDMA2->Stream5.CR.DMEIE = 1;        \/\/ Direct mode error interrupts rDMA2->Stream5.CR.TEIE = 1;         \/\/ Transfer error interrupts rDMA2->Stream5.CR.TCIE = 1;         \/\/ Transfer complete interrupts rDMA2->Stream5.CR.HTIE = 0;         \/\/ Half-transfer interrupts UART1_Received_DMA();               \/\/ Start DMA Received  \/*Transmit UART1 DMA Stream*\/ rDMA2->Stream7.CR.DBM = 0;          \/\/ 0: No buffer switching at the end of transfer rDMA2->Stream7.CR.CIRC = 0;         \/\/ 0: Circular mode disabled rDMA2->Stream7.PAR = &amp;rUART1->DR;   \/\/ Uart ADRR rDMA2->Stream7.CR.DMEIE = 1;        \/\/ Direct mode error interrupts rDMA2->Stream7.CR.TEIE = 1;         \/\/ Transfer error interrupts rDMA2->Stream7.CR.TCIE = 1;         \/\/ Transfer complete interrupts rDMA2->Stream7.CR.HTIE = 0;         \/\/ Half-transfer interrupts }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h4>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e UART DMA<\/h4>\n<p>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439, \u0447\u0442\u043e\u0431 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043f\u043e DMA \u043d\u0435 \u043b\u043e\u0436\u0438\u043b\u0438\u0441\u044c \u043d\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u044b \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u0449\u0438\u0442\u0438\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b DMA \u043f\u043e\u043a\u0430 \u043e\u043d\u0438 \u043d\u0435 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0441\u0435\u043c\u0430\u0444\u043e\u0440\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0440\u0430\u043d\u0435\u0435 \u0432  FreeRTOS. \u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u043a\u0430\u043a\u0430\u044f-\u043b\u0438\u0431\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0437\u0430\u0445\u043e\u0447\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0441\u0435\u043c\u0430\u0444\u043e\u0440 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u044f\u0442, \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0436\u0434\u0430\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u043f\u043e\u043a\u0430 \u0441\u0435\u043c\u0430\u0444\u043e\u0440 \u043d\u0435 \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u0441\u044f. \u0421\u0435\u043c\u0430\u0444\u043e\u0440 \u0431\u0443\u0434\u0435\u043c \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0442\u044c \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f (\u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438, \u043e\u0448\u0438\u0431\u043a\u0435 \u0438 \u0442.\u043f.)<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434: \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 UART DMA \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0417\u0434\u0435\u0441\u044c \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e UART1_Transmit(uint8_t *data, uint8_t dataLen) \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u043c \u0438 \u0434\u043b\u0438\u043d\u043d\u043e\u0439 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u0435\u0441\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 128 \u0431\u0430\u0439\u0442 \u0438 \u0441\u0435\u043c\u0430\u0444\u043e\u0440 \u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043d, \u0442\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 pData, \u0434\u0430\u043b\u0435\u0435 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043f\u043e\u0442\u043e\u043a DMA, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043e\u0442\u043a\u0443\u0434\u0430 \u0437\u0430\u0431\u0438\u0440\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043a\u0430\u043a\u0438\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c. \u041f\u043e\u0441\u043b\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0436\u0434\u0451\u043c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 TxCpltCallbackUart1(). \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0438\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0438, \u0432 \u043e\u0431\u0449\u0435\u043c \u043f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u0435\u043c\u0430\u0444\u043e\u0440 \u0438 \u043d\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u0432 UART \u043f\u043e DMA.<\/p>\n<p>\u041f\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e data \u0432 \u043f\u043e\u0442\u043e\u043a DMA \u043c\u043e\u0436\u043d\u043e, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0442\u0440\u0451\u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0435 \u0442\u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0436\u0438\u0434\u0430\u043b\u0438, \u0442\u0430\u043a \u043a\u0430\u043a DMA \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u043d\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043b\u0443\u0447\u0448\u0435 \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0435\u0451 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0443\u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430 \u0441 \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u0447\u0442\u043e \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0441\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f.<\/p>\n<pre><code>void UART1_Transmit(uint8_t *data, uint8_t dataLen){  if(BinarySem_TxUART1Handle != NULL &amp;&amp; dataLen &lt; 128){ if(osSemaphoreWait(BinarySem_TxUART1Handle, 1000) == osOK){  static uint8_t pData[128];  for(uint8_t byte = 0; byte &lt;dataLen; byte++){ pData[byte] = data[byte]; }  rDMA2->Stream7.NDTR.NDT = dataLen;      \/\/ Configure DMA Stream data length rDMA2->Stream7.M0AR = &amp;(uint32_t*)pData;\/\/ Configure DMA Stream source address rDMA2->HIFCR.CHTIF7 = 0;                \/\/ Clear Half-transfer interrupt flags rDMA2->HIFCR.CTCIF7 = 0;                \/\/ Clear Transfer complete interrupt flags rDMA2->HIFCR.CTEIF7 = 0;                \/\/ Clear Transfer error interrupt flags rDMA2->HIFCR.CDMEIF7 = 0;               \/\/ Clear Direct mode error interrupt flags rDMA2->Stream7.CR.EN = 1;               \/\/ Enable the Peripheral rUART1->SR.TC = 1;                      \/\/ Clear the TC flag in the SR register by writing 0 to it rUART1->CR3.DMAT = 1;                   \/\/ Enable the DMA transfer for transmit request by setting the DMAT bit in the UART CR3 register  }else{ osSemaphoreRelease(BinarySem_TxUART1Handle); } } }  void  TxCpltCallbackUart1(){  \/\/ Transfer complete Callback if(rDMA2->HISR.TCIF7 == 1){ rDMA2->HIFCR.CTCIF7 = 1;                                \/\/ Clear transfer complete interrupt flag \/\/ Other Callback }else{  if(rDMA2->HISR.DMEIF7 == 1) rDMA2->HIFCR.CDMEIF7 = 1;  \/\/ Clear direct mode error interrupt flag if(rDMA2->HISR.HTIF7 == 1) rDMA2->HIFCR.CHTIF7 = 1;    \/\/ Clear half transfer interrupt flag if(rDMA2->HISR.FEIF7 == 1) rDMA2->HIFCR.CFEIF7 = 1;    \/\/ Clear transfer error interrupt flag rDMA2->Stream7.CR.EN = 0;                              \/\/ Disable DMA operation } osSemaphoreRelease(BinarySem_TxUART1Handle);               \/\/ Release semaphore }<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439  TxCpltCallbackUart1() \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0432 \u0444\u0430\u0439\u043b\u0435 stm32f4xx_it.c, \u0438\u0437 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430 DMA, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443, \u0443 \u043c\u0435\u043d\u044f \u044d\u0442\u043e DMA2 \u043f\u043e\u0442\u043e\u043a 7, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f HAL_DMA_IRQHandler(&amp;hdma_usart1_tx), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 CubeIDE.<\/p>\n<pre><code>void DMA2_Stream7_IRQHandler(void) {   \/* USER CODE BEGIN DMA2_Stream7_IRQn 0 *\/ TxCpltCallbackUart1();   \/* USER CODE END DMA2_Stream7_IRQn 0 *\/    \/\/HAL_DMA_IRQHandler(&amp;hdma_usart1_tx);   \/* USER CODE BEGIN DMA2_Stream7_IRQn 1 *\/    \/* USER CODE END DMA2_Stream7_IRQn 1 *\/ }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h4>\u041f\u0440\u0438\u0451\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e UART DMA<\/h4>\n<p>\u041f\u0440\u0438\u0451\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f\u0445, \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 DMA \u043c\u044b \u0432\u044b\u0437\u0432\u0430\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e UART1_Received_DMA(), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0430 DMA \u0432 \u0440\u0430\u0431\u043e\u0442\u0443 \u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u043b\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438 \u043f\u0440\u0438\u0451\u043c\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0435\u043d \u0431\u0430\u0439\u0442, \u043f\u043e\u0442\u043e\u043a DMA \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430. \u041a\u0430\u0436\u0434\u044b\u0439 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0431\u0430\u0439\u0442 \u0431\u0443\u0434\u0435\u0442 \u043b\u043e\u0436\u0438\u0442\u044c\u0441\u044f \u0432 \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0439 \u0431\u0443\u0444\u0435\u0440.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434: \u043f\u0440\u0438\u0451\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 UART DMA \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u043f\u043e \u043f\u0440\u0438\u0451\u043c\u0443<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0417\u0434\u0435\u0441\u044c \u043f\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u043c\u0443 \u0441\u0447\u0451\u0442\u0443 \u0432\u0441\u0451 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043e\u0447\u0438\u0449\u0430\u0435\u043c \u0444\u043b\u0430\u0433\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439, \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043f\u043e\u0442\u043e\u043a DMA, \u043e\u0447\u0438\u0449\u0430\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b RXNE \u0438 DR \u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u043c \u043f\u0440\u0438\u0451\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e DMA UART. \u0414\u0430\u043d\u043d\u044b\u0435, \u043a\u0443\u0434\u0430 \u043a\u043b\u0430\u0441\u0442\u044c \u0438 \u0441\u043a\u043e\u043b\u044c\u043a\u043e, \u043c\u044b \u0443\u043a\u0430\u0437\u0430\u043b\u0438 \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438  \u043f\u043e\u0442\u043e\u043a\u043e\u0432 DMA \u0442.\u0435. \u043d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e. <\/p>\n<p>\u041f\u0440\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f RxCpltCallbackUart1() \u043f\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044e \u043f\u0440\u0438\u0451\u043c\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f Ring_buffer(Bluetooth) \u0438 \u0432 \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0439 \u0431\u0443\u0444\u0435\u0440 \u043a\u043b\u0430\u0434\u0451\u0442\u0441\u044f \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0439 \u0431\u0430\u0439\u0442, \u0434\u0430\u043b\u0435\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f UART1_Received_DMA() \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043f\u0440\u0438\u0451\u043c\u0430 \u0431\u0430\u0439\u0442\u0430 \u0438 \u0442\u0430\u043a \u043f\u043e \u043a\u0440\u0443\u0433\u0443. \u0415\u0441\u043b\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430, \u0431\u0443\u0434\u0443\u0442 \u0441\u0431\u0440\u043e\u0448\u0435\u043d\u044b \u0444\u043b\u0430\u0433\u0438 \u043e\u0448\u0438\u0431\u043e\u043a \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0449\u0435\u043d \u043f\u043e\u0442\u043e\u043a DMA  \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<pre><code>void UART1_Received_DMA(){  rDMA2->HIFCR.CHTIF5  = 0; \/\/ Clear Half-transfer interrupt flags rDMA2->HIFCR.CTCIF5  = 0; \/\/ Clear Transfer complete interrupt flags rDMA2->HIFCR.CTEIF5  = 0; \/\/ Clear Transfer error interrupt flags rDMA2->HIFCR.CDMEIF5 = 0; \/\/ Clear Direct mode error interrupt flags rDMA2->Stream5.CR.EN = 1; \/\/ Clear Enable the Peripheral interrupt flags   \/* Clear the Overrun flag just before enabling the DMA Rx request: can be mandatory for the second transfer *\/ do{     volatile uint32_t tmpreg = 0x00U;     tmpreg = rUART1->SR.RXNE;     tmpreg = rUART1->DR.DR;     (void)tmpreg; } while(0U);  rUART1->CR3.EIE = 1;      \/\/ Enable the UART Error Interrupt: (Frame error, noise error, overrun error) rUART1->CR3.DMAR = 1;     \/\/ Enable the DMA transfer for the receiver request by setting the DMAR bit in the UART CR3 register }  void RxCpltCallbackUart1(){  \/\/ Received complete Callback if(rDMA2->HISR.TCIF5 == 1){  rDMA2->HIFCR.CTCIF5 = 1;                               \/\/ Clear transfer complete interrupt flag Ring_buffer(Bluetooth);                                \/\/ Add byte to ring buffer UART1_Received_DMA();                                  \/\/ Start receiving byte again  \/\/ Other Callback }else{  if(rDMA2->HISR.DMEIF5 == 1) rDMA2->HIFCR.CDMEIF5 = 1;  \/\/ Clear direct mode error interrupt flag if(rDMA2->HISR.HTIF5 == 1) rDMA2->HIFCR.CHTIF5 = 1;    \/\/ Clear half transfer interrupt flag if(rDMA2->HISR.FEIF5 == 1) rDMA2->HIFCR.CFEIF5 = 1;    \/\/ Clear transfer error interrupt flag rDMA2->Stream7.CR.EN = 0;                              \/\/ Disable DMA operation UART1_Received_DMA();                                  \/\/ Start receiving byte again  } }<\/code><\/pre>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a\u043e\u043c, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439  RxCpltCallbackUart1() \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0432 \u0444\u0430\u0439\u043b\u0435 stm32f4xx_it.c, \u0438\u0437 \u043f\u043e\u0442\u043e\u043a\u0430 DMA, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043f\u0440\u0438\u0451\u043c, \u0443 \u043c\u0435\u043d\u044f \u044d\u0442\u043e DMA2 \u043f\u043e\u0442\u043e\u043a 5, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f HAL_DMA_IRQHandler(&amp;hdma_usart1_rx), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 CubeIDE.<\/p>\n<pre><code>void DMA2_Stream5_IRQHandler(void) {   \/* USER CODE BEGIN DMA2_Stream5_IRQn 0 *\/ RxCpltCallbackUart1();   \/* USER CODE END DMA2_Stream5_IRQn 0 *\/    \/\/HAL_DMA_IRQHandler(&amp;hdma_usart1_rx);   \/* USER CODE BEGIN DMA2_Stream5_IRQn 1 *\/    \/* USER CODE END DMA2_Stream5_IRQn 1 *\/ }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h4>\u041a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0439 \u0431\u0443\u0444\u0435\u0440 \u0434\u043b\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/h4>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b, \u043f\u043e\u0445\u043e\u0436\u0435 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0447\u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e &#8212; \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0431\u0430\u0439\u0442\u0443 \u0438 \u0438\u0441\u043a\u0430\u0442\u044c \u043a\u043e\u043d\u0435\u0446 \u0441\u0442\u0440\u043e\u043a\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0439 \u0431\u0443\u0444\u0435\u0440, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u043f\u0430\u0434\u0430\u0442\u044c \u043f\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044e \u043e\u0431 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u043f\u0440\u0438\u0451\u043c\u0430 \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u0438\u0437 DMA. <\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434: \u043f\u043e\u0431\u0430\u0439\u0442\u043e\u0432\u043e\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430 UART \u0438 \u043f\u043e\u0438\u0441\u043a \u043a\u043e\u043d\u0446\u0430 \u0441\u0442\u0440\u043e\u043a\u0438<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0423 \u043c\u0435\u043d\u044f \u0438\u0437 Bluetooth \u043c\u043e\u0434\u0443\u043b\u044f \u0432\u0441\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 UART \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0432\u0438\u0434\u0430 &#171;R N \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 R N&#187; \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u043c\u0443, \u0442\u043e \u044d\u0442\u043e\u0442 \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0439 \u0431\u0443\u0444\u0435\u0440 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u0441\u0435\u0431\u044f. <\/p>\n<p>\u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0442\u0440\u043e\u043a\u0438, \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430 \u0438 \u043f\u043e\u0438\u0441\u043a \u043a\u043e\u043d\u0446\u0430 \u0441\u0442\u0440\u043e\u043a\u0438, \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d \u043a\u043e\u043d\u0435\u0446 \u0441\u0442\u0440\u043e\u043a\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f  MsgCountW, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f 0 \u0432 BtBuffer \u0431\u0443\u0444\u0435\u0440. \u041f\u043e 0 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u043a\u043e\u043d\u0435\u0446 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u0430 \u043f\u043e MsgCountW \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439. <\/p>\n<pre><code>#define  BufSize 1024  int      MsgCountW = 0, \/\/\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439          MsgCountR = 0, \/\/\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0447\u0442\u0451\u043d\u043d\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439          RxPointer = 0, \/\/\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u0447\u0442\u0435\u043d\u0438\u044f          TxPointer = 0; \/\/\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u0437\u0430\u043f\u0438\u0441\u0435           uint8_t  RNScanBuf[3],       \/\/\u0431\u0443\u0444\u0435\u0440 \u0434\u043b\u044f \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0446\u0430 \u0441\u0442\u0440\u043e\u043a\u0438          BtBuffer[BufSize],  \/\/\u043a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0439 \u0431\u0443\u0444\u0435\u0440          SendState = 0,          R = 13,          N = 10,          Text = 14,          End_Mesage = 0;   void Ring_buffer(uint8_t data){  RNScanBuf[0] = RNScanBuf[1]; RNScanBuf[1] = RNScanBuf[2]; RNScanBuf[2] = data;  if (RNScanBuf[0] == R &amp;&amp; RNScanBuf[1] == N &amp;&amp; RNScanBuf[2] > Text){ \/\/\u043d\u0430\u0447\u0430\u043b\u043e \u0441\u0442\u0440\u043e\u043a\u0438 if(SendState == 1){ BtBuffer[TxPointer] = End_Mesage; UpWritePointer(); MsgCountW ++; } SendState = 1; BtBuffer[TxPointer] = data; UpWritePointer();  }else if (RNScanBuf[0] > Text &amp;&amp; RNScanBuf[1] == R &amp;&amp; RNScanBuf[2] == N){ \/\/\u043a\u043e\u043d\u0435\u0446 \u0441\u0442\u0440\u043e\u043a\u0438 SendState = 0; BtBuffer[TxPointer] = End_Mesage; UpWritePointer(); MsgCountW ++;  }else if(data > Text){ \/\/\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0431\u0443\u0444\u0435\u0440\u0430 BtBuffer[TxPointer] =  data; UpWritePointer(); } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0414\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u043f\u043e\u0442\u043e\u043a \u0432 FreeRTOS UART_RESIVE. \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c MsgCountW \u0438 \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u0442\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u043d\u043e\u0432\u044b\u0439 \u0431\u0443\u0444\u0435\u0440, \u0430 \u043f\u0440\u0438 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0438 \u043a\u043e\u043d\u0446\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e Received_uart1(uint8_t *data, uint8_t len) \u043a\u0443\u0434\u0430 \u0438 \u043f\u0440\u0438\u0434\u0443\u0442 \u043d\u0430\u0448\u0438 \u0434\u0440\u0430\u0433\u043e\u0446\u0435\u043d\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u0437 UART.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434: \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430, \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0412 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 FreeRTOS \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 MsgCountW \u0438 MsgCountR, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043d\u0435 \u0440\u0430\u0432\u043d\u044b, \u0442\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0431\u0443\u0444\u0435\u0440 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0438\u0449\u0435\u043c \u043a\u043e\u043d\u0435\u0446 \u0441\u0442\u0440\u043e\u043a\u0438 &#171;0&#187;, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043c \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u043b \u043f\u0440\u0438\u0451\u043c\u043d\u044b\u0439 \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0439 \u0431\u0443\u0444\u0435\u0440. \u041f\u043e\u0441\u043b\u0435 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c Received_uart1(uint8_t *data, uint8_t len) \u0441 \u0434\u043b\u0438\u043d\u043d\u043e\u0439 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u043c \u043d\u0430 \u0431\u0443\u0444\u0435\u0440 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 Received_uart1  \u0432\u044b \u0443\u0436\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u044d\u0442\u0438\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435, + \u044d\u0442\u043e \u0432\u0441\u0451 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u043f\u043e\u0442\u043e\u043a\u0435 \u0438 \u043d\u0435 \u0437\u0430\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u0430\u0448\u0443 \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0435\u0441\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0435.<\/p>\n<pre><code>uint8_t   SendMsgBuf[255];  void Start_UART_RESIVE(void const * argument) {   \/* USER CODE BEGIN Start_UART_RESIVE *\/    UART_Initialization(); \/* Infinite loop *\/   for(;;)   {    if(MsgCountW != MsgCountR){    SendMsgLen = 0;   for(uint16_t i = 0; i&lt;BufSize; i++){    if(SendMsgLen&lt;255){   SendMsgBuf[SendMsgLen] = BtBuffer[RxPointer];   }    SendMsgLen++;    if(BtBuffer[RxPointer]==End_Mesage){   i = BufSize;   }   RxPointer++;   if(RxPointer>=BufSize) {   RxPointer = 0;   }   }   Received_uart1(&amp;SendMsgBuf[0], SendMsgLen-1);   MsgCountR++;   }    osDelay(1);    } }  void Received_uart1(uint8_t *data, uint8_t len){ \/* \u041f\u0440\u0438\u043d\u044f\u0442\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 *\/ }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u044d\u0442\u043e\u0442 \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0439 \u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a \u043d\u0435 \u0438\u0434\u0435\u0430\u043b\u0435\u043d, \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u043e\u043d \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0431\u0430\u0439\u0442\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u0441\u043b\u043e\u043c\u0430\u0435\u0442 \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0439 \u0431\u0443\u0444\u0435\u0440 \u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0441\u044b\u043f\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u043f\u043e\u043f\u0430\u043b\u043e, \u0437\u0434\u0435\u0441\u044c \u0443\u0436\u0435 \u043d\u0430\u0434\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c, \u043a\u0430\u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043a\u043e\u043d\u0435\u0446 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e. <\/p>\n<h2>\u0412\u044b\u0432\u043e\u0434<\/h2>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0430\u0431\u043e\u0447\u0438\u0439 UART+DMA, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u043d\u0430 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u044f\u0445. \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0433\u043e\u0442\u043e\u0432 \u0432\u044b\u0441\u043b\u0443\u0448\u0430\u0442\u044c.<\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u043d\u0430 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u044f\u0445 \u0434\u0430\u0451\u0442 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0431\u0438\u0442\u0430\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043c\u0430\u0441\u043e\u043a \u0438 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043f\u043e\u043b\u044c\u0437\u0443\u044f\u0441\u044c \u0438\u043c\u0438 \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c. \u042d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0431\u0435\u0437 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0439 \u0432 \u0431\u0438\u0442\u043e\u0432\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432, \u0432\u0438\u0434\u0438\u043c \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438.<\/p>\n<p>\u041c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b: 1) \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043e\u0447\u0435\u043d\u044c \u043d\u0438\u0437\u043a\u0430\u044f, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0438 \u0434\u0430\u0436\u0435 \u043c\u0435\u043d\u044f\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u041d\u043e \u044d\u0442\u043e \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439. 2) \u0415\u0441\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435, \u0438\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0438\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438, \u0447\u0442\u043e \u043d\u0435 \u0443\u0434\u043e\u0431\u043d\u043e \u0438 \u0441\u043d\u0438\u0436\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c (\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0435 \u0435\u0441\u043b\u0438 \u0438\u0445 \u0441 \u0434\u0435\u0441\u044f\u0442\u043e\u043a). \u042d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0442\u043e\u043c\u0443 \u043a\u0430\u043a \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0438\u0440\u0430\u0432\u043d\u044f\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043a \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c\u0443 \u0447\u0438\u0441\u043b\u0443. \u0412\u043e\u043e\u0431\u0449\u0435 \u043f\u0440\u0438 \u0442\u0430\u043a\u043e\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u0438\u0442\u043e\u0432\u044b\u043c\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u044b \u043a \u0430\u0434\u0440\u0435\u0441\u0430\u043c \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 \u0438 \u0438\u043c\u0435\u044e\u0442 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e volatile, \u043e\u043d\u0438 \u043e\u0442\u0440\u0435\u0430\u0433\u0438\u0440\u0443\u044e\u0442 \u043d\u0430 \u043b\u044e\u0431\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430.  <\/p>\n<p>\u0414\u043b\u044f \u0441\u0435\u0431\u044f \u043e\u0441\u043e\u0431\u044b\u0445 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0431\u0438\u0442\u0430\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0447\u0435\u0440\u0435\u0437 \u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044f \u043d\u0435 \u043d\u0430\u0448\u0451\u043b. \u0422\u0430\u043a\u0436\u0435, \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043c\u043d\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u0435\u0435 \u043e\u043f\u044b\u0442\u043d\u044b\u0445 \u043b\u044e\u0434\u0435\u0439 \u043e \u0442\u0430\u043a\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0435. \u0418 \u043f\u043e\u0447\u0435\u043c\u0443 \u043f\u043e\u0432\u0441\u0435\u043c\u0435\u0441\u0442\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0438 \u043d\u0435 \u043e\u0442\u0434\u0430\u044e\u0442 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c \u043d\u0430 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u044f\u0445?<\/p>\n<p>\u0412\u0441\u0435\u043c \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0438 \u0434\u043e\u0431\u0440\u0430!<\/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\/662341\/\"> https:\/\/habr.com\/ru\/post\/662341\/<\/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<h2>\u041f\u0440\u043e \u043c\u0435\u043d\u044f<\/h2>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440, 33 \u0433\u043e\u0434\u0430, \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043c\u043e\u043d\u0442\u0451\u0440\u043e\u043c, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u043e\u0431\u0431\u0438. \u0423\u0447\u0438\u043b\u0441\u044f \u0432\u0441\u0435\u043c\u0443 \u0447\u0438\u0441\u0442\u043e \u043d\u0430 \u044d\u043d\u0442\u0443\u0437\u0438\u0430\u0437\u043c\u0435 \u0438 \u0432 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u043c \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0435\u0441\u0442\u044c \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0442\u0435\u0441\u043d\u0435\u0435 \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0436\u0438\u0437\u043d\u044c \u0441 \u043c\u0438\u0440\u043e\u043c IT. \u0414\u043e\u043b\u0433\u043e \u0440\u0435\u0448\u0430\u043b\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u043d\u0430 Habr \u0438 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u043c\u0438\u0440\u043e\u043c \u0441\u0432\u043e\u0438\u043c\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c\u0438. \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u0440\u0438\u0442\u0438\u043a\u0443, \u0441\u043e\u0432\u0435\u0442\u044b \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043b\u0443\u0447\u0448\u0435 \u0438\u043b\u0438 \u0441\u043b\u043e\u0432\u0430 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u0438 \u0435\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u044b\u043b\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439. \u0418 \u0432\u043e\u0442 \u043c\u043e\u044f \u043f\u0435\u0440\u0432\u0430\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f.<\/p>\n<h2>\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u0438\u043b\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u0431\u0438\u0442\u0430, \u043f\u043e\u0432\u0441\u0435\u043c\u0435\u0441\u0442\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u043c\u0430\u0441\u043a\u0438 \u0438 \u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0451\u0442 \u043f\u0440\u043e \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b STM32, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0441\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0438\u043c\u0435\u044e\u0442 32 \u0431\u0438\u0442\u0430. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f STMicroelectronics \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 CubeMX \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 HAL \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432 \u043e\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432. \u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e, \u043c\u044b \u0432 \u043a\u0440\u043e\u0442\u0447\u0430\u0439\u0448\u0438\u0435  \u0441\u0440\u043e\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0440\u0430\u0431\u043e\u0447\u0443\u044e \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044e, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0434\u0430\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c, \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0447\u0438\u0442\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e. \u041d\u043e \u0440\u0430\u043d\u043e \u0438\u043b\u0438 \u043f\u043e\u0437\u0434\u043d\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043a\u043e\u0432\u044b\u0440\u044f\u0442\u044c\u0441\u044f \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445 (\u0434\u0443\u043c\u0430\u044e \u043a\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 HAL \u043c\u0435\u043d\u044f \u043f\u043e\u0439\u043c\u0451\u0442). \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 CMSIS \u043d\u0430\u043c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0435\u0441\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438. \u041d\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e, \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0442\u043e, \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0431\u0438\u0442\u0430\u043c\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u043a\u0430\u043a \u0441 \u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438. \u0418 \u0432\u043e\u0442 \u0432, \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043a \u043d\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043d\u0430 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u044f\u0445. <\/p>\n<p><strong><em>\u0426\u0435\u043b\u044c \u0441\u0442\u0430\u0442\u044c\u0438<\/em><\/strong><em> &#8212; \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0431\u0438\u0442\u0430\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 STM32 \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u0438\u0442\u0430\u043c\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438. \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0431\u044b\u0442\u044c \u0433\u043e\u043b\u043e\u0441\u043b\u043e\u0432\u043d\u044b\u043c, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442 UART+DMA \u0441 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 \u0438 \u043f\u0440\u0438\u0451\u043c\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0443\u044e \u0447\u0438\u0441\u0442\u043e \u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445 c \u0431\u0438\u0442\u043e\u0432\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u044b \u043a \u0430\u0434\u0440\u0435\u0441\u0430\u043c \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 STM32. <\/em><\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043e\u0431\u043c\u0435\u043d \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043c\u0435\u0436\u0434\u0443 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c STM32 \u0438 Bluetooth \u043c\u043e\u0434\u0443\u043b\u0435\u043c FSC-BT802 \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 UART \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c DMA. <em>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 HAL \u0443 \u043c\u0435\u043d\u044f \u0442\u0430\u043a \u0438 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u043c\u0435\u043d \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u043e UART. \u0411\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043d\u0435 \u0437\u043d\u0430\u0435\u043c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442 bluetooth \u043c\u043e\u0434\u0443\u043b\u044c \u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0431\u0430\u0439\u0442\u044b \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0438 \u0438\u0441\u043a\u0430\u0442\u044c \u043a\u043e\u043d\u0435\u0446 \u0441\u0442\u0440\u043e\u043a\u0438. \u041d\u043e \u0441\u043f\u0443\u0441\u0442\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u0441\u0451 \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0451\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438 \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e, \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438\u0451\u043c \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 UART \u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445.<\/em><\/p>\n<p>\u0423 \u043d\u0430\u0441 \u0438\u043c\u0435\u0435\u0442\u0441\u044f:<\/p>\n<ul>\n<li>\n<p>\u0421\u0440\u0435\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 STM32CubeIDE v1.9.0<\/p>\n<\/li>\n<li>\n<p>FreeRTOS v9.0.0<\/p>\n<\/li>\n<li>\n<p>\u041c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 STM32F405RGT6<\/p>\n<\/li>\n<li>\n<p>Bluetooth \u043c\u043e\u0434\u0443\u043b\u044c FSC-BT802<\/p>\n<\/li>\n<li>\n<p>\u0421\u0432\u044f\u0437\u044c \u043c\u0435\u0436\u0434\u0443 STM32 \u0438 Bluetooth \u043f\u043e UART, \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c 115200<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u0441\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f: \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, UART, DMA, FreeRTOS \u0438 \u0442.\u043f. \u044f \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0437\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 HAL, \u043e\u043d\u0430 \u0441 \u044d\u0442\u0438\u043c \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e \u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0430 \u044d\u0442\u043e\u043c \u0444\u043e\u043d\u0435 \u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u043b\u043e + \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0438 \u0431\u044b\u0441\u0442\u0440\u043e.<\/p>\n<h2>\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 CubeIDE<\/h2>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435 \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c &#8212; \u044d\u0442\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442: \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 UART, \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f, DMA \u0438 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e FreeRTOS. <\/p>\n<figure class=\"full-width\"><figcaption>\u0420\u0438\u0441.1 UART1 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u0430\u043a \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 \u044d\u0442\u043e \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442<\/figcaption><\/figure>\n<figure class=\"full-width\"><figcaption>\u0420\u0438\u0441 2. \u041f\u043e\u0442\u043e\u043a\u0438 DMA \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f TX \u0438 RX \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438<\/figcaption><\/figure>\n<figure class=\"full-width\"><figcaption>\u0420\u0438\u0441. 3 \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0441\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f<\/figcaption><\/figure>\n<p>\u0414\u0430\u043b\u0435\u0435, \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c FreeRTOS \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0435\u043c\u0430\u0444\u043e\u0440 \u0434\u043b\u044f \u0437\u0430\u0449\u0438\u0442\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a\u0430 UART DMA.<\/p>\n<figure class=\"full-width\"><figcaption>\u0420\u0438\u0441. 4 \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0442\u043e\u043a. \u041c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0430\u043a \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0432\u044b\u0434\u0435\u043b\u0435\u043d \u0441\u0438\u043d\u0438\u043c \u0438 \u043f\u043e\u0434\u0447\u0451\u0440\u043a\u043d\u0443\u0442 \u043a\u0440\u0430\u0441\u043d\u043e\u0439 \u043b\u0438\u043d\u0438\u0435\u0439, \u043d\u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u043d\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0439\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435.<\/figcaption><\/figure>\n<figure class=\"full-width\"><figcaption>\u0420\u0438\u0441. 5 \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0435\u043c\u0430\u0444\u043e\u0440 \u043a\u0430\u043a \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438, \u0432\u044b\u0434\u0435\u043b\u0435\u043d \u0441\u0438\u043d\u0438\u043c \u0446\u0432\u0435\u0442\u043e\u043c \u0438 \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443\u0442 \u043a\u0440\u0430\u0441\u043d\u043e\u0439 \u043b\u0438\u043d\u0438\u0435\u0439, \u043d\u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u043d\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0439\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435.<\/figcaption><\/figure>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0432 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u044b, \u043c\u043e\u0436\u043d\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442.<\/p>\n<h2>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043d\u0430 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u044f\u0445<\/h2>\n<p>\u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u044f \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u044f\u0437\u044b\u043a\u0430 C, \u044d\u0442\u043e <strong>\u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044f<\/strong>. \u041d\u0435 \u0431\u0443\u0434\u0443 \u0440\u0430\u0441\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435, \u0435\u0441\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043d\u0430\u0439\u0434\u0451\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435. \u041a\u0430\u043a \u043c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 &#8212; \u044d\u0442\u043e \u0441\u0430\u043c\u0430\u044f \u0443\u0434\u043e\u0431\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f.<\/p>\n<p>\u0418 \u0442\u0430\u043a, \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u043c 2 header \u0444\u0430\u0439\u043b\u0430, \u043c\u043e\u0436\u043d\u043e \u0438 \u043e\u0434\u0438\u043d, \u043d\u043e \u0442\u0430\u043a \u043f\u0440\u043e\u0449\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c, Register_UART.h \u0438 Register_DMA.h.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0438\u0434\u0451\u043c \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442, \u0438\u0449\u0435\u043c Reference Manual \u043d\u0430 \u0441\u0432\u043e\u0439 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 (\u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u044d\u0442\u043e RM0090 \u0434\u043b\u044f STM32F405), \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c, \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0440\u0430\u0437\u0434\u0435\u043b 30.6.8 USART register map \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 1018. \u0418 \u0432 \u0444\u0430\u0439\u043b\u0435 Register_UART.h \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043a\u0430\u043a \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u0420\u0438\u0441. 6<\/p>\n<figure class=\"full-width\"><figcaption>\u0420\u0438\u0441.6 \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0441 \u0431\u0438\u0442\u043e\u0432\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u0430\u0440\u0442\u044b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 UART, \u0441 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 3\u043c\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435 (\u0441\u044e\u0434\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0432\u043b\u0435\u0437\u043b\u0438)<\/figcaption><\/figure>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u0420\u0438\u0441. 6, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0441 \u0431\u0438\u0442\u043e\u0432\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438  \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0442 \u043a\u0430\u0440\u0442\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 UART.  \u041e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u043e, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u0438\u0442\u043e\u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0441\u0442\u0440\u043e\u0433\u043e \u043a\u0430\u043a \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u043a\u0430\u0440\u0442\u0435 \u0438 \u0435\u0441\u043b\u0438 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0443\u0447\u0430\u0441\u0442\u043a\u0438 \u0431\u0438\u0442, \u0438\u0445 \u0442\u043e\u0436\u0435  \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c, \u0442\u0430\u043a\u0436\u0435 \u0432\u0441\u0435 \u044d\u0442\u0438 \u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c <strong>volatile<\/strong> \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0431\u0435\u0437 \u0443\u0447\u0430\u0441\u0442\u0438\u044f \u043d\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u0434\u043b\u044f \u0437\u0430\u0449\u0438\u0442\u044b \u043e\u0442 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u0432\u0441\u0451 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u043e\u0434\u043d\u0430 \u0442\u0430\u043a\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u0440\u043e\u0432\u043d\u043e 32\u0431\u0438\u0442\u0430. <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0441 \u0431\u0438\u0442\u043e\u0432\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 \u0438\u0437 \u043a\u0430\u0440\u0442\u044b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u043c \u0432\u0441\u0451 \u0432 \u043e\u0431\u0449\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 &#171;sUART1_TypeDef&#187;, \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u0435\u0451 \u043a\u0430\u043a \u0443\u0433\u043e\u0434\u043d\u043e.<\/p>\n<figure class=\"full-width\"><figcaption>\u0420\u0438\u0441. 7 \u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0441 \u0431\u0438\u0442\u043e\u0432\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 \u0432 \u043e\u0431\u0449\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 sUART1_TypeDef<\/figcaption><\/figure>\n<details class=\"spoiler\">\n<summary>\u0424\u0430\u0439\u043b Register_UART.h<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>#ifndef STM32_F405_UART1_REGISTER_H_ #define STM32_F405_UART1_REGISTER_H_ #include \"stdio.h\"  #define rUART1 ((sUART1_TypeDef *) USART1_BASE)  typedef struct{ volatile uint32_t  PE        :1;  \/\/0 volatile uint32_t  FE        :1;  \/\/1 volatile uint32_t  NF        :1;  \/\/2 volatile uint32_t  ORE       :1;  \/\/3 volatile uint32_t  IDLE      :1;  \/\/4 volatile uint32_t  RXNE      :1;  \/\/5 volatile uint32_t  TC        :1;  \/\/6 volatile uint32_t  TXE       :1;  \/\/7 volatile uint32_t  LBD       :1;  \/\/8 volatile uint32_t  CTS       :1;  \/\/9 volatile uint32_t  Reserved  :22; \/\/10-31 } sUSART_SR;  typedef struct{ volatile uint32_t  DR        :9;  \/\/0-8 volatile uint32_t  Reserved  :23; \/\/9-31 } sUSART_DR;  typedef struct{ volatile uint32_t  DIV_Fraction  :4;  \/\/0-3 volatile uint32_t  DIV_Mantissa  :12; \/\/4-15 volatile uint32_t  Reserved3     :16; \/\/16-31 } sUSART_BRR;  typedef struct{ volatile uint32_t  SBK       :1;  \/\/0 volatile uint32_t  RWU       :1;  \/\/1 volatile uint32_t  RE        :1;  \/\/2 volatile uint32_t  TE        :1;  \/\/3 volatile uint32_t  IDLEIE    :1;  \/\/4 volatile uint32_t  RXNEIEIE  :1;  \/\/5 volatile uint32_t  TCIE      :1;  \/\/6 volatile uint32_t  TXEIE     :1;  \/\/7 volatile uint32_t  PEIE      :1;  \/\/8 volatile uint32_t  PS        :1;  \/\/9 volatile uint32_t  PCE       :1;  \/\/10 volatile uint32_t  WAKE      :1;  \/\/11 volatile uint32_t  M         :1;  \/\/12 volatile uint32_t  UE        :1;  \/\/13 volatile uint32_t  Reserved1 :1;  \/\/14 volatile uint32_t  OVER8     :1;  \/\/15 volatile uint32_t  Reserved2 :16; \/\/16-31 } sUSART_CR1;  typedef struct{ volatile uint32_t  ADD       :4;  \/\/0-3 volatile uint32_t  Reserved1 :1;  \/\/4 volatile uint32_t  LBDL      :1;  \/\/5 volatile uint32_t  LBDIE     :1;  \/\/6 volatile uint32_t  Reserved2 :1;  \/\/7 volatile uint32_t  LBCL      :1;  \/\/8 volatile uint32_t  CPHA      :1;  \/\/9 volatile uint32_t  CPOL      :1;  \/\/10 volatile uint32_t  CLKEN     :1;  \/\/11 volatile uint32_t  STOP      :2;  \/\/12-13 volatile uint32_t  LINEN     :1;  \/\/14 volatile uint32_t  Reserved3 :17; \/\/15-31 } sUSART_CR2;  typedef struct{ volatile uint32_t  EIE       :1;  \/\/0 volatile uint32_t  IREN      :1;  \/\/1 volatile uint32_t  IRLP      :1;  \/\/2 volatile uint32_t  HDSEL     :1;  \/\/3 volatile uint32_t  NACK      :1;  \/\/4 volatile uint32_t  SCEN      :1;  \/\/5 volatile uint32_t  DMAR      :1;  \/\/6 volatile uint32_t  DMAT      :1;  \/\/7 volatile uint32_t  RTSE      :1;  \/\/8 volatile uint32_t  CTSE      :1;  \/\/9 volatile uint32_t  CTSIE     :1;  \/\/10 volatile uint32_t  ONEBIT    :1;  \/\/11 volatile uint32_t  Reserved  :20; \/\/12-31 } sUSART_CR3;  typedef struct{ volatile uint32_t  PSC       :8;  \/\/0-7 volatile uint32_t  GT        :8;  \/\/8-15 volatile uint32_t  Reserved  :16; \/\/16-31 } sUSART_GTPR;  typedef struct {   volatile sUSART_SR   SR;    \/* Status register,                   Address offset: 0x00 *\/   volatile sUSART_DR   DR;    \/* Data register,                     Address offset: 0x04 *\/   volatile sUSART_BRR  BRR;   \/* Baud rate register,                Address offset: 0x08 *\/   volatile sUSART_CR1  CR1;   \/* Control register 1,                Address offset: 0x0C *\/   volatile sUSART_CR2  CR2;   \/* Control register 2,                Address offset: 0x10 *\/   volatile sUSART_CR3  CR3;   \/* Control register 3,                Address offset: 0x14 *\/   volatile sUSART_GTPR GTPR;  \/* Guard time and prescaler register, Address offset: 0x18 *\/  } sUART1_TypeDef;  #endif \/* STM32_F405_UART1_REGISTER_H_ *\/<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0441 \u0431\u0438\u0442\u043e\u0432\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 DMA<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0422\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u0438 \u0441 \u043a\u0430\u0440\u0442\u043e\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 DMA, \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0432 \u0444\u0430\u0439\u043b Register_DMA.h. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043f\u0443\u0433\u0430\u0442\u044c &#8212; \u044d\u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0430\u0440\u0442\u044b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 DMA, \u043e\u043d\u0430 \u0440\u0430\u0441\u0442\u044f\u043d\u0443\u043b\u0430\u0441\u044c \u0430\u0436 \u043d\u0430 4 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b. \u041d\u043e \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0442\u0430\u043c \u043c\u043d\u043e\u0433\u043e\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f, \u0442\u0430\u043a \u043a\u0430\u043a DMA \u0438\u043c\u0435\u0435\u0442 8 \u043f\u043e\u0442\u043e\u043a\u043e\u0432. \u0413\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 DMA, \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0432 8 \u0440\u0430\u0437. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 &#171;sDMA_TypeDef&#187;  \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043a DMA1 \u0438 \u043a DMA2.<\/p>\n<details class=\"spoiler\">\n<summary>\u0424\u0430\u0439\u043b Register_DMA.h<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>#ifndef STM32_F405_DMA_REGISTER_H_ #define STM32_F405_DMA_REGISTER_H_ #include \"stdio.h\"  #define rDMA1 ((sDMA_TypeDef *) DMA1_BASE) #define rDMA2 ((sDMA_TypeDef *) DMA2_BASE)  typedef struct{ volatile uint32_t  FEIF0       :1;  \/\/0 volatile uint32_t  Reserved1   :1;  \/\/1 volatile uint32_t  DMEIF0      :1;  \/\/2 volatile uint32_t  TEIF0       :1;  \/\/3 volatile uint32_t  HTIF0       :1;  \/\/4 volatile uint32_t  TCIF0       :1;  \/\/5 volatile uint32_t  FEIF1       :1;  \/\/6 volatile uint32_t  Reserved2   :1;  \/\/7 volatile uint32_t  DMEIF1      :1;  \/\/8 volatile uint32_t  TEIF1       :1;  \/\/9 volatile uint32_t  HTIF1       :1;  \/\/10 volatile uint32_t  TCIF1       :1;  \/\/11 volatile uint32_t  Reserved3   :4;  \/\/12-15 volatile uint32_t  FEIF2       :1;  \/\/16<\/code><\/pre>\n<\/div>\n<\/details>\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-332257","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/332257","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=332257"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/332257\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=332257"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=332257"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=332257"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}