{"id":345054,"date":"2023-02-07T09:01:05","date_gmt":"2023-02-07T09:01:05","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=345054"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=345054","title":{"rendered":"<span>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b vs \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441\u0435\u0440\u0434\u0435\u0447\u0435\u043a<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412\u043f\u0435\u0440\u0435\u0434\u0438 14 \u0444\u0435\u0432\u0440\u0430\u043b\u044f. \u041c\u043e\u0436\u043d\u043e \u0441\u043f\u043e\u0440\u0438\u0442\u044c \u043e\u0431 \u0443\u043c\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430 \u0432 \u043d\u0430\u0448\u0438\u0445 \u043a\u0440\u0430\u044f\u0445, \u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044d\u043d\u0435\u0440\u0433\u0438\u044e \u0432 \u043c\u0438\u0440\u043d\u043e\u0435 \u0440\u0443\u0441\u043b\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0442\u043a\u043e\u043f\u0430\u0442\u044c \u0430\u0440\u0434\u0443\u0438\u043d\u0443, \u0449\u0435\u0434\u0440\u043e \u043e\u0431\u0441\u044b\u043f\u0430\u0442\u044c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430\u043c\u0438 \u0438 \u0441\u0444\u043e\u0440\u043c\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432\u043e \u0447\u0442\u043e-\u0442\u043e \u0441\u0435\u0440\u0434\u0435\u0447\u043a\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435. \u041d\u0435\u0443\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e? \u0421\u043e\u0433\u043b\u0430\u0441\u0435\u043d. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u0430\u043a: \u043e\u0442\u043a\u043e\u043f\u0430\u0435\u043c \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439 \u043a\u043e\u0440\u043e\u0431\u043a\u0435 \u043c\u0430\u043a\u0435\u0442\u043a\u0443 \u043d\u0430 stm32, \u0437\u0430\u0431\u0443\u0434\u0435\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u043f\u043e\u0434\u0451\u0440\u0433\u0430\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b, \u0432\u044b\u0433\u0440\u044b\u0437\u0430\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u0430\u0439\u0442 ROM \u0443 \u0437\u043b\u043e\u0431\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430. \u041f\u043e\u0442\u043e\u043c \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0432\u0441\u0451 \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u043d\u043e \u0431\u0435\u0437 \u0444\u0430\u043d\u0430\u0442\u0438\u0437\u043c\u0430, \u0441 \u043f\u0440\u0438\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435\u043c CMSIS \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0434\u0430\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0432\u044b\u0432\u043e\u0434\u044b. \u0411\u0443\u0434\u0435\u0442 \u043a\u043e\u0434, \u043d\u0430\u0434\u0440\u0443\u0433\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e \u043d\u0430\u0434 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432. \u0410\u0440\u0434\u0443\u0438\u043d\u043a\u0430 \u0442\u043e\u0436\u0435 \u0431\u0443\u0434\u0435\u0442, \u043a\u0443\u0434\u0430 \u0436 \u0431\u0435\u0437 \u043d\u0435\u0451.<\/p>\n<h2>\u041f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u0430<\/h2>\n<p>\u0421\u0442\u0430\u0442\u044c\u044f \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u0442\u0435\u0445, \u043a\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u043f\u043e\u0434 \u0433\u043e\u043b\u043e\u0435 \u0436\u0435\u043b\u0435\u0437\u043e \u043b\u0438\u0431\u043e \u0441\u0434\u0435\u043b\u0430\u043b \u044d\u0442\u043e \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u0435\u0439. \u041b\u044e\u0431\u0438\u0442\u0435\u043b\u0438 \u043d\u0430\u0439\u0434\u0443\u0442 \u0442\u0440\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c &#171;Hello word&#187; \u043d\u0430 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u0438 \u0430 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044b, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0430\u0439\u0434\u0443\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c\u0438 \u0432\u044b\u0432\u043e\u0434\u044b \u0438\u0437 \u0442\u0435\u0445 \u0446\u0438\u0444\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0432 \u0438\u0442\u043e\u0433\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u0442\u0440\u0451\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432. \u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0446\u0438\u0444\u0440\u044b \u0431\u0443\u0434\u0443\u0442 \u043a\u0430\u0441\u0430\u0442\u044c\u0441\u044f \u043e\u0431\u044a\u0435\u043c\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0435\u0433\u043e\u0441\u044f \u043a\u043e\u0434\u0430 \u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u0442\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0432 \u0445\u043e\u043b\u0438\u0432\u0430\u0440\u0430\u0445 &#171;\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b vs HAL&#187;.<\/p>\n<p>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044f \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0431\u0440\u043e\u0441\u0430\u0442\u044c \u0437\u0430 \u0432\u0435\u0447\u0435\u0440\u043e\u043a \u0447\u0442\u043e-\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u0434\u043b\u044f \u0440\u0435\u0431\u0451\u043d\u043a\u0430. \u041e\u043d \u0441\u0435\u0439\u0447\u0430\u0441 \u0432 \u0442\u0430\u043a\u043e\u0439 \u0441\u0442\u0430\u0434\u0438\u0438, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u0432\u0441\u0451, \u0447\u0442\u043e \u043c\u0438\u0433\u0430\u0435\u0442 \u0438 \u0441\u0432\u0435\u0442\u0438\u0442\u0441\u044f. \u0418\u0434\u0435\u044f \u0431\u044b\u043b\u0430 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0441\u043f\u043e\u043d\u0442\u0430\u043d\u043d\u043e\u0439 \u0438 \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0432\u0430\u043b\u0438\u043b\u0430\u0441\u044c. \u0412 \u0438\u0442\u043e\u0433\u0435 \u0440\u0435\u0431\u0451\u043d\u043e\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0441\u0432\u0435\u0442\u043e\u0444\u043e\u0440 \u043d\u0430 \u0431\u0430\u0437\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 &#171;\u0432\u043e\u043b\u044c\u0442\u0438\u043a&#187;, \u0441 \u0431\u043e\u043d\u0443\u0441\u043e\u043c \u043e\u0442 \u043f\u0430\u043f\u044b \u0432 \u0432\u0438\u0434\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u043b\u0430\u0442\u043e\u0439 Digispark, \u0430 \u043f\u0430\u043f\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043b nucleo-F103RB \u0441 \u043f\u0440\u0438\u043a\u0440\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u0435\u0439 8&#215;32 \u043a\u0440\u0430\u0441\u043d\u044b\u0445 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430 \u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u0435\u0439 \u043f\u043e SPI. \u041a\u0441\u0442\u0430\u0442\u0438, \u0435\u0441\u043b\u0438 \u0443 \u043a\u043e\u0433\u043e-\u0442\u043e \u0435\u0441\u0442\u044c \u0438\u0434\u0435\u044f, \u043a\u0430\u043a\u0443\u044e \u0438\u0433\u0440\u0443\u0448\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a\u0438 \u0438\u0437 \u044d\u0442\u043e\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043f\u0440\u043e\u0448\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445. \u0422\u0435\u0442\u0440\u0438\u0441 \u043d\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0442\u044c.<\/p>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u0440\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u0434\u0435\u043c\u043a\u0430 \u0441 \u0441\u0435\u0440\u0434\u0435\u0447\u043a\u0430\u043c\u0438. \u0425\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0435\u044e \u0441 \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e. \u0412\u0434\u0440\u0443\u0433, \u043a\u043e\u043c\u0443-\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u0430\u044f \u043d\u0443\u0436\u043d\u0430 \u043d\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0412\u0430\u043b\u0435\u043d\u0442\u0438\u043d\u043e\u0432 \u0434\u0435\u043d\u044c? \u0415\u0441\u043b\u0438 \u043f\u043e\u0442\u043e\u0440\u043e\u043f\u0438\u0442\u044c\u0441\u044f, \u0442\u043e \u0435\u0449\u0451 \u0435\u0441\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u0441\u0431\u0435\u0433\u0430\u0442\u044c \u0432 \u043c\u0430\u0433\u0430\u0437\u0438\u043d.<\/p>\n<h2>\u041e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0432 \u0441\u0440\u0435\u0434\u0435 Keil MDK-ARM. \u0421\u0432\u0435\u0436\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0441 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430. \u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438 \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u0430\u0439\u043b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432 32 \u043a\u0411, \u043d\u043e \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f \u044d\u0442\u043e \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u042d\u0442\u0443 \u0441\u0440\u0435\u0434\u0443 \u0447\u0430\u0441\u0442\u043e \u0440\u0443\u0433\u0430\u044e\u0442 \u0437\u0430 \u0443\u0431\u043e\u0433\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043a\u043e\u0434\u0430, \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0442\u0435\u043c \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u044f, \u0433\u043b\u044e\u0447\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u043f\u043e \u043a\u043e\u0434\u0443 \u0438 \u043f\u0440. \u0412\u0441\u0451 \u044d\u0442\u043e \u0435\u0441\u0442\u044c, \u043d\u043e \u0435\u0441\u0442\u044c \u0438 \u043a\u043e\u0435-\u0447\u0442\u043e \u0435\u0449\u0451 &#8212; \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u0438\u0437 \u043f\u044f\u0442\u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0448\u0430\u0433\u043e\u0432:<\/p>\n<ol>\n<li>\n<p>\u0421\u043a\u0430\u0447\u0430\u0442\u044c Keil MDK-ARM \u0432\u0435\u0440\u0441\u0438\u0438 5.37 \u0438\u043b\u0438 \u0432\u044b\u0448\u0435;<\/p>\n<\/li>\n<li>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e;<\/p>\n<\/li>\n<li>\n<p>\u0421\u043a\u0430\u0447\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \/ \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c;<\/p>\n<\/li>\n<li>\n<p>\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u043f\u0430\u043f\u043a\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0444\u0430\u0439\u043b <code>keilprj\/led_string.uvprojx<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u043e\u0436\u0434\u0430\u0442\u044c, \u043f\u043e\u043a\u0430 \u0441\u0440\u0435\u0434\u0430 \u0441\u043a\u0430\u0447\u0430\u0435\u0442 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<\/li>\n<\/ol>\n<p>\u0412\u0441\u0451, \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0433\u043e\u0442\u043e\u0432\u043e. \u0414\u0430, \u0447\u0443\u0442\u044c \u043d\u0435 \u0437\u0430\u0431\u044b\u043b. \u042d\u0442\u043e \u0432\u0441\u0451 \u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e \u0434\u043b\u044f \u041e\u0421 Windows. \u0414\u043b\u044f \u043e\u0431\u043b\u0430\u0434\u0430\u0442\u0435\u043b\u0435\u0439 linux-\u043c\u0430\u0448\u0438\u043d \u0432\u0441\u0435 \u043d\u0435 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435 &#8212; Keil \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 Wine.<\/p>\n<h2>\u0416\u0435\u043b\u0435\u0437\u043e<\/h2>\n<p><strong>\u041d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f:<\/strong><\/p>\n<p>\u0421\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u0430\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u0430 \u043d\u0430 \u0431\u0430\u0437\u0435 max7219, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0445 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0443 max7219 \u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u0443 8&#215;8 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432.<\/p>\n<p>\u041f\u043b\u0430\u0442\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 nucleo-F103RB. \u041c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0447\u0442\u043e \u043f\u043e\u043f\u0440\u043e\u0449\u0435: blue-pill, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440. \u0410 \u0442\u043e \u0438 \u0432\u043e\u0432\u0441\u0435 \u0433\u043e\u043b\u044b\u0439 \u0447\u0438\u043f stm32f103 \u0441 \u043b\u044e\u0431\u044b\u043c\u0438 \u0431\u0443\u043a\u0432\u0430\u043c\u0438. \u041e\u0431\u0432\u044f\u0437\u043a\u0430 \u0447\u0438\u043f\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0442\u044c \u043f\u0438\u0442\u0430\u043d\u0438\u0435 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u0438\u043d\u0430\u043c PA5, PA6, PA7.<\/p>\n<p><strong>\u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e:<\/strong><\/p>\n<p>\u041f\u044f\u0442\u044c \u043f\u0440\u043e\u0432\u043e\u0434\u043e\u0432 \u0434\u043b\u044f \u0430\u0440\u0434\u0443\u0438\u043d\u043e-\u043c\u043e\u043d\u0442\u0430\u0436\u0430 \u0441 \u0440\u0430\u0437\u044a\u0451\u043c\u0430\u043c\u0438 \u043c\u0430\u043c\u0430-\u043c\u0430\u043c\u0430. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0432\u043e\u0434\u0430, \u0441\u043a\u043b\u0435\u0435\u043d\u043d\u044b\u0435 \u0432 \u0448\u043b\u0435\u0439\u0444. \u041d\u0430 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u044d\u0442\u043e \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0441\u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c\u0441\u044f \u0431\u0443\u0434\u0435\u0442 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u0435\u0439. \u0415\u0441\u043b\u0438 \u0432\u044b \u0440\u0435\u0448\u0438\u0442\u0435 \u044e\u0437\u0430\u0442\u044c blue-pill, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438\u043a\u043b\u0435\u0435\u043d\u043d\u044b\u0439 \u0441 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u0440\u043e\u043d\u044b LED-\u043c\u0430\u0442\u0440\u0438\u0446\u044b, \u0442\u043e \u0441 \u043f\u0440\u043e\u0432\u043e\u0434\u0430\u043c\u0438 \u0434\u0443\u043c\u0430\u044e \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u0442\u0435\u0441\u044c \u0441\u0430\u043c\u0438.<\/p>\n<p>\u041a\u0430\u0431\u0435\u043b\u044c USB-mini. \u041d\u0443\u0436\u0435\u043d \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043b\u0430\u0442\u044b nucleo. \u041f\u0438\u0448\u0443 \u043d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439, \u0442.\u043a. \u043a\u0430\u0431\u0435\u043b\u044c \u0438\u0437 \u043c\u043e\u0434\u044b \u0432\u044b\u0448\u0435\u043b \u0438 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u043c\u0435\u0441\u0442\u0435. \u041e\u043f\u044f\u0442\u044c \u0436\u0435, \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440 &#8212; \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0439\u0442\u0435 \u043f\u043e \u043e\u0431\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430\u043c.<\/p>\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440. ST-Link, J-Link \u0438 \u043f\u0440. \u042d\u0442\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0432\u043c\u0435\u0441\u0442\u043e nucleo \u0447\u0442\u043e-\u0442\u043e \u0442\u0430\u043a\u043e\u0435, \u043d\u0430 \u0447\u0451\u043c \u043d\u0430\u0431\u043e\u0440\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442.<\/p>\n<p>Arduino UNO. \u0415\u0441\u043b\u0438 \u0434\u0443\u0448\u0430 \u043a stm \u043d\u0435 \u043b\u0435\u0436\u0438\u0442, \u043d\u043e \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u041f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 \u043b\u044e\u0431\u0430\u044f \u0430\u0440\u0434\u0443\u0438\u043d\u043a\u0430.<\/p>\n<p><strong>\u0421\u0431\u043e\u0440\u043a\u0430<\/strong><\/p>\n<p>\u041f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0445\u0435\u043c\u0443 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0443\u0441\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u043f\u0440\u043e\u0432\u043e\u0434\u043e\u0432.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"217\" width=\"217\">\n<p align=\"left\">\u041a\u043e\u043d\u0442\u0430\u043a\u0442 \u043d\u0430 LED \u043c\u0430\u0442\u0440\u0438\u0446\u0435<\/p>\n<\/td>\n<td data-colwidth=\"244\" width=\"244\">\n<p align=\"left\">CN8, CN9 (CN10) \u043d\u0430 nucleo<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u043e\u0436\u043a\u0438 \u041c\u041a<\/p>\n<\/td>\n<td>\n<p align=\"left\">Arduino<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"217\" width=\"217\">\n<p align=\"left\">VCC<\/p>\n<\/td>\n<td data-colwidth=\"244\" width=\"244\">\n<p align=\"left\">5V (8)<\/p>\n<\/td>\n<td>\n<p align=\"left\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">5V<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"217\" width=\"217\">\n<p align=\"left\">GND<\/p>\n<\/td>\n<td data-colwidth=\"244\" width=\"244\">\n<p align=\"left\">GND (9)<\/p>\n<\/td>\n<td>\n<p align=\"left\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">GND<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"217\" width=\"217\">\n<p align=\"left\">DIN (MOSI)<\/p>\n<\/td>\n<td data-colwidth=\"244\" width=\"244\">\n<p align=\"left\">PWM\/MOSI\/D11 (15)<\/p>\n<\/td>\n<td>\n<p align=\"left\">PA7<\/p>\n<\/td>\n<td>\n<p align=\"left\">11<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"217\" width=\"217\">\n<p align=\"left\">CS (SS)<\/p>\n<\/td>\n<td data-colwidth=\"244\" width=\"244\">\n<p align=\"left\">MISO\/D12 (13)<\/p>\n<\/td>\n<td>\n<p align=\"left\">PA6<\/p>\n<\/td>\n<td>\n<p align=\"left\">10<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"217\" width=\"217\">\n<p align=\"left\">CLK (SCK)<\/p>\n<\/td>\n<td data-colwidth=\"244\" width=\"244\">\n<p align=\"left\">SCK\/D13 (11)<\/p>\n<\/td>\n<td>\n<p align=\"left\">PA5<\/p>\n<\/td>\n<td>\n<p align=\"left\">13<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/h2>\n<p>\u0418 \u0442\u0430\u043a, \u0436\u0435\u043b\u0435\u0437\u043a\u0430 \u043b\u0435\u0436\u0438\u0442 \u043d\u0430 \u0441\u0442\u043e\u043b\u0435, \u043f\u0440\u043e\u0435\u043a\u0442 \u043e\u0442\u043a\u0440\u044b\u0442. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e. \u041f\u0440\u043e\u0435\u043a\u0442 \u0438\u043c\u0435\u0435\u0442 \u0442\u0440\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0446\u0435\u043b\u0438 \u0441\u0431\u043e\u0440\u043a\u0438 (\u0442\u0430\u0440\u0433\u0435\u0442\u0430). \u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 &#8212; \u043e\u0434\u0438\u043d, \u043d\u043e \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0432\u0441\u0451 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443. \u041d\u0430\u0447\u043d\u0451\u043c \u0440\u0430\u0437\u0431\u043e\u0440 \u0441 \u0442\u0430\u0440\u0433\u0435\u0442\u0430 CMSIS_drv. \u0412 \u044d\u0442\u043e\u043c \u0442\u0430\u0440\u0433\u0435\u0442\u0435 \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u044b\u043c\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u0430: <code>main.c<\/code> &#8212; \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a; <code>max7219.c\/h<\/code> &#8212; \u044d\u0442\u043e \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b max7219; <code>spi.c\/csp.h<\/code> &#8212; \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 \u041c\u041a. \u0418\u0437 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 \u043c\u044b \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0434\u0443\u043b\u044c SPI. \u042d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0441\u0432\u044f\u0437\u043a\u0435 \u0441 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c <code>csp.h<\/code>. \u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0442\u0430\u043a, \u043e\u0431\u044a\u044f\u0441\u043d\u044e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0430\u0431\u0437\u0430\u0446\u0430\u043c\u0438 \u043d\u0438\u0436\u0435.<\/p>\n<p>\u041f\u043e \u0441\u0443\u0442\u0438 &#8212; \u044d\u0442\u0438 \u0442\u0440\u0438 \u0444\u0430\u0439\u043b\u0430 \u043e\u043b\u0438\u0446\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0442 \u0442\u0440\u0438 \u0441\u043b\u043e\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. Main &#8212; \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c. \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0444\u0438\u0448\u043a\u0438 \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0438\u0445 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u044b max7219. \u041d\u0438\u043a\u0442\u043e \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442 \u043d\u0430\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0443\u044e \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0443. \u041c\u043e\u0436\u0435\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0437\u044f\u0442\u044c \u0430\u0434\u0440\u0435\u0441\u043d\u044b\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u044b \u043d\u0430 WS2812b. \u041a\u043e\u0434 \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d. \u0417\u0434\u0435\u0441\u044c \u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043b\u0443\u043a\u0430\u0432\u043b\u044e. \u041a\u043e\u0434 \u0438\u0437 <code>main.c<\/code> \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 <code>max7219.c<\/code>. \u041b\u044e\u0431\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0432\u0435\u0441\u0442\u0438 \u0434\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u0430. \u041f\u0440\u0430\u0432\u0434\u0430, \u043d\u0430 \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u0430 \u0434\u043e 14 \u0444\u0435\u0432\u0440\u0430\u043b\u044f \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0432\u0441\u0435\u043c \u0447\u0443\u0442\u044c-\u0447\u0443\u0442\u044c.<\/p>\n<details class=\"spoiler\">\n<summary>\u0412\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u043a\u043e\u0434 main.c<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#include \"stm32f10x.h\" #include \"csp.h\" #include \"max7219.h\"  #if(1) \/\/\/ @brief \u041f\u043e\u0431\u0438\u0442\u043d\u043e\u0435 \u0437\u0435\u0440\u043a\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 4-\u0431\u0430\u0439\u0442\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 \/\/\/ @example 0x80000010 -> 0x08000001 #define RBIT(dw) __RBIT(dw) #else uint32_t RBIT(uint32_t in) {     uint32_t result = 0;          for (uint32_t i = 32; i; i--)     {         result &lt;&lt;= 1;         result |= (in &amp; 1);         in >>= 1;     }      return result; } #endif  \/\/\/ \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f typedef union {     uint32_t dw;     uint16_t w[2];     uint8_t  b[4]; } buf_str_t;  \/\/\/ \u041f\u043e\u043b\u043e\u0432\u0438\u043d\u043a\u0430 \"\u0441\u0435\u0440\u0434\u0446\u0430\" const uint8_t heart[STR_CNT] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x08, 0x88, 0x70};  \/\/\/ \u0411\u0443\u0444\u0435\u0440 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f buf_str_t img_buf[STR_CNT];  \/\/\/ \u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 static void load_img() {     for (uint32_t i = 0; ++i &lt;= STR_CNT;)     {         const uint32_t tmp = img_buf[i-1].dw;         max7219_send_data(i, tmp | RBIT(tmp));     }     csp_delay(16); }  \/\/\/ @brief \u042d\u0444\u0444\u0435\u043a\u0442 \u043f\u0443\u043b\u044c\u0441\u0430\u0446\u0438\u0438 (\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u044f\u0440\u043a\u043e\u0441\u0442\u0438) \/\/\/ @param cnt \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0443\u043b\u044c\u0441\u0430\u0446\u0438\u0439 static void pulse(const uint32_t cnt) {     for (uint32_t i = cnt; i-- > 0;)     {         for (uint32_t i = 0; ++i &lt; 0x20;)         {             max7219_send_cmd(MAX7219_BRIGHTNESS, i ^ (0xF * (i >> 4)));             csp_delay(2 &lt;&lt; (i >> 4));         }         csp_delay(200);     } }  \/** @defgroup Animation \u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438  *  @{ ********************************************************************************************\/  \/\/\/ \u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f typedef void(*step_t)(const uint32_t, const uint32_t);  \/\/\/ @brief \u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044e \/\/\/ @param j \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u0430\u0434\u0440\u043e\u0432 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \/\/\/ @param fn_p \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f void step(int8_t j, step_t fn_p) {     for (; j >= 0; j--)     {         for (int32_t i = STR_CNT; --i >= 0;)         {             fn_p(i, j);         }          load_img();     } }  \/\/\/ @brief \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \"\u043e\u0434\u043d\u043e \u0441\u0435\u0440\u0434\u0446\u0435\" \/\/\/ @param i \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438 \/\/\/ @param j \u043d\u043e\u043c\u0435\u0440 \u043a\u0430\u0434\u0440\u0430 void one_heart(const uint32_t i, const uint32_t j) {     img_buf[i].dw = (uint16_t)heart[i] &lt;&lt; 8 >> j; }  \/\/\/ @brief \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \"\u0434\u0432\u0430 \u0441\u0435\u0440\u0434\u0446\u0430\" \/\/\/ @param i \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438 \/\/\/ @param j \u043d\u043e\u043c\u0435\u0440 \u043a\u0430\u0434\u0440\u0430 void dbl_heart(const uint32_t i, const uint32_t j) {     img_buf[i].dw = ((uint32_t)heart[i] >> j) | (uint32_t)heart[i] &lt;&lt; (16 - j); }  \/\/\/ @brief \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \"\u0441\u043b\u0438\u044f\u043d\u0438\u0435 \u0441\u0435\u0440\u0434\u0435\u0446\" \/\/\/ @param i \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438 \/\/\/ @param j \u043d\u043e\u043c\u0435\u0440 \u043a\u0430\u0434\u0440\u0430 void uni_heart(const uint32_t i, const uint32_t j) {     (void)j;      img_buf[i].w[0] &lt;&lt;= 1;     img_buf[i].w[1] >>= 1; }  \/** @} ********************************************************************************************\/  \/\/\/ \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f __STATIC_FORCEINLINE void init() {     csp_spi_init();      csp_spi_nss_inactive();      \/\/ Base initialisation of MAX7219     max7219_send_cmd(MAX7219_TEST, 0x00); \/\/ 1 - on, 0 - off     max7219_send_cmd(MAX7219_SCAN_LIMIT, STR_CNT - 1);     max7219_send_cmd(MAX7219_BRIGHTNESS, 0x00); \/\/ 0x00..0x0F     max7219_send_cmd(MAX7219_DECODE_MODE, 0x00); \/\/ 0 - raw data     max7219_send_cmd(MAX7219_SHUTDOWN, 0x01); \/\/ 1 - active mode, 0 - inactive mode }  \/\/\/ @brief \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \/\/\/ @return \u041d\u0430\u0444\u0438\u0433 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d, \u043d\u043e \u043f\u0440\u043e\u0442\u0438\u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 \u043d\u0435 \u043f\u043e\u043f\u0440\u0435\u0448\u044c int main() {     init();      step(15, one_heart);     pulse(1);      step(7, dbl_heart);     pulse(2);      step(7, uni_heart);      \/\/ \u0417\u0430\u043b\u0438\u0432\u043a\u0430 \u043a\u043e\u043d\u0442\u0443\u0440\u043d\u043e\u0433\u043e \"\u0441\u0435\u0440\u0434\u0446\u0430\"     for (uint32_t j = 0; ++j &lt; 7;)     {         img_buf[j].dw |= img_buf[j - 1].dw;          load_img();     }      \/\/ \u0411\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e     for (;; pulse(1));      return 0; } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u0440\u043e\u0431\u0435\u0436\u0438\u043c\u0441\u044f \u043f\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043c. \u0414\u043b\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f &#171;\u0441\u0435\u0440\u0434\u0435\u0447\u043a\u0430&#187; \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430. \u041e\u043d\u0430 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c <code>heart<\/code>. \u041a\u0430\u0436\u0434\u044b\u0439 \u0431\u0430\u0439\u0442 \u044d\u0442\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0431\u0438\u0442\u043e\u0432\u0443\u044e \u043c\u0430\u0441\u043a\u0443 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u044b \u043a\u043e\u043d\u0442\u0443\u0440\u0430 &#171;\u0441\u0435\u0440\u0434\u0435\u0447\u043a\u0430&#187;. \u0422.\u043a. \u0444\u0438\u0433\u0443\u0440\u0430 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u0430, \u0432\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0434\u043e\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e, \u043f\u0443\u0442\u0451\u043c \u0437\u0435\u0440\u043a\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0432\u043e\u0439. \u0414\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c &#171;\u0432\u0438\u0434\u0435\u043e\u0431\u0443\u0444\u0435\u0440&#187; <code>img_buf<\/code> &#8212; \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u0437 \u0432\u043e\u0441\u044c\u043c\u0438 \u0442\u0440\u0438\u0434\u0446\u0430\u0442\u0438\u0434\u0432\u0443\u0445\u0431\u0438\u0442\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u041a\u0430\u0436\u0434\u044b\u0439 \u0431\u0438\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0443 \u0432 \u043c\u0430\u0442\u0440\u0438\u0446\u0435. \u0414\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0431\u0443\u0444\u0435\u0440\u0430 \u0432 \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>load_img<\/code>. \u042f \u043d\u0430\u0440\u043e\u0447\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u043b \u0431\u0443\u0444\u0435\u0440 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u043c, \u0438 \u0432\u043e \u0432\u0441\u0435\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0441 \u043d\u0438\u043c \u0432 \u044f\u0432\u043d\u043e\u043c \u0432\u0438\u0434\u0435. \u041c\u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u043c \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043a\u043e\u0434, \u0432 \u0442. \u0447. \u0438 \u043d\u0430 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438. \u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u043d\u0430 4 \u0431\u0430\u0439\u0442\u0430. \u0412 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0442\u0430\u043a\u043e\u0435 \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e, \u043c\u044b \u0436\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c. \u041d\u043e \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0442\u0430\u043a \u0432 \u043a\u043e\u0434\u0435, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0430\u043c \u043f\u043b\u0430\u0442\u044f\u0442 \u0434\u0435\u043d\u044c\u0433\u0438.<\/p>\n<p>\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432 <code>img_buf<\/code>. \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u0430\u0434\u0440\u043e\u0432, \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043a\u0430\u0434\u0440\u0435 \u043c\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0439 \u0441\u0446\u0435\u043d\u044b \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0434\u0432\u0430 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0446\u0438\u043a\u043b\u0430. \u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u0446\u0438\u043a\u043b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043d\u043e\u043c\u0435\u0440 \u043a\u0430\u0434\u0440\u0430 \u0432 \u0441\u0446\u0435\u043d\u0435, \u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 &#8212; \u043d\u043e\u043c\u0435\u0440 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438. \u0412 \u043a\u043e\u043d\u0446\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>load_img<\/code> \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u043c\u0430\u0442\u0440\u0438\u0446\u0435.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0430\u043c\u044b\u043c \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u043c, \u043d\u043e \u0432\u0441\u0451 \u0435\u0449\u0451 \u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u0432\u0448\u0438\u043c \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c \u0431\u044b\u043b \u0432\u044b\u0431\u0440\u0430\u043d \u0442\u0430\u043a\u043e\u0439: \u0446\u0438\u043a\u043b\u044b \u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0437\u0430\u0432\u0451\u0440\u043d\u0443\u0442\u044b \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0434\u0432\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430: \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u0430\u0434\u0440\u043e\u0432 \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438. \u0422\u0430\u043a\u043e\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0446\u0438\u043a\u043b\u043e\u0432 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0446\u0435\u043d\u044b \u0438 \u043d\u0430 \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u0438 \u0432 \u0442\u0440\u0438 \u0441\u0446\u0435\u043d\u044b \u0443\u0436\u0435 \u0434\u0430\u043b \u0432\u044b\u0438\u0433\u0440\u044b\u0448 \u0432 \u0434\u0435\u0441\u044f\u0442\u043e\u043a \u0431\u0430\u0439\u0442. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043a\u0430\u0436\u0434\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441\u0446\u0435\u043d\u044b \u0441\u0445\u043b\u043e\u043f\u043d\u0443\u043b\u0430\u0441\u044c \u0434\u043e \u0434\u0432\u0443\u0445-\u0442\u0440\u0451\u0445 \u0441\u0442\u0440\u043e\u0447\u0435\u043a \u043a\u043e\u0434\u0430, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0449\u0438\u0445 \u0441\u0443\u0442\u044c. \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a, \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441\u0446\u0435\u043d\u044b \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0434\u0432\u0443\u0445 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u043e\u043a \u0441\u0435\u0440\u0434\u0435\u0447\u043a\u0430, \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u0441 \u0434\u0432\u0443\u0445 \u0441\u0442\u043e\u0440\u043e\u043d \u043c\u0430\u0442\u0440\u0438\u0446\u044b:<\/p>\n<pre><code>\/\/\/ \u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f typedef void(*step_t)(const uint32_t, const uint32_t);  \/\/\/ @brief \u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044e \/\/\/ @param j \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u0430\u0434\u0440\u043e\u0432 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \/\/\/ @param fn_p \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f void step(int8_t j, step_t fn_p) {     for (; j >= 0; j--)     {         for (int32_t i = STR_CNT; --i >= 0;)         {             fn_p(i, j);         }          load_img();     } }  \/\/\/ @brief \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \"\u043e\u0434\u043d\u043e \u0441\u0435\u0440\u0434\u0446\u0435\" \/\/\/ @param i \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438 \/\/\/ @param j \u043d\u043e\u043c\u0435\u0440 \u043a\u0430\u0434\u0440\u0430 void one_heart(const uint32_t i, const uint32_t j) {     img_buf[i].dw = (uint16_t)heart[i] &lt;&lt; 8 >> j; }<\/code><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f main \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0434\u0440\u0430\u0439\u0432\u0435\u0440, \u0430 \u043f\u043e\u0442\u043e\u043c \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0446\u0435\u043d\u044b \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438. \u0412 \u043a\u043e\u043d\u0446\u0435 \u043e\u043d\u0430 \u043f\u0440\u043e\u0432\u0430\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0446\u0438\u043a\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f \u044d\u0444\u0444\u0435\u043a\u0442 &#171;\u0431\u044c\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u0441\u0435\u0440\u0434\u0446\u0430&#187;.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043a\u043e\u0434\u0435 \u0435\u0449\u0451 \u0435\u0441\u0442\u044c \u043a\u0443\u0434\u0430 \u0443\u0436\u0430\u0442\u044c\u0441\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u044c 4 \u0431\u0430\u0439\u0442\u0430 ROM, \u0443\u0434\u0430\u043b\u0438\u0432 \u043a\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 int main(). \u041d\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u043f\u0430\u0445\u043d\u0435\u0442 \u043f\u043e\u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430, \u0438 \u044f \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u043a\u043e\u0434 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0442\u0435\u0440\u044f\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0451\u0442 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430. \u041d\u0435 \u043c\u043e\u0433\u0443 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0432\u044b\u0436\u0430\u043b \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u0430\u0439\u0442, \u043d\u043e \u0442\u0430\u043a\u0438 \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0431\u044a\u0451\u043c\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0441\u0442\u0430\u043b\u0430 \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439. \u041d\u0430 \u041e\u0417\u0423 \u0442\u043e\u0436\u0435 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043b, \u043d\u043e \u0446\u0438\u0444\u0440\u044b &#8212; \u0432 \u043a\u043e\u043d\u0446\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>max7219.c &#8212; \u0441\u0430\u043c\u044b\u0439 \u043d\u0435\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0444\u0430\u0439\u043b<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>#include \"max7219.h\" #include \"csp.h\"  void max7219_send_cmd(const uint32_t cmd, const uint32_t data) {     csp_spi_nss_active();      for (uint32_t i = MATRX_CNT; i-- > 0;)     {         csp_spi_send((cmd &lt;&lt; 8) | data);     }      csp_spi_nss_inactive(); }  void max7219_send_data(const uint32_t str, const uint32_t data) {     csp_spi_nss_active();      for (int8_t i = MATRX_CNT; --i >= 0;)     {         csp_spi_send((str &lt;&lt; 8) | ((uint8_t *)&amp;data)[i]);     }      csp_spi_nss_inactive(); } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412 \u043d\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c\u044b\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 &#8212; \u043f\u043e\u0441\u043b\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043d\u0430 \u0432\u0441\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b max7219 \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e 32-\u0431\u0438\u0442\u043d\u043e\u0439 \u043c\u0430\u0441\u043a\u0435, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0439 \u0432 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0435.<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u0441 \u0436\u0434\u0451\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0436\u0435\u043b\u0435\u0437\u0430. \u0410 \u0432 \u0442\u0430\u0440\u0433\u0435\u0442\u0435 CMSIS_drv \u043c\u044b \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0435\u0433\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0432\u0441\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u0441\u0440\u0435\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u0436\u0435 \u043c\u044b \u0442\u0430\u043c \u043d\u0430\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u043b\u0438, \u0437\u0430\u0445\u043e\u0434\u0438\u043c \u0432 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f (Project->manage->run-time environment&#8230;) \u0438 \u0432\u0438\u0434\u0438\u043c \u0442\u0430\u043a\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u0443:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b10\/de5\/1b8\/b10de51b8d9d08eb4ea5d5711dd47fcd.png\" alt=\"\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 SMSIS\" title=\"\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 SMSIS\" width=\"646\" height=\"786\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b10\/de5\/1b8\/b10de51b8d9d08eb4ea5d5711dd47fcd.png\"\/><figcaption>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 SMSIS<\/figcaption><\/figure>\n<p>\u042d\u0442\u043e \u0432\u0441\u0451, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0432\u0435\u0441\u0442\u0438 SPI \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441. \u041d\u0443, \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0451. \u0412 \u0434\u0435\u0440\u0435\u0432\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0444\u0430\u0439\u043b RTE_Device.h \u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0435\u0433\u043e \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 Keil. \u042d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b Keil IDE \u043b\u044e\u0431\u0435\u0437\u043d\u043e \u043d\u0430\u043c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0430. \u041d\u0430\u0434\u043e \u0435\u0433\u043e \u0441\u043b\u0435\u0433\u043a\u0430 \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u043d\u0438\u0437\u0443 \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0432\u043a\u043b\u0430\u0434\u043a\u0443 &#171;Configuration Wizard&#187; \u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f \u043d\u0430 \u043d\u0435\u0451. \u0412\u043e\u0442 \u044d\u0442\u043e \u0434\u0430! \u0424\u0430\u0439\u043b \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0441\u044f \u0432 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u043c\u0435\u043d\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438. \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0432\u044b\u0432\u043e\u0434\u044b SPI, \u043a\u0430\u043a \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c7f\/f7e\/21b\/c7ff7e21b6b75375e7166e6612b3186b.png\" alt=\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 SPI \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\" title=\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 SPI \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\" width=\"729\" height=\"515\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c7f\/f7e\/21b\/c7ff7e21b6b75375e7166e6612b3186b.png\"\/><figcaption>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 SPI \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430<\/figcaption><\/figure>\n<p>\u041a\u0430\u043a \u0434\u0443\u043c\u0430\u0435\u0442\u0435, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0434\u0430 \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0440\u0443\u0447\u043a\u0430\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0432\u0435\u0441\u0442\u0438 SPI? \u0412\u043e\u0442 \u0441\u0442\u043e\u043b\u044c\u043a\u043e:<\/p>\n<pre><code>#include \"RTE_Components.h\" #include CMSIS_device_header #include \"Driver_SPI.h\"  extern ARM_DRIVER_SPI Driver_SPI1; \/\/\/&lt; SPI Driver external  ARM_DRIVER_SPI *SPIdrv = &amp;Driver_SPI1; \/\/\/&lt; SPI Driver pointer  void csp_spi_init() {     \/* Initialize the SPI driver *\/     SPIdrv->Initialize(NULL);     \/* Power up the SPI peripheral *\/     SPIdrv->PowerControl(ARM_POWER_FULL);     \/* Configure the SPI to Master *\/     SPIdrv->Control(0                     | ARM_SPI_MODE_MASTER                     | ARM_SPI_CPOL0_CPHA0                     | ARM_SPI_MSB_LSB                     | ARM_SPI_SS_MASTER_SW                     | ARM_SPI_DATA_BITS(16),                     1000000);      SPIdrv->Control(ARM_SPI_CONTROL_SS, ARM_SPI_SS_INACTIVE); }<\/code><\/pre>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043d\u043e\u0436\u0435\u043a, \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u043e\u0432 \u0438 \u043f\u0440. CMSIS \u0432\u043e\u0437\u044c\u043c\u0435\u0442 \u043d\u0430 \u0441\u0435\u0431\u044f.<\/p>\n<details class=\"spoiler\">\n<summary>\u0412\u0435\u0441\u044c \u0444\u0430\u0439\u043b spi.c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a.<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>#include \"RTE_Components.h\" #include CMSIS_device_header  #include \"Driver_SPI.h\"  \/\/\/ SPI Driver external extern ARM_DRIVER_SPI Driver_SPI1;  \/\/\/ SPI Driver pointer ARM_DRIVER_SPI *SPIdrv = &amp;Driver_SPI1;  void csp_delay(const uint8_t del) {     for (volatile uint32_t i = 0xFFF * del; i != 0; i--); }  void csp_spi_init() {     \/* Initialize the SPI driver *\/     SPIdrv->Initialize(NULL);     \/* Power up the SPI peripheral *\/     SPIdrv->PowerControl(ARM_POWER_FULL);     \/* Configure the SPI to Master *\/     SPIdrv->Control(0                     | ARM_SPI_MODE_MASTER                     | ARM_SPI_CPOL0_CPHA0                     | ARM_SPI_MSB_LSB                     | ARM_SPI_SS_MASTER_SW                     | ARM_SPI_DATA_BITS(16),                     1000000);      SPIdrv->Control(ARM_SPI_CONTROL_SS, ARM_SPI_SS_INACTIVE); }  void csp_spi_nss_active() {     SPIdrv->Control(ARM_SPI_CONTROL_SS, ARM_SPI_SS_ACTIVE); }  void csp_spi_nss_inactive() {     while (SPIdrv->GetStatus().busy);     SPIdrv->Control(ARM_SPI_CONTROL_SS, ARM_SPI_SS_INACTIVE); }  void csp_spi_send(const uint32_t data) {     SPIdrv->Send(&amp;data, 1);     while (SPIdrv->GetStatus().busy); } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0415\u0449\u0451 \u043e\u0434\u0438\u043d \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043b\u044e\u0431\u0435\u0437\u043d\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u043d\u0430\u043c Keil IDE \u0438 \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u044d\u0442\u043e startup_stm32f10x_md.s, \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u0430\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u0440\u0430\u0437\u043c\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0435\u043a\u0430 \u0438 \u043a\u0443\u0447\u0438. \u041a\u0443\u0447\u0443 \u043c\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c, \u0430 \u0441\u0442\u0435\u043a\u0430 \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e 208 \u0431\u0430\u0439\u0442 (0xD0). \u0412\u0438\u0434\u0438\u0442\u0435, \u043a\u0430\u043a\u0438\u0435 \u043c\u044b \u044d\u043a\u043e\u043d\u043e\u043c\u043d\u044b\u0435.<\/p>\n<h2>\u041f\u0440\u043e\u0448\u0438\u0432\u043a\u0430<\/h2>\n<p>\u041d\u0443, \u0447\u0442\u043e \u0436\u0435, \u043f\u043e\u0440\u0430 \u0443\u0436\u0435 \u0437\u0430\u0432\u043e\u0434\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0431\u0430\u043b\u0430\u0433\u0430\u043d. \u0416\u043c\u0451\u043c F7, \u0438 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0443 \u0441\u0435\u043a\u0443\u043d\u0434 \u0442\u0430\u0440\u0433\u0435\u0442 \u0441\u043e\u0431\u0440\u0430\u043d. \u041f\u043e\u0434\u0442\u044b\u043a\u0430\u0435\u043c \u0432 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 USB \u0440\u0430\u0437\u044a\u0435\u043c \u043d\u0430\u0448\u0443 nucleo-F103RB. \u0416\u043c\u0451\u043c Alt+F7 \u0438 \u0432 \u043e\u0442\u043a\u0440\u044b\u0432\u0448\u0435\u043c\u0441\u044f \u0434\u0438\u0430\u043b\u043e\u0433\u0435 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u043a\u043b\u0430\u0434\u043a\u0443 Debug. \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u044b \u0434\u0435\u0431\u0430\u0433\u0433\u0435\u0440 ST-Link \u0438 \u0435\u0441\u043b\u0438 \u0432\u0441\u0451 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043b\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443. \u041c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0436\u0430\u0442\u044c F8, \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0443\u043b\u0435\u0442\u0438\u0442 \u0432 nucleo \u0438 \u043f\u043e\u0440\u0430\u0434\u0443\u0435\u0442 \u0432\u0430\u0441 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0435\u0439. \u0415\u0441\u043b\u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432\u044b \u0432\u0441\u0451 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0438. \u0415\u0441\u043b\u0438 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u043e\u043a\u043e\u0432\u044b\u0440\u044f\u0442\u044c\u0441\u044f \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 \u041c\u041a, \u0442\u043e\u0433\u0434\u0430 \u0432\u0430\u043c \u043f\u0440\u044f\u043c\u0430\u044f \u0434\u043e\u0440\u043e\u0433\u0430 \u0432 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a: Ctrl+F5, \u0430 \u0442\u0430\u043c \u0443\u0436 \u043a\u0430\u043a-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u0430\u043c\u0438.<\/p>\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/63e141ba396453e034463ca1\" data-style=\"\" id=\"63e141ba396453e034463ca1\" width=\"\"><\/div>\n<h2>\u0421\u0440\u0435\u0437\u0430\u0435\u043c \u0436\u0438\u0440\u043e\u043a<\/h2>\n<p>\u0415\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0432\u044b\u0432\u043e\u0434 \u043b\u0438\u043d\u043a\u0435\u0440\u0430, \u0442\u043e \u0443\u0432\u0438\u0434\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code class=\"cpp\">Program Size: Code=9032 RO-data=392 RW-data=20 ZI-data=292<\/code><\/pre>\n<p>\u041c\u0435\u043d\u044c\u0448\u0435 \u0434\u0435\u0441\u044f\u0442\u0438 \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442! \u0412 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0444\u043e\u043d\u0430\u0440\u0438\u043a\u0430 \u043d\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u043c\u043e\u0440\u0433\u043d\u0443\u0432 LED&#8217;\u043e\u043c \u0441\u0445\u0430\u0432\u0430\u0442\u044c \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442 10 &#8212; \u0437\u0432\u0443\u0447\u0438\u0442 \u043d\u0435\u043f\u043b\u043e\u0445\u043e.. \u0418\u043b\u0438 \u043f\u043b\u043e\u0445\u043e. \u0412\u0441\u0451 \u043f\u043e\u0437\u043d\u0430\u0451\u0442\u0441\u044f \u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438. \u041f\u043e\u043c\u0435\u043d\u044f\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438\u0433\u0440\u044b &#8212; \u043e\u0442\u043a\u0430\u0436\u0435\u043c\u0441\u044f \u043e\u0442 \u043c\u043e\u0434\u043d\u043e\u0433\u043e SPI \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430. \u0421\u043d\u043e\u0432\u0430 \u0437\u0430\u0445\u043e\u0434\u0438\u043c \u0432 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0432\u0441\u0451 \u043b\u0438\u0448\u043d\u0435\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/753\/72c\/55e\/75372c55e5803870a5fa653cc8a60820.png\" alt=\"\u0412\u0441\u0451 \u043b\u0438\u0448\u043d\u0435\u0435 \u043e\u0431\u0432\u0435\u0434\u0435\u043d\u043e \u043a\u0440\u0430\u0441\u043d\u044b\u043c\" title=\"\u0412\u0441\u0451 \u043b\u0438\u0448\u043d\u0435\u0435 \u043e\u0431\u0432\u0435\u0434\u0435\u043d\u043e \u043a\u0440\u0430\u0441\u043d\u044b\u043c\" width=\"646\" height=\"786\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/753\/72c\/55e\/75372c55e5803870a5fa653cc8a60820.png\"\/><figcaption>\u0412\u0441\u0451 \u043b\u0438\u0448\u043d\u0435\u0435 \u043e\u0431\u0432\u0435\u0434\u0435\u043d\u043e \u043a\u0440\u0430\u0441\u043d\u044b\u043c<\/figcaption><\/figure>\n<p>\u041c\u044b \u0432\u0441\u0451 \u0435\u0449\u0451 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c CMSIS, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0438\u0436\u043d\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c &#8212; \u0444\u0430\u0439\u043b\u044b \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <code>startup_stm32f10x_md.s<\/code> \u0438 <code>system_stm32f10x.c<\/code>. \u0420\u0430\u0431\u043e\u0442\u0443 \u0441 SPI \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e. \u0423 \u043d\u0430\u0441 \u044d\u0442\u043e \u0444\u0430\u0439\u043b <code>spi.c<\/code>, \u043f\u043e\u043c\u043d\u0438\u0442\u0435? \u041d\u043e \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0451 \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0443\u0442\u0430\u0442\u044c, \u043c\u044b \u043e\u0441\u0442\u0430\u0432\u0438\u043c <code>spi.c<\/code> \u0434\u043b\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0430 \u043a \u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043d\u043e\u0432\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e &#8212; \u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445. \u041d\u0430\u0437\u043e\u0432\u0435\u043c \u044d\u0442\u043e Chip Support Package (\u043f\u043e\u043c\u043d\u0438\u0442\u0435, \u0447\u0442\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0443 \u043d\u0430\u0441 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>csp.h<\/code>?). \u041e\u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0447\u0443\u0442\u044c \u0434\u043b\u0438\u043d\u043d\u0435\u0435, \u0447\u0435\u043c \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 SPI \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0442\u0430\u043a:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#include \"stm32f10x.h\"  #define NSS_PORT  GPIOA \/\/\/&lt; \u0410\u0434\u0440\u0435\u0441 \u043f\u043e\u0440\u0442\u0430 SS (CS) #define NSS_PIN   (6)   \/\/\/&lt; \u041d\u043e\u043c\u0435\u0440 \u043f\u0438\u043d\u0430 SS (CS) #define SCK_PORT  GPIOA \/\/\/&lt; \u0410\u0434\u0440\u0435\u0441 \u043f\u043e\u0440\u0442\u0430 SCK (CLK) #define SCK_PIN   (5)   \/\/\/&lt; \u041d\u043e\u043c\u0435\u0440 \u043f\u0438\u043d\u0430 SCK (CLK) #define MOSI_PORT GPIOA \/\/\/&lt; \u0410\u0434\u0440\u0435\u0441 \u043f\u043e\u0440\u0442\u0430 MOSI (DIN) #define MOSI_PIN  (7)   \/\/\/&lt; \u041d\u043e\u043c\u0435\u0440 \u043f\u0438\u043d\u0430 MOSI (DIN)  \/\/\/ Port Mode typedef enum {     GPIO_MODE_INPUT     = 0x00, \/\/\/&lt; GPIO is input     GPIO_MODE_OUT10MHZ  = 0x01, \/\/\/&lt; Max output Speed 10MHz     GPIO_MODE_OUT2MHZ   = 0x02, \/\/\/&lt; Max output Speed  2MHz     GPIO_MODE_OUT50MHZ  = 0x03  \/\/\/&lt; Max output Speed 50MHz } GPIO_MODE;  \/\/\/ Port Conf typedef enum {     GPIO_OUT_PUSH_PULL  = 0x00, \/\/\/&lt; general purpose output push-pull     GPIO_OUT_OPENDRAIN  = 0x01, \/\/\/&lt; general purpose output open-drain     GPIO_AF_PUSHPULL    = 0x02, \/\/\/&lt; alternate function push-pull     GPIO_AF_OPENDRAIN   = 0x03, \/\/\/&lt; alternate function open-drain     GPIO_IN_ANALOG      = 0x00, \/\/\/&lt; input analog     GPIO_IN_FLOATING    = 0x01, \/\/\/&lt; input floating     GPIO_IN_PULL_DOWN   = 0x02, \/\/\/&lt; alternate function push-pull     GPIO_IN_PULL_UP     = 0x03  \/\/\/&lt; alternate function pull up } GPIO_CONF;  #define CONF_CLR(pin) (0xF &lt;&lt; ((pin) &lt;&lt; 2)) #define CONF_SET(pin, conf) ((((conf) &lt;&lt; 2) | GPIO_MODE_OUT50MHZ) &lt;&lt; ((pin) &lt;&lt; 2))  #define BITBANDING_ADDR_CALC(ADDR, BYTE)       \\     ((uint32_t)(ADDR) &amp; 0xF0000000UL) +        \\     (((uint32_t)(ADDR) &amp; 0x00FFFFFFUL) &lt;&lt; 5) + \\     0x02000000UL + ((BYTE) &lt;&lt; 2) #define BB_REG(ADDR, BYTE) (*(volatile uint32_t *)(BITBANDING_ADDR_CALC(ADDR, BYTE)))  void csp_delay(const uint32_t del) {     for (volatile uint32_t i = del &lt;&lt; 12; --i;); }  void csp_spi_init() {     \/\/ GPIO init     RCC->APB2ENR |= RCC_APB2ENR_AFIOEN | RCC_APB2ENR_IOPAEN | RCC_APB2ENR_SPI1EN;     GPIOA->CRL &amp;= ~(CONF_CLR(NSS_PIN) | CONF_CLR(SCK_PIN) | CONF_CLR(MOSI_PIN));     GPIOA->CRL |= CONF_SET(NSS_PIN, GPIO_OUT_PUSH_PULL) | CONF_SET(SCK_PIN, GPIO_AF_PUSHPULL) | CONF_SET(MOSI_PIN, GPIO_AF_PUSHPULL);      \/\/ SPI1 init MODE_MASTER, CPOL0, CPHA0, MSB_LSB, DATA_16_BITS, Max speed     SPI1->CR1 = SPI_CR1_MSTR  | SPI_CR1_SSI | SPI_CR1_SSM | SPI_CR1_DFF | SPI_CR1_SPE; }  void csp_spi_nss_active() {     NSS_PORT->BRR = (1UL &lt;&lt; NSS_PIN); }  void csp_spi_nss_inactive() {     while (BB_REG(&amp;(SPI1->SR), 7)); \/\/ SPI_SR_BSY     NSS_PORT->BSRR = (1UL &lt;&lt; NSS_PIN); }  void csp_spi_send(const uint32_t data) {     while (!BB_REG(&amp;(SPI1->SR), 1)); \/\/ SPI_SR_TXE     SPI1->DR = data; }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0417\u0434\u0435\u0441\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u0430\u043a\u0440\u043e\u0441<\/p>\n<pre><code class=\"cpp\">#define BITBANDING_ADDR_CALC(ADDR, BYTE)       \\     ((uint32_t)(ADDR) &amp; 0xF0000000UL) +        \\     (((uint32_t)(ADDR) &amp; 0x00FFFFFFUL) &lt;&lt; 5) + \\     0x02000000UL + ((BYTE) &lt;&lt; 2) #define BB_REG(ADDR, BYTE) (*(volatile uint32_t *)(BITBANDING_ADDR_CALC(ADDR, BYTE)))<\/code><\/pre>\n<p>\u041d\u0435 \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c 4-8 \u0431\u0430\u0439\u0442. \u041d\u043e \u043e\u043d \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 <a href=\"https:\/\/developer.arm.com\/documentation\/ddi0337\/h\/programmers-model\/bit-banding\" rel=\"noopener noreferrer nofollow\">bit banding<\/a>. \u0427\u0442\u043e \u044d\u0442\u043e \u0437\u0430 \u0437\u0432\u0435\u0440\u044c \u0442\u0430\u043a\u043e\u0439? \u042d\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u041e\u0417\u0423 \u0438\u043b\u0438 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0430\u0434\u0440\u0435\u0441\u043e\u0432. \u041d\u043e \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0437\u0435\u0440\u043a\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u0412 \u044d\u0442\u043e\u0439 \u043d\u043e\u0432\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u0431\u0438\u0442\u0443 \u041e\u0417\u0423 \u0432\u044b\u0434\u0435\u043b\u0435\u043d \u0446\u0435\u043b\u044b\u0439 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u0431\u0438\u0442\u0443, \u043a\u0430\u043a \u043a 32-\u0440\u0430\u0437\u0440\u044f\u0434\u043d\u043e\u043c\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0442\u0435-\u0436\u0435 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432 \u0441\u0442\u0430\u0440\u0448\u0438\u0445 \u0440\u0430\u0437\u0440\u044f\u0434\u0430\u0445 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0443\u0442 \u043d\u0443\u043b\u0438, \u0430 \u043c\u043b\u0430\u0434\u0448\u0438\u0439 \u0440\u0430\u0437\u0440\u044f\u0434 &#8212; \u043a\u0430\u043a \u0440\u0430\u0437 \u0438 \u0435\u0441\u0442\u044c \u043d\u0430\u0448 \u0431\u0438\u0442. \u042d\u0442\u043e \u0434\u0438\u043a\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043f\u043e\u043b\u044f\u043c\u0438 \u0438 \u0444\u043b\u0430\u0433\u0430\u043c\u0438 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430, \u0447\u0442\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043d\u0430 \u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438, \u0442\u0430\u043a \u0438 \u043d\u0430 \u043e\u0431\u044a\u0451\u043c\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<\/p>\n<p>\u041d\u0443 \u0438 \u0437\u0430\u0447\u0435\u043c \u0442\u0430\u043a \u043c\u0443\u0447\u0430\u0442\u044c\u0441\u044f, \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u0435 \u0432\u044b? \u0410 \u0432\u043e\u0442 \u0437\u0430\u0447\u0435\u043c:<\/p>\n<pre><code class=\"cpp\">Before Program Size: Code=9032 RO-data=392 RW-data=20 ZI-data=292 After Program Size: Code=1296 RO-data=260 RW-data=0  ZI-data=240  <\/code><\/pre>\n<p>\u041e\u0433\u043e, \u0443\u0436\u0430\u043b\u0438\u0441\u044c \u0432 \u0448\u0435\u0441\u0442\u044c \u0440\u0430\u0437. \u041d\u0435\u043f\u043b\u043e\u0445\u043e, \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430. \u0410 \u0447\u0442\u043e \u043c\u044b \u0435\u0449\u0451 \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u0440\u0435\u0437\u0430\u0442\u044c? \u0423 \u043d\u0430\u0441 \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c ZI \u0434\u0430\u043d\u043d\u044b\u0435. \u042d\u0442\u043e \u0442\u0430\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043d\u0443\u043b\u044f\u043c\u0438 \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0449\u0438\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u0441\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 &#8212; main. \u041d\u043e \u043d\u0430\u043c \u044d\u0442\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0435 \u043d\u0443\u0436\u043d\u0430. \u0410 \u0435\u0449\u0451 \u043c\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f, \u0430 \u0432 \u0444\u0430\u0439\u043b\u0435 <code>startup_stm32f10x_md.s<\/code> \u0446\u0435\u043b\u0430\u044f \u0437\u0434\u043e\u0440\u043e\u0432\u0435\u043d\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432. \u0414\u0430\u0432\u0430\u0439\u0442\u0435-\u043a\u0430 \u0438 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0432\u0441\u0435\u0433\u043e \u0438\u0437\u0431\u0430\u0432\u0438\u043c\u0441\u044f.<\/p>\n<h2>\u041e\u0431\u0433\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u0441\u0442\u0438<\/h2>\n<p>\u041e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0432 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0432\u0441\u0451, \u043a\u0440\u043e\u043c\u0435 CMSIS Core. \u041c\u044b \u0436\u0435 \u043d\u0435 \u0445\u043e\u0442\u0438\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u0445\u0430\u0440\u0434\u043a\u043e\u0440\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432\u043c\u0435\u0441\u0442\u043e \u0438\u043c\u0451\u043d \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432? \u0417\u0430\u0432\u0435\u0442\u043d\u044b\u0439 <code>startup_stm32f10x_md.s<\/code> \u0438\u0441\u0447\u0435\u0437\u0430\u0435\u0442, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u0441\u0442\u0435\u043a, \u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e. \u041f\u043e\u0435\u0445\u0430\u043b\u0438!<\/p>\n<p>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043d\u0430\u0448\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">typedef volatile const struct {     const void *const sp; \/\/\/&lt; \u0423\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u0441\u0442\u0435\u043a\u0430     int (*main)(void); \/\/\/&lt; \u0412\u0435\u043a\u0442\u043e\u0440 \u0441\u0431\u0440\u043e\u0441\u0430 } vectors_t;<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435 \u043f\u043e\u043b\u0435 &#8212; \u044d\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u0441\u0442\u0435\u043a\u0430, \u0430 \u0432\u0442\u043e\u0440\u043e\u0435 &#8212; \u0432\u0435\u043a\u0442\u043e\u0440 \u0441\u0431\u0440\u043e\u0441\u0430 &#8212; \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d. \u0411\u0435\u0437 \u043d\u0435\u0433\u043e \u043d\u0438\u043a\u0430\u043a. \u0421\u0442\u0435\u043a &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432 \u0431\u0430\u0439\u0442\u043e\u0432 \u0432 \u041e\u0417\u0423, \u0430 \u043f\u0440\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u044b \u0438 \u0442\u0430\u043a \u0432\u0441\u0451 \u0437\u043d\u0430\u0435\u0442\u0435. \u0412\u0435\u0441\u044c \u0444\u0430\u0439\u043b <code>startup.c<\/code> \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0442\u0430\u043a\u0438\u043c:<\/p>\n<pre><code>#include &lt;stdint.h>  \/\/\/ \u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0435\u043a\u0430. \u0414\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043a\u0440\u0430\u0442\u0435\u043d 8 \u0431\u0430\u0439\u0442\u0430\u043c. #define STACK_SIZE (0x68)  \/\/\/ @brief \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 typedef volatile const struct {     const void *const sp; \/\/\/&lt; \u0423\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u0441\u0442\u0435\u043a\u0430     int (*main)(void); \/\/\/&lt; \u0412\u0435\u043a\u0442\u043e\u0440 \u0441\u0431\u0440\u043e\u0441\u0430 } vectors_t;  \/\/\/ \u0421\u0442\u0435\u043a. \u0414\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043a\u0440\u0430\u0442\u0435\u043d 8 \u0431\u0430\u0439\u0442\u0430\u043c. volatile uint64_t stack[STACK_SIZE \/ sizeof(uint64_t)];  \/\/\/ @brief \u0423\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u0441\u0442\u0435\u043a\u0430. \/\/\/ @details \u0421\u0442\u0435\u043a \u0440\u0430\u0441\u0442\u0435\u0442 \u0441\u0432\u0435\u0440\u0445\u0443 \u0432\u043d\u0438\u0437. const void *const __initial_sp = (void *)((uint32_t)stack + sizeof(stack));  \/\/\/ @brief \u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f extern int main();  \/\/\/ @brief \u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 vectors_t vectors __attribute__((section(\"reset\"))) = {     .sp = __initial_sp,     .main = main, };<\/code><\/pre>\n<p>\u0414\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 <code>__attribute__((section(\"reset\")))<\/code> \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043b\u0438\u043d\u043a\u0435\u0440\u0443, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0430\u0431\u044b \u0433\u0434\u0435, \u0430 \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438, \u0438\u043c\u0435\u044e\u0449\u0435\u0439 \u0438\u043c\u044f &#171;reset&#187;. \u042d\u0442\u043e \u043c\u044b \u0442\u0430\u043a \u043d\u0430\u0437\u0432\u0430\u043b\u0438 \u0441\u0435\u043a\u0446\u0438\u044e, \u0441\u043e \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c <code>0x08000000<\/code>. \u0410\u0434\u0440\u0435\u0441 \u043d\u0430\u0447\u0430\u043b\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u0432 \u043d\u0430\u0448\u0435\u043c \u041c\u041a. \u0410 \u043a\u0430\u043a \u043b\u0438\u043d\u043a\u0435\u0440 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442 \u0438\u043c\u044f \u0438 \u0430\u0434\u0440\u0435\u0441? \u0410 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443 \u043d\u0430\u0441 \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 scatter-\u0444\u0430\u0439\u043b. \u041a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">LR_IROM1 0x08000000 0x00020000  {   ER_IROM1 0x08000000 0x00020000  {    *.o (reset, +First)    .ANY (+RO)    .ANY (+XO)   }   RW_IRAM1 0x20000000 UNINIT 0x5000 {    .ANY (+RW)    .ANY (+ZI)   } }<\/code><\/pre>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u043c\u044b \u0435\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u043c, \u0435\u0441\u0442\u044c <a href=\"https:\/\/developer.arm.com\/documentation\/dui0474\/m\/scatter-file-syntax\/syntax-of-a-scatter-file\" rel=\"noopener noreferrer nofollow\">\u0432\u0441\u044f\u043a\u0438\u0435 \u043c\u0430\u043d\u0443\u0430\u043b\u044b<\/a> \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443. \u0412\u0438\u0434\u0438\u0442\u0435 \u0438\u043c\u044f \u0441\u0435\u043a\u0446\u0438\u0438 &#171;reset&#187;? \u0412\u043e\u0442 \u044d\u0442\u0430 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0441\u0435\u043a\u0446\u0438\u044f \u0438 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0430\u0448\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432. \u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e <code>+First<\/code> \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u0435\u043a\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u043f\u0435\u0440\u0432\u043e\u0439 \u0432 \u0440\u0435\u0433\u0438\u043e\u043d\u0435 <code>ER_IROM1<\/code>, \u0431\u0435\u0440\u0443\u0449\u0438\u043c \u0441\u0432\u043e\u0451 \u043d\u0430\u0447\u0430\u043b\u043e \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <code>0x08000000<\/code>. \u0422\u043e, \u0447\u0442\u043e \u0434\u043e\u043a\u0442\u043e\u0440 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043b. \u0414\u0430, \u0440\u0435\u0433\u0438\u043e\u043d \u041e\u0417\u0423 &#8212; <code>RW_IRAM1<\/code> &#8212; \u043f\u043e\u043c\u0435\u0442\u0438\u043c \u043a\u0430\u043a <code>UNINIT<\/code>. \u0420\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0432 \u043d\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0430 \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0441\u0442\u0435\u043a \u0438 &#171;\u0432\u0438\u0434\u0435\u043e\u0431\u0443\u0444\u0435\u0440&#187; &#8212; \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043d\u0443\u043b\u044f\u043c\u0438 \u0438\u043b\u0438 \u0447\u0435\u043c \u043b\u0438\u0431\u043e \u0435\u0449\u0451. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0431\u043e\u0433 \u0437\u043d\u0430\u0435\u0442 \u0447\u0442\u043e, \u043d\u043e \u043c\u044b \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u043c\u043d\u0438\u043c \u0438 \u0440\u0443\u0447\u043a\u0430\u043c\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0432\u0441\u0451 \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 &#8212; \u043d\u0438\u0447\u0435\u0433\u043e.<\/p>\n<p>F7, \u043f\u043e\u0433\u043d\u0430\u043b\u0438. \u0427\u0442\u043e \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0432 \u0438\u0442\u043e\u0433\u0435 \u043d\u0430\u0448\u0438\u0445 \u0438\u0437\u0434\u0435\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432? \u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code class=\"cpp\">Program Size: Code=900 RO-data=20 RW-data=0 ZI-data=136<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u044d\u0442\u043e \u0443\u0436\u0435 \u0445\u043e\u0440\u043e\u0448\u043e! \u041d\u0435 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u043d\u0435\u043b\u044c\u0437\u044f. \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e. \u0412\u044b\u0441\u0442\u0430\u0432\u0438\u043c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u043f\u043e \u043e\u0431\u044a\u0451\u043c\u0443 \u043a\u043e\u0434\u0430 \u0438 \u043d\u0435 \u043c\u0435\u043d\u044f\u044f \u043d\u0438 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043c:<\/p>\n<pre><code class=\"cpp\">Program Size: Code=616 RO-data=20 RW-data=0 ZI-data=136<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a \u0443\u0436\u0435 \u0431\u043b\u0438\u0437\u043a\u043e, \u0430 \u0432\u0435\u0434\u044c \u043d\u0430\u0434\u043e \u0435\u0449\u0451 \u0437\u0430 \u043f\u043e\u0434\u0430\u0440\u043a\u0430\u043c\u0438 \u0443\u0441\u043f\u0435\u0442\u044c.<\/p>\n<h2>\u0412\u044b\u0432\u043e\u0434\u044b<\/h2>\n<p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 &#8212; \u043b\u0435\u0433\u043a\u043e \u0438 \u043f\u0440\u0438\u044f\u0442\u043d\u043e. \u0413\u043b\u044e\u043a\u043e\u0432 \u0432 \u0442\u043e\u043c-\u0436\u0435 HAL&#8217;\u0435 \u044f \u043d\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u043b \u043d\u0435 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0438\u0445 \u0442\u0430\u043c \u043d\u0435\u0442, \u0430 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0438\u0445 \u0437\u0430 \u043c\u0435\u043d\u044f \u0443\u0436\u0435 \u043d\u0430\u0448\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0435. \u0412\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u044b, \u0432\u0440\u043e\u0434\u0435 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438\u0437 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 &#8212; \u043b\u044e\u0442\u043e\u0435 \u0437\u043b\u043e, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u043d\u0430 \u043f\u0440\u043e\u0434. \u0414\u0430, \u0435\u0441\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u0435\u0441\u0442\u044c \u0441\u0443\u043f\u0435\u0440\u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435 \u043a\u0430\u043c\u043d\u0438, \u0434\u0440\u0435\u0432\u043d\u0438\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0434\u043e \u0432\u043f\u0438\u0445\u043d\u0443\u0442\u044c &#171;\u0442\u0443\u0434\u0430, \u0433\u0434\u0435 \u0431\u044b\u043b, \u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c USB&#187;, \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0440\u0430\u0437 \u0432 \u043f\u043e\u043b\u0433\u043e\u0434\u0430, \u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0437\u0430 \u0434\u043e\u043b\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u0412 \u0442\u0430\u043a\u0438\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445 \u0438 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043e\u043c \u043d\u0435 \u0433\u0440\u0435\u0445 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u0418\u043c\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0440\u0435\u0434\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u043f\u043e\u043b\u0435\u0437\u043d\u044b \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u044f. \u0410 \u0432 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u043c\u043d\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u0430\u0448 \u043a\u043e\u0434 \u0431\u0443\u0434\u0443\u0442 \u0447\u0438\u0442\u0430\u0442\u044c \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0447\u0430\u0449\u0435, \u0447\u0435\u043c \u0432\u044b \u0435\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u0442\u044c. \u041b\u044e\u0431\u0438\u0442\u0435 \u0431\u043b\u0438\u0436\u043d\u0438\u0445, \u043a\u043e\u043b\u043b\u0435\u0433 \u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u044b, \u043d\u0430\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435.<\/p>\n<p><a href=\"https:\/\/github.com\/Kudesnick\/led_string\" rel=\"noopener noreferrer nofollow\">\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c \u043d\u0430 github<\/a>. \u0422\u0430\u043c \u0436\u0435 \u0441\u043a\u0435\u0442\u0447 \u0434\u043b\u044f Arduino, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0439 \u0442\u043e-\u0436\u0435 \u0441\u0430\u043c\u043e\u0435. \u041e\u0431\u044a\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u043a\u043e\u0434\u0430 &#8212;  5k5.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p> <!----> <!----><\/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\/709430\/\"> https:\/\/habr.com\/ru\/post\/709430\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412\u043f\u0435\u0440\u0435\u0434\u0438 14 \u0444\u0435\u0432\u0440\u0430\u043b\u044f. \u041c\u043e\u0436\u043d\u043e \u0441\u043f\u043e\u0440\u0438\u0442\u044c \u043e\u0431 \u0443\u043c\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430 \u0432 \u043d\u0430\u0448\u0438\u0445 \u043a\u0440\u0430\u044f\u0445, \u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044d\u043d\u0435\u0440\u0433\u0438\u044e \u0432 \u043c\u0438\u0440\u043d\u043e\u0435 \u0440\u0443\u0441\u043b\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0442\u043a\u043e\u043f\u0430\u0442\u044c \u0430\u0440\u0434\u0443\u0438\u043d\u0443, \u0449\u0435\u0434\u0440\u043e \u043e\u0431\u0441\u044b\u043f\u0430\u0442\u044c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430\u043c\u0438 \u0438 \u0441\u0444\u043e\u0440\u043c\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432\u043e \u0447\u0442\u043e-\u0442\u043e \u0441\u0435\u0440\u0434\u0435\u0447\u043a\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435. \u041d\u0435\u0443\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e? \u0421\u043e\u0433\u043b\u0430\u0441\u0435\u043d. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u0430\u043a: \u043e\u0442\u043a\u043e\u043f\u0430\u0435\u043c \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439 \u043a\u043e\u0440\u043e\u0431\u043a\u0435 \u043c\u0430\u043a\u0435\u0442\u043a\u0443 \u043d\u0430 stm32, \u0437\u0430\u0431\u0443\u0434\u0435\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u043f\u043e\u0434\u0451\u0440\u0433\u0430\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b, \u0432\u044b\u0433\u0440\u044b\u0437\u0430\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u0430\u0439\u0442 ROM \u0443 \u0437\u043b\u043e\u0431\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430. \u041f\u043e\u0442\u043e\u043c \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0432\u0441\u0451 \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u043d\u043e \u0431\u0435\u0437 \u0444\u0430\u043d\u0430\u0442\u0438\u0437\u043c\u0430, \u0441 \u043f\u0440\u0438\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435\u043c CMSIS \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0434\u0430\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0432\u044b\u0432\u043e\u0434\u044b. \u0411\u0443\u0434\u0435\u0442 \u043a\u043e\u0434, \u043d\u0430\u0434\u0440\u0443\u0433\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e \u043d\u0430\u0434 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432. \u0410\u0440\u0434\u0443\u0438\u043d\u043a\u0430 \u0442\u043e\u0436\u0435 \u0431\u0443\u0434\u0435\u0442, \u043a\u0443\u0434\u0430 \u0436 \u0431\u0435\u0437 \u043d\u0435\u0451.<\/p>\n<h2>\u041f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u0430<\/h2>\n<p>\u0421\u0442\u0430\u0442\u044c\u044f \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u0442\u0435\u0445, \u043a\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u043f\u043e\u0434 \u0433\u043e\u043b\u043e\u0435 \u0436\u0435\u043b\u0435\u0437\u043e \u043b\u0438\u0431\u043e \u0441\u0434\u0435\u043b\u0430\u043b \u044d\u0442\u043e \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u0435\u0439. \u041b\u044e\u0431\u0438\u0442\u0435\u043b\u0438 \u043d\u0430\u0439\u0434\u0443\u0442 \u0442\u0440\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c &#171;Hello word&#187; \u043d\u0430 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u0438 \u0430 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044b, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0430\u0439\u0434\u0443\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c\u0438 \u0432\u044b\u0432\u043e\u0434\u044b \u0438\u0437 \u0442\u0435\u0445 \u0446\u0438\u0444\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0432 \u0438\u0442\u043e\u0433\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u0442\u0440\u0451\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432. \u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0446\u0438\u0444\u0440\u044b \u0431\u0443\u0434\u0443\u0442 \u043a\u0430\u0441\u0430\u0442\u044c\u0441\u044f \u043e\u0431\u044a\u0435\u043c\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0435\u0433\u043e\u0441\u044f \u043a\u043e\u0434\u0430 \u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u0442\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0432 \u0445\u043e\u043b\u0438\u0432\u0430\u0440\u0430\u0445 &#171;\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b vs HAL&#187;.<\/p>\n<p>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044f \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0431\u0440\u043e\u0441\u0430\u0442\u044c \u0437\u0430 \u0432\u0435\u0447\u0435\u0440\u043e\u043a \u0447\u0442\u043e-\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u0434\u043b\u044f \u0440\u0435\u0431\u0451\u043d\u043a\u0430. \u041e\u043d \u0441\u0435\u0439\u0447\u0430\u0441 \u0432 \u0442\u0430\u043a\u043e\u0439 \u0441\u0442\u0430\u0434\u0438\u0438, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u0432\u0441\u0451, \u0447\u0442\u043e \u043c\u0438\u0433\u0430\u0435\u0442 \u0438 \u0441\u0432\u0435\u0442\u0438\u0442\u0441\u044f. \u0418\u0434\u0435\u044f \u0431\u044b\u043b\u0430 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0441\u043f\u043e\u043d\u0442\u0430\u043d\u043d\u043e\u0439 \u0438 \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0432\u0430\u043b\u0438\u043b\u0430\u0441\u044c. \u0412 \u0438\u0442\u043e\u0433\u0435 \u0440\u0435\u0431\u0451\u043d\u043e\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0441\u0432\u0435\u0442\u043e\u0444\u043e\u0440 \u043d\u0430 \u0431\u0430\u0437\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 &#171;\u0432\u043e\u043b\u044c\u0442\u0438\u043a&#187;, \u0441 \u0431\u043e\u043d\u0443\u0441\u043e\u043c \u043e\u0442 \u043f\u0430\u043f\u044b \u0432 \u0432\u0438\u0434\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u043b\u0430\u0442\u043e\u0439 Digispark, \u0430 \u043f\u0430\u043f\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043b nucleo-F103RB \u0441 \u043f\u0440\u0438\u043a\u0440\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u0435\u0439 8&#215;32 \u043a\u0440\u0430\u0441\u043d\u044b\u0445 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430 \u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u0435\u0439 \u043f\u043e SPI. \u041a\u0441\u0442\u0430\u0442\u0438, \u0435\u0441\u043b\u0438 \u0443 \u043a\u043e\u0433\u043e-\u0442\u043e \u0435\u0441\u0442\u044c \u0438\u0434\u0435\u044f, \u043a\u0430\u043a\u0443\u044e \u0438\u0433\u0440\u0443\u0448\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a\u0438 \u0438\u0437 \u044d\u0442\u043e\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043f\u0440\u043e\u0448\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445. \u0422\u0435\u0442\u0440\u0438\u0441 \u043d\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0442\u044c.<\/p>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u0440\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u0434\u0435\u043c\u043a\u0430 \u0441 \u0441\u0435\u0440\u0434\u0435\u0447\u043a\u0430\u043c\u0438. \u0425\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0435\u044e \u0441 \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e. \u0412\u0434\u0440\u0443\u0433, \u043a\u043e\u043c\u0443-\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u0430\u044f \u043d\u0443\u0436\u043d\u0430 \u043d\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0412\u0430\u043b\u0435\u043d\u0442\u0438\u043d\u043e\u0432 \u0434\u0435\u043d\u044c? \u0415\u0441\u043b\u0438 \u043f\u043e\u0442\u043e\u0440\u043e\u043f\u0438\u0442\u044c\u0441\u044f, \u0442\u043e \u0435\u0449\u0451 \u0435\u0441\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u0441\u0431\u0435\u0433\u0430\u0442\u044c \u0432 \u043c\u0430\u0433\u0430\u0437\u0438\u043d.<\/p>\n<h2>\u041e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0432 \u0441\u0440\u0435\u0434\u0435 Keil MDK-ARM. \u0421\u0432\u0435\u0436\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0441 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430. \u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438 \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u0430\u0439\u043b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432 32 \u043a\u0411, \u043d\u043e \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f \u044d\u0442\u043e \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u042d\u0442\u0443 \u0441\u0440\u0435\u0434\u0443 \u0447\u0430\u0441\u0442\u043e \u0440\u0443\u0433\u0430\u044e\u0442 \u0437\u0430 \u0443\u0431\u043e\u0433\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043a\u043e\u0434\u0430, \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0442\u0435\u043c \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u044f, \u0433\u043b\u044e\u0447\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u043f\u043e \u043a\u043e\u0434\u0443 \u0438 \u043f\u0440. \u0412\u0441\u0451 \u044d\u0442\u043e \u0435\u0441\u0442\u044c, \u043d\u043e \u0435\u0441\u0442\u044c \u0438 \u043a\u043e\u0435-\u0447\u0442\u043e \u0435\u0449\u0451 &#8212; \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u0438\u0437 \u043f\u044f\u0442\u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0448\u0430\u0433\u043e\u0432:<\/p>\n<ol>\n<li>\n<p>\u0421\u043a\u0430\u0447\u0430\u0442\u044c Keil MDK-ARM \u0432\u0435\u0440\u0441\u0438\u0438 5.37 \u0438\u043b\u0438 \u0432\u044b\u0448\u0435;<\/p>\n<\/li>\n<li>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e;<\/p>\n<\/li>\n<li>\n<p>\u0421\u043a\u0430\u0447\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \/ \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c;<\/p>\n<\/li>\n<li>\n<p>\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u043f\u0430\u043f\u043a\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0444\u0430\u0439\u043b <code>keilprj\/led_string.uvprojx<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u043e\u0436\u0434\u0430\u0442\u044c, \u043f\u043e\u043a\u0430 \u0441\u0440\u0435\u0434\u0430 \u0441\u043a\u0430\u0447\u0430\u0435\u0442 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<\/li>\n<\/ol>\n<p>\u0412\u0441\u0451, \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0433\u043e\u0442\u043e\u0432\u043e. \u0414\u0430, \u0447\u0443\u0442\u044c \u043d\u0435 \u0437\u0430\u0431\u044b\u043b. \u042d\u0442\u043e \u0432\u0441\u0451 \u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e \u0434\u043b\u044f \u041e\u0421 Windows. \u0414\u043b\u044f \u043e\u0431\u043b\u0430\u0434\u0430\u0442\u0435\u043b\u0435\u0439 linux-\u043c\u0430\u0448\u0438\u043d \u0432\u0441\u0435 \u043d\u0435 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435 &#8212; Keil \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 Wine.<\/p>\n<h2>\u0416\u0435\u043b\u0435\u0437\u043e<\/h2>\n<p><strong>\u041d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f:<\/strong><\/p>\n<p>\u0421\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u0430\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u0430 \u043d\u0430 \u0431\u0430\u0437\u0435 max7219, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0445 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0443 max7219 \u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u0443 8&#215;8 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432.<\/p>\n<p>\u041f\u043b\u0430\u0442\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 nucleo-F103RB. \u041c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0447\u0442\u043e \u043f\u043e\u043f\u0440\u043e\u0449\u0435: blue-pill, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440. \u0410 \u0442\u043e \u0438 \u0432\u043e\u0432\u0441\u0435 \u0433\u043e\u043b\u044b\u0439 \u0447\u0438\u043f stm32f103 \u0441 \u043b\u044e\u0431\u044b\u043c\u0438 \u0431\u0443\u043a\u0432\u0430\u043c\u0438. \u041e\u0431\u0432\u044f\u0437\u043a\u0430 \u0447\u0438\u043f\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0442\u044c \u043f\u0438\u0442\u0430\u043d\u0438\u0435 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u0438\u043d\u0430\u043c PA5, PA6, PA7.<\/p>\n<p><strong>\u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e:<\/strong><\/p>\n<p>\u041f\u044f\u0442\u044c \u043f\u0440\u043e\u0432\u043e\u0434\u043e\u0432 \u0434\u043b\u044f \u0430\u0440\u0434\u0443\u0438\u043d\u043e-\u043c\u043e\u043d\u0442\u0430\u0436\u0430 \u0441 \u0440\u0430\u0437\u044a\u0451\u043c\u0430\u043c\u0438 \u043c\u0430\u043c\u0430-\u043c\u0430\u043c\u0430. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0432\u043e\u0434\u0430, \u0441\u043a\u043b\u0435\u0435\u043d\u043d\u044b\u0435 \u0432 \u0448\u043b\u0435\u0439\u0444. \u041d\u0430 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u044d\u0442\u043e \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0441\u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c\u0441\u044f \u0431\u0443\u0434\u0435\u0442 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u0435\u0439. \u0415\u0441\u043b\u0438 \u0432\u044b \u0440\u0435\u0448\u0438\u0442\u0435 \u044e\u0437\u0430\u0442\u044c blue-pill, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438\u043a\u043b\u0435\u0435\u043d\u043d\u044b\u0439 \u0441 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u0440\u043e\u043d\u044b LED-\u043c\u0430\u0442\u0440\u0438\u0446\u044b, \u0442\u043e \u0441 \u043f\u0440\u043e\u0432\u043e\u0434\u0430\u043c\u0438 \u0434\u0443\u043c\u0430\u044e \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u0442\u0435\u0441\u044c \u0441\u0430\u043c\u0438.<\/p>\n<p>\u041a\u0430\u0431\u0435\u043b\u044c USB-mini. \u041d\u0443\u0436\u0435\u043d \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043b\u0430\u0442\u044b nucleo. \u041f\u0438\u0448\u0443 \u043d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439, \u0442.\u043a. \u043a\u0430\u0431\u0435\u043b\u044c \u0438\u0437 \u043c\u043e\u0434\u044b \u0432\u044b\u0448\u0435\u043b \u0438 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u043c\u0435\u0441\u0442\u0435. \u041e\u043f\u044f\u0442\u044c \u0436\u0435, \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440 &#8212; \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0439\u0442\u0435 \u043f\u043e \u043e\u0431\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430\u043c.<\/p>\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440. ST-Link, J-Link \u0438 \u043f\u0440. \u042d\u0442\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0432\u043c\u0435\u0441\u0442\u043e nucleo \u0447\u0442\u043e-\u0442\u043e \u0442\u0430\u043a\u043e\u0435, \u043d\u0430 \u0447\u0451\u043c \u043d\u0430\u0431\u043e\u0440\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442.<\/p>\n<p>Arduino UNO. \u0415\u0441\u043b\u0438 \u0434\u0443\u0448\u0430 \u043a stm \u043d\u0435 \u043b\u0435\u0436\u0438\u0442, \u043d\u043e \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u041f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 \u043b\u044e\u0431\u0430\u044f \u0430\u0440\u0434\u0443\u0438\u043d\u043a\u0430.<\/p>\n<p><strong>\u0421\u0431\u043e\u0440\u043a\u0430<\/strong><\/p>\n<p>\u041f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0445\u0435\u043c\u0443 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0443\u0441\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u043f\u0440\u043e\u0432\u043e\u0434\u043e\u0432.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"217\" width=\"217\">\n<p align=\"left\">\u041a\u043e\u043d\u0442\u0430\u043a\u0442 \u043d\u0430 LED \u043c\u0430\u0442\u0440\u0438\u0446\u0435<\/p>\n<\/td>\n<td data-colwidth=\"244\" width=\"244\">\n<p align=\"left\">CN8, CN9 (CN10) \u043d\u0430 nucleo<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u043e\u0436\u043a\u0438 \u041c\u041a<\/p>\n<\/td>\n<td>\n<p align=\"left\">Arduino<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"217\" width=\"217\">\n<p align=\"left\">VCC<\/p>\n<\/td>\n<td data-colwidth=\"244\" width=\"244\">\n<p align=\"left\">5V (8)<\/p>\n<\/td>\n<td>\n<p align=\"left\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">5V<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"217\" width=\"217\">\n<p align=\"left\">GND<\/p>\n<\/td>\n<td data-colwidth=\"244\" width=\"244\">\n<p align=\"left\">GND (9)<\/p>\n<\/td>\n<td>\n<p align=\"left\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">GND<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"217\" width=\"217\">\n<p align=\"left\">DIN (MOSI)<\/p>\n<\/td>\n<td data-colwidth=\"244\" width=\"244\">\n<p align=\"left\">PWM\/MOSI\/D11 (15)<\/p>\n<\/td>\n<td>\n<p align=\"left\">PA7<\/p>\n<\/td>\n<td>\n<p align=\"left\">11<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"217\" width=\"217\">\n<p align=\"left\">CS (SS)<\/p>\n<\/td>\n<td data-colwidth=\"244\" width=\"244\">\n<p align=\"left\">MISO\/D12 (13)<\/p>\n<\/td>\n<td>\n<p align=\"left\">PA6<\/p>\n<\/td>\n<td>\n<p align=\"left\">10<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"217\" width=\"217\">\n<p align=\"left\">CLK (SCK)<\/p>\n<\/td>\n<td data-colwidth=\"244\" width=\"244\">\n<p align=\"left\">SCK\/D13 (11)<\/p>\n<\/td>\n<td>\n<p align=\"left\">PA5<\/p>\n<\/td>\n<td>\n<p align=\"left\">13<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/h2>\n<p>\u0418 \u0442\u0430\u043a, \u0436\u0435\u043b\u0435\u0437\u043a\u0430 \u043b\u0435\u0436\u0438\u0442 \u043d\u0430 \u0441\u0442\u043e\u043b\u0435, \u043f\u0440\u043e\u0435\u043a\u0442 \u043e\u0442\u043a\u0440\u044b\u0442. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e. \u041f\u0440\u043e\u0435\u043a\u0442 \u0438\u043c\u0435\u0435\u0442 \u0442\u0440\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0446\u0435\u043b\u0438 \u0441\u0431\u043e\u0440\u043a\u0438 (\u0442\u0430\u0440\u0433\u0435\u0442\u0430). \u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 &#8212; \u043e\u0434\u0438\u043d, \u043d\u043e \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0432\u0441\u0451 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443. \u041d\u0430\u0447\u043d\u0451\u043c \u0440\u0430\u0437\u0431\u043e\u0440 \u0441 \u0442\u0430\u0440\u0433\u0435\u0442\u0430 CMSIS_drv. \u0412 \u044d\u0442\u043e\u043c \u0442\u0430\u0440\u0433\u0435\u0442\u0435 \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u044b\u043c\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u0430: <code>main.c<\/code> &#8212; \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a; <code>max7219.c\/h<\/code> &#8212; \u044d\u0442\u043e \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b max7219; <code>spi.c\/csp.h<\/code> &#8212; \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 \u041c\u041a. \u0418\u0437 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 \u043c\u044b \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0434\u0443\u043b\u044c SPI. \u042d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0441\u0432\u044f\u0437\u043a\u0435 \u0441 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c <code>csp.h<\/code>. \u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0442\u0430\u043a, \u043e\u0431\u044a\u044f\u0441\u043d\u044e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0430\u0431\u0437\u0430\u0446\u0430\u043c\u0438 \u043d\u0438\u0436\u0435.<\/p>\n<p>\u041f\u043e \u0441\u0443\u0442\u0438 &#8212; \u044d\u0442\u0438 \u0442\u0440\u0438 \u0444\u0430\u0439\u043b\u0430 \u043e\u043b\u0438\u0446\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0442 \u0442\u0440\u0438 \u0441\u043b\u043e\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. Main &#8212; \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c. \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0444\u0438\u0448\u043a\u0438 \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0438\u0445 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u044b max7219. \u041d\u0438\u043a\u0442\u043e \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442 \u043d\u0430\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0443\u044e \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0443. \u041c\u043e\u0436\u0435\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0437\u044f\u0442\u044c \u0430\u0434\u0440\u0435\u0441\u043d\u044b\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u044b \u043d\u0430 WS2812b. \u041a\u043e\u0434 \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d. \u0417\u0434\u0435\u0441\u044c \u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043b\u0443\u043a\u0430\u0432\u043b\u044e. \u041a\u043e\u0434 \u0438\u0437 <code>main.c<\/code> \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 <code>max7219.c<\/code>. \u041b\u044e\u0431\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0432\u0435\u0441\u0442\u0438 \u0434\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u0430. \u041f\u0440\u0430\u0432\u0434\u0430, \u043d\u0430 \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u0430 \u0434\u043e 14 \u0444\u0435\u0432\u0440\u0430\u043b\u044f \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0432\u0441\u0435\u043c \u0447\u0443\u0442\u044c-\u0447\u0443\u0442\u044c.<\/p>\n<details class=\"spoiler\">\n<summary>\u0412\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u043a\u043e\u0434 main.c<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#include \"stm32f10x.h\" #include \"csp.h\" #include \"max7219.h\"  #if(1) \/\/\/ @brief \u041f\u043e\u0431\u0438\u0442\u043d\u043e\u0435 \u0437\u0435\u0440\u043a\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 4-\u0431\u0430\u0439\u0442\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 \/\/\/ @example 0x80000010 -> 0x08000001 #define RBIT(dw) __RBIT(dw) #else uint32_t RBIT(uint32_t in) {     uint32_t result = 0;          for (uint32_t i = 32; i; i--)     {         result &lt;&lt;= 1;         result |= (in &amp; 1);         in >>= 1;     }      return result; } #endif  \/\/\/ \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f typedef union {     uint32_t dw;     uint16_t w[2];     uint8_t  b[4]; } buf_str_t;  \/\/\/ \u041f\u043e\u043b\u043e\u0432\u0438\u043d\u043a\u0430 \"\u0441\u0435\u0440\u0434\u0446\u0430\" const uint8_t heart[STR_CNT] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x08, 0x88, 0x70};  \/\/\/ \u0411\u0443\u0444\u0435\u0440 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f buf_str_t img_buf[STR_CNT];  \/\/\/ \u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 static void load_img() {     for (uint32_t i = 0; ++i &lt;= STR_CNT;)     {         const uint32_t tmp = img_buf[i-1].dw;         max7219_send_data(i, tmp | RBIT(tmp));     }     csp_delay(16); }  \/\/\/ @brief \u042d\u0444\u0444\u0435\u043a\u0442 \u043f\u0443\u043b\u044c\u0441\u0430\u0446\u0438\u0438 (\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u044f\u0440\u043a\u043e\u0441\u0442\u0438) \/\/\/ @param cnt \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0443\u043b\u044c\u0441\u0430\u0446\u0438\u0439 static void pulse(const uint32_t cnt) {     for (uint32_t i = cnt; i-- > 0;)     {         for (uint32_t i = 0; ++i &lt; 0x20;)         {             max7219_send_cmd(MAX7219_BRIGHTNESS, i ^ (0xF * (i >> 4)));             csp_delay(2 &lt;&lt; (i >> 4));         }         csp_delay(200);     } }  \/** @defgroup Animation \u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438  *  @{ ********************************************************************************************\/  \/\/\/ \u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f typedef void(*step_t)(const uint32_t, const uint32_t);  \/\/\/ @brief \u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044e \/\/\/ @param j \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u0430\u0434\u0440\u043e\u0432 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \/\/\/ @param fn_p \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f void step(int8_t j, step_t fn_p) {     for (; j >= 0; j--)     {         for (int32_t i = STR_CNT; --i >= 0;)         {             fn_p(i, j);         }          load_img();     } }  \/\/\/ @brief \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \"\u043e\u0434\u043d\u043e \u0441\u0435\u0440\u0434\u0446\u0435\" \/\/\/ @param i \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438 \/\/\/ @param j \u043d\u043e\u043c\u0435\u0440 \u043a\u0430\u0434\u0440\u0430 void one_heart(const uint32_t i, const uint32_t j) {     img_buf[i].dw = (uint16_t)heart[i] &lt;&lt; 8 >> j; }  \/\/\/ @brief \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \"\u0434\u0432\u0430 \u0441\u0435\u0440\u0434\u0446\u0430\" \/\/\/ @param i \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438 \/\/\/ @param j \u043d\u043e\u043c\u0435\u0440 \u043a\u0430\u0434\u0440\u0430 void dbl_heart(const uint32_t i, const uint32_t j) {     img_buf[i].dw = ((uint32_t)heart[i] >> j) | (uint32_t)heart[i] &lt;&lt; (16 - j); }  \/\/\/ @brief \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \"\u0441\u043b\u0438\u044f\u043d\u0438\u0435 \u0441\u0435\u0440\u0434\u0435\u0446\" \/\/\/ @param i \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438 \/\/\/ @param j \u043d\u043e\u043c\u0435\u0440 \u043a\u0430\u0434\u0440\u0430 void uni_heart(const uint32_t i, const uint32_t j) {     (void)j;      img_buf[i].w[0] &lt;&lt;= 1;     img_buf[i].w[1] >>= 1; }  \/** @} ********************************************************************************************\/  \/\/\/ \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f __STATIC_FORCEINLINE void init() {     csp_spi_init();      csp_spi_nss_inactive();      \/\/ Base initialisation of MAX7219     max7219_send_cmd(MAX7219_TEST, 0x00); \/\/ 1 - on, 0 - off     max7219_send_cmd(MAX7219_SCAN_LIMIT, STR_CNT - 1);     max7219_send_cmd(MAX7219_BRIGHTNESS, 0x00); \/\/ 0x00..0x0F     max7219_send_cmd(MAX7219_DECODE_MODE, 0x00); \/\/ 0 - raw data     max7219_send_cmd(MAX7219_SHUTDOWN, 0x01); \/\/ 1 - active mode, 0 - inactive mode }  \/\/\/ @brief \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \/\/\/ @return \u041d\u0430\u0444\u0438\u0433 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d, \u043d\u043e \u043f\u0440\u043e\u0442\u0438\u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 \u043d\u0435 \u043f\u043e\u043f\u0440\u0435\u0448\u044c int main() {     init();      step(15, one_heart);     pulse(1);      step(7, dbl_heart);     pulse(2);      step(7, uni_heart);      \/\/ \u0417\u0430\u043b\u0438\u0432\u043a\u0430 \u043a\u043e\u043d\u0442\u0443\u0440\u043d\u043e\u0433\u043e \"\u0441\u0435\u0440\u0434\u0446\u0430\"     for (uint32_t j = 0; ++j &lt; 7;)     {         img_buf[j].dw |= img_buf[j - 1].dw;          load_img();     }      \/\/ \u0411\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e     for (;; pulse(1));      return 0; } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u0440\u043e\u0431\u0435\u0436\u0438\u043c\u0441\u044f \u043f\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043c. \u0414\u043b\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f &#171;\u0441\u0435\u0440\u0434\u0435\u0447\u043a\u0430&#187; \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430. \u041e\u043d\u0430 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c <code>heart<\/code>. \u041a\u0430\u0436\u0434\u044b\u0439 \u0431\u0430\u0439\u0442 \u044d\u0442\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0431\u0438\u0442\u043e\u0432\u0443\u044e \u043c\u0430\u0441\u043a\u0443 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u044b \u043a\u043e\u043d\u0442\u0443\u0440\u0430 &#171;\u0441\u0435\u0440\u0434\u0435\u0447\u043a\u0430&#187;. \u0422.\u043a. \u0444\u0438\u0433\u0443\u0440\u0430 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u0430, \u0432\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0434\u043e\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e, \u043f\u0443\u0442\u0451\u043c \u0437\u0435\u0440\u043a\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0432\u043e\u0439. \u0414\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c &#171;\u0432\u0438\u0434\u0435\u043e\u0431\u0443\u0444\u0435\u0440&#187; <code>img_buf<\/code> &#8212; \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u0437 \u0432\u043e\u0441\u044c\u043c\u0438 \u0442\u0440\u0438\u0434\u0446\u0430\u0442\u0438\u0434\u0432\u0443\u0445\u0431\u0438\u0442\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u041a\u0430\u0436\u0434\u044b\u0439 \u0431\u0438\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0443 \u0432 \u043c\u0430\u0442\u0440\u0438\u0446\u0435. \u0414\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0431\u0443\u0444\u0435\u0440\u0430 \u0432 \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>load_img<\/code>. \u042f \u043d\u0430\u0440\u043e\u0447\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u043b \u0431\u0443\u0444\u0435\u0440 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u043c, \u0438 \u0432\u043e \u0432\u0441\u0435\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0441 \u043d\u0438\u043c \u0432 \u044f\u0432\u043d\u043e\u043c \u0432\u0438\u0434\u0435. \u041c\u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u043c \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043a\u043e\u0434, \u0432 \u0442. \u0447. \u0438 \u043d\u0430 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438. \u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u043d\u0430 4 \u0431\u0430\u0439\u0442\u0430. \u0412 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0442\u0430\u043a\u043e\u0435 \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e, \u043c\u044b \u0436\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c. \u041d\u043e \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0442\u0430\u043a \u0432 \u043a\u043e\u0434\u0435, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0430\u043c \u043f\u043b\u0430\u0442\u044f\u0442 \u0434\u0435\u043d\u044c\u0433\u0438.<\/p>\n<p>\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439<\/p>\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-345054","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/345054","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=345054"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/345054\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=345054"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=345054"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=345054"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}