{"id":360928,"date":"2024-05-21T01:03:00","date_gmt":"2024-05-21T01:03:00","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=360928"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=360928","title":{"rendered":"<span>CH32V003 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442. \u041c\u0438\u0433\u0430\u0435\u043c OLED \u0434\u0438\u0441\u043f\u043b\u0435\u0435\u043c \u0438 \u0434\u0435\u043b\u0430\u0435\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c \u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0430\u0446\u0438\u0438 CO2<\/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<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/dec\/de0\/8e3\/decde08e36998dabc66a31b88c759311.jpg\" width=\"932\" height=\"448\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/dec\/de0\/8e3\/decde08e36998dabc66a31b88c759311.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>\u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u0438 \u0438\u0441\u043f\u044b\u0442\u044b\u0432\u0430\u044e\u0442 \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0438 \u0441 \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0430\u043c\u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432. \u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 &#171;\u0438\u0441\u043a\u043e\u043d\u043d\u043e \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0443\u044e&#187; \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043d\u0443\u044e \u0431\u0430\u0437\u0443. \u042d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u043a\u0443\u043f\u0430\u0435\u0442 \u0446\u0435\u043d\u043e\u0439 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c\u044e, \u043d\u043e \u043f\u0443\u0433\u0430\u0435\u0442 \u043f\u043b\u043e\u0445\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 \u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0430 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0445 \u043d\u0430\u043c \u044f\u0437\u044b\u043a\u0430\u0445. \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u043e\u043c \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 \u043d\u0430 \u044f\u0434\u0440\u0435 RISC-V \u0438 \u0441\u0434\u0435\u043b\u0430\u044e \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u043f\u0435\u0440\u0432\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e &#8212; \u0434\u0430\u0442\u0447\u0438\u043a \u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0430\u0446\u0438\u0438 \u0443\u0433\u043b\u0435\u043a\u0438\u0441\u043b\u043e\u0433\u043e \u0433\u0430\u0437\u0430 \u0432 \u0432\u043e\u0437\u0434\u0443\u0445\u0435\/\u043c\u0438\u0433\u0430\u043b\u043a\u0443 OLED \u0434\u0438\u0441\u043f\u043b\u0435\u0435\u043c \u0438 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c (\u043a\u0443\u0434\u0430 \u0436 \u0431\u0435\u0437 \u043c\u0438\u0433\u0430\u043b\u043a\u0438 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c). \u0412 <a href=\"https:\/\/github.com\/Sergo101\/CH32V003_stHAL\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a> \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d \u043f\u0440\u043e\u0435\u043a\u0442 \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0437\u0430\u0445\u043e\u0447\u0435\u0442 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0430\u043c\u0438.<\/p>\n<h2>\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u044f \u0441\u043b\u044b\u0448\u0430\u043b \u043f\u0440\u043e \u044f\u0434\u0440\u043e RISC-V \u0438 \u0435\u0433\u043e \u043d\u0430\u0440\u0430\u0441\u0442\u0430\u044e\u0449\u0443\u044e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u044c. \u041c\u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043d\u0430 \u044d\u0442\u043e\u043c \u044f\u0434\u0440\u0435. \u041c\u0438\u043a\u0440\u043e\u043d \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043e\u0449\u043d\u044b\u0439 <abbr class=\"habraabbr\" title=\"\u041c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\" data-title=\"&lt;p>\u041c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440&lt;\/p>&#187; data-abbr=&#187;\u041c\u041a&#187;>\u041c\u041a<\/abbr> \u043d\u0430 \u044f\u0434\u0440\u0435 RISC-V, \u043d\u043e \u0435\u0433\u043e \u0437\u0430\u043a\u0443\u043f\u043a\u0443 \u044f \u0434\u0430\u0436\u0435 \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b, \u0442\u0430\u043a \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043d\u043e\u043c\u0443 \u043b\u0438\u0446\u0443 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442 \u0434\u043b\u044f \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u043e\u0433\u043e \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430. <\/p>\n<p>\u0422\u0430\u043a \u0436\u0435 \u043c\u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u043b\u0438\u0441\u044c \u041c\u041a CH32 \u043e\u0442 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u043e\u0439 \u0444\u0438\u0440\u043c\u044b WCH. \u041e\u043d\u0430 \u0448\u0438\u0440\u043e\u043a\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c USB-UART CH340. \u042f \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0438 \u0440\u0435\u0448\u0438\u043b \u0437\u0430\u043a\u0430\u0437\u0430\u0442\u044c \u043c\u043b\u0430\u0434\u0448\u0438\u0439 \u041c\u041a \u0438\u0437 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430 RISC-V. \u041c\u0435\u043d\u044f \u0436\u0434\u0430\u043b \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439 \u0441\u044e\u0440\u043f\u0440\u0438\u0437: \u043d\u0430 \u0430\u043b\u0438 \u0437\u0430 1400 \u0440\u0443\u0431\u043b\u0435\u0439 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u0434\u0432\u0435 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u043b\u0430\u0442\u044b, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440 \u0438 \u043f\u043e \u043f\u044f\u0442\u044c \u041c\u041a \u043e\u0434\u043d\u0438\u043c \u043b\u043e\u0442\u043e\u043c!<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/911\/1e9\/ea0\/9111e9ea0c933bb32f5c0379dc97f77d.png\" width=\"640\" height=\"640\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/911\/1e9\/ea0\/9111e9ea0c933bb32f5c0379dc97f77d.png\"\/><\/figure>\n<p>CH32V003 \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0437\u0430\u043c\u0435\u043d\u0430 \u0432\u043e\u0441\u044c\u043c\u0438\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u041c\u041a STM8S003F3, \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \u0441 \u043d\u0438\u043c \u043f\u043e \u043d\u043e\u0433\u0430\u043c, \u043d\u043e \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043c. \u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c CH32V003 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 25 \u0440\u0443\u0431\u043b\u0435\u0439 \u0437\u0430 \u0448\u0442\u0443\u043a\u0443. \u0422\u0430\u043a \u0436\u0435 \u043d\u0435\u043c\u0430\u043b\u043e\u0432\u0430\u0436\u043d\u043e, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0439 \u041c\u041a \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u043c\u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430\u043c\u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/fa2\/b8c\/b31\/fa2b8cb31a1350694b95677cb8429552.png\" alt=\"\u041f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044f \u041c\u041a CH32V003\" title=\"\u041f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044f \u041c\u041a CH32V003\" width=\"1200\" height=\"345\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fa2\/b8c\/b31\/fa2b8cb31a1350694b95677cb8429552.png\"\/><\/p>\n<div><figcaption>\u041f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044f \u041c\u041a CH32V003<\/figcaption><\/div>\n<\/figure>\n<h2>\u041c\u0438\u0433\u0430\u0435\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c<\/h2>\n<p>\u041c\u0438\u0433\u0430\u043d\u0438\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c &#8212; \u043a\u0430\u043d\u043e\u043d \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u0440\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u041c\u041a. \u0412 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u044b, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440\u0430 \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u043e\u0432\u043e\u0434\u043e\u0432. <\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u0441\u0442\u0430\u043d\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0441\u0440\u0435\u0434\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 <a href=\"http:\/\/www.mounriver.com\/download\" rel=\"noopener noreferrer nofollow\">MounRiver Studio<\/a>. \u041e\u0441\u043d\u043e\u0432\u0430 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u044b &#8212; Eclipse. \u042f \u0431\u044b \u043f\u043e\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043b \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u0440\u0435\u0434\u044b \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u0443\u0442\u044c \u043a \u043f\u0430\u043f\u043a\u0435 \u0438 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043b\u0438 \u043a\u0438\u0440\u0438\u043b\u043b\u0438\u0446\u044b (\u0441 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u043e\u0439 \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b, \u043d\u043e \u0443\u0436\u0435 \u0438\u043c\u0435\u043b \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439 \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u0440\u0435\u0434\u0430\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430 \u0431\u0430\u0437\u0435 Eclipse, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c)<\/p>\n<p>\u0412\u0442\u043e\u0440\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c <a href=\"https:\/\/www.wch-ic.com\/products\/CH32V003.html?\" rel=\"noopener noreferrer nofollow\">SDK <\/a>\u0441 \u0441\u0430\u0439\u0442\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u041c\u041a. \u0412\u043d\u0438\u0437\u0443 \u0441\u0442\u0430\u043d\u0438\u0446\u044b \u0435\u0441\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 ZIP \u0430\u0440\u0445\u0438\u0432\u0430 \u0441\u043e \u0441\u0445\u0435\u043c\u043e\u0439 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u044b \u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u041f\u041e. \u0420\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0430\u0440\u0445\u0438\u0432 \u0432 \u0440\u0430\u0431\u043e\u0447\u0443\u044e \u043f\u0430\u043f\u043a\u0443. <\/p>\n<p>\u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 GPIO_Toggle \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u0441 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0443\u0440\u043e\u0432\u043d\u044f \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u0430\u043f\u043e\u043a. \u042f \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043b \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 Habr_CO2.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/b2c\/e1c\/3fb\/b2ce1c3fb5fa0358001d95fc7be683bb.jpg\" width=\"842\" height=\"588\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b2c\/e1c\/3fb\/b2ce1c3fb5fa0358001d95fc7be683bb.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>\u041e\u0442\u0440\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 \u0441\u0440\u0435\u0434\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u041f\u0440\u0438\u043c\u0435\u0440 GPIO_Toggle \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c \u043a \u043f\u043e\u0440\u0442\u0443 PD_0. \u0412 \u043c\u043e\u0435\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043a \u043f\u043e\u0440\u0442\u0443 PD_3.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/b4a\/0c3\/e88\/b4a0c3e88b37bba8b0c56d32d199a403.jpg\" alt=\"\u0421\u0445\u0435\u043c\u0430 \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044f \u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0430\u0446\u0438\u0438 \u0443\u0433\u043b\u0435\u043a\u0438\u0441\u043b\u043e\u0433\u043e \u0433\u0430\u0437\u0430\" title=\"\u0421\u0445\u0435\u043c\u0430 \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044f \u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0430\u0446\u0438\u0438 \u0443\u0433\u043b\u0435\u043a\u0438\u0441\u043b\u043e\u0433\u043e \u0433\u0430\u0437\u0430\" width=\"889\" height=\"608\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b4a\/0c3\/e88\/b4a0c3e88b37bba8b0c56d32d199a403.jpg\" data-blurred=\"true\"\/><\/p>\n<div><figcaption>\u0421\u0445\u0435\u043c\u0430 \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044f \u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0430\u0446\u0438\u0438 \u0443\u0433\u043b\u0435\u043a\u0438\u0441\u043b\u043e\u0433\u043e \u0433\u0430\u0437\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0432 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u043c\u0438\u0433\u0430\u043d\u0438\u044f \u043c\u0435\u043d\u044f\u0435\u043c \u043d\u043e\u043c\u0435\u0440 \u0432\u044b\u0432\u043e\u0434\u0430 \u043f\u043e\u0440\u0442\u0430:<\/p>\n<pre><code class=\"cpp\">void GPIO_Toggle_INIT(void) {     GPIO_InitTypeDef GPIO_InitStructure = {0};      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;\/\/\u0437\u0434\u0435\u0441\u044c \u0431\u044b\u043b GPIO_Pin_0     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     GPIO_Init(GPIOD, &amp;GPIO_InitStructure); } ...   while(1)     {         Delay_Ms(500);         GPIO_WriteBit(GPIOD, GPIO_Pin_3, (i == 0) ? (i = Bit_SET) : (i = Bit_RESET));     } \/\/\u0438 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u0432\u044b\u0448\u0435 \u0431\u044b\u043b GPIO_Pin_0<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442. \u041d\u0430\u0436\u0438\u043c\u0430\u0435\u043c Project -> Build Project. \u041f\u043e\u0441\u043b\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c Flash -> Download, \u0434\u043e\u0436\u0438\u0434\u0430\u0435\u043c\u0441\u044f \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438, \u0441\u0443\u0434\u043e\u0440\u043e\u0436\u043d\u043e \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c Reset \u0438\u043b\u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u041c\u041a &#8212; \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442! \u0410 \u0432\u0441\u0435 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043c\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438 \u0438\u043c\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 hex \u0442\u043e\u0436\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c. \u0410 \u0441\u0440\u0435\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0435\u0442 \u0441\u0442\u0430\u0440\u044b\u0439 \u0444\u0430\u0439\u043b hex. \u041d\u0430\u0436\u0438\u043c\u0430\u0435\u043c Flash -> Configuration, \u0432 \u043f\u043e\u043b\u0435 Target File: \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c Habr_CO2.hex. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043c\u0438\u0433\u0430\u0442\u044c (\u0443 \u043c\u0435\u043d\u044f \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442). <\/p>\n<h2>\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 I2C<\/h2>\n<p>\u041a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0430 \u043f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u0438\u0446\u0430 \u043f\u043e \u043c\u0430\u0442\u0430\u043d\u0443 \u0432 \u041c\u0410\u0418 (\u043f\u0435\u0440\u0432\u044b\u0439 \u0444\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442, \u043a\u0442\u043e \u0431\u044b\u043b \u0442\u0430\u043c, \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442): &#171;\u0412\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u044c \u0437\u0430\u043c\u0435&#8230;\u0435\u0442\u0438\u0442&#187;, \u0447\u0442\u043e \u0432 \u0441\u0445\u0435\u043c\u0435 \u043d\u0435\u0442 \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0449\u0438\u0445 \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u043e\u0432 \u0448\u0438\u043d\u044b I2C \u043a &#171;+&#187; \u043f\u0438\u0442\u0430\u043d\u0438\u044f, \u043d\u043e \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0430 \u043f\u043b\u0430\u0442\u0430\u0445 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 CO2 \u0438 \u0434\u0438\u0441\u043f\u043b\u0435\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u044b \u0435\u0441\u0442\u044c. \u041d\u0430\u0447\u043d\u0435\u043c \u0441 OLED \u0434\u0438\u0441\u043f\u043b\u0435\u044f. \u041e\u043d \u0441\u0434\u0435\u043b\u0430\u043d \u043d\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 ssd1306 \u0438 \u043f\u0440\u043e \u043d\u0435\u0433\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442\u044b \u0442\u0435\u043a\u0441\u0442\u0430, \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0442\u0430\u043a \u0447\u0442\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0434\u0438\u0441\u043f\u043b\u0435\u0435\u043c \u044f \u043d\u0435 \u0441\u0442\u0430\u043d\u0443. \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0438\u0441\u043f\u043b\u0435\u0435\u043c \u043d\u0443\u0436\u0435\u043d \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 I2C. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 I2C \u043d\u0430\u043a\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043d\u043e\u0441\u0442\u0430\u043b\u044c\u0433\u0438\u044f \u043f\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0433\u043e\u0442\u043e\u0432\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c \u043e\u0442 \u0444\u0438\u0440\u043c\u044b ST. \u041d\u043e \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c &#8212; \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c <abbr class=\"habraabbr\" title=\"Hardware Abstraction Layer, \u0421\u043b\u043e\u0439 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439\" data-title=\"&lt;p>&lt;strong>Hardware Abstraction Layer,&lt;\/strong>&amp;nbsp;&lt;strong>\u0421\u043b\u043e\u0439 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439&lt;\/strong>&lt;\/p>&#187; data-abbr=&#187;HAL&#187;>HAL<\/abbr> \u0438 \u0434\u043e\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0438\u0441\u043f\u043b\u0435\u0435\u043c. <\/p>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 I2C \u0432 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0435\u043c \u0440\u0435\u0436\u0438\u043c\u0435. \u041c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b STM \u043f\u0440\u0438\u0443\u0447\u0438\u043b\u0438 \u043c\u0435\u043d\u044f, \u0447\u0442\u043e \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u043c\u0438 (\u0430 \u043f\u043e-\u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443 \u0438 \u043d\u0435 \u0441 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u043c\u0438) \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u044b \u043e\u0442 \u0437\u0430\u0432\u0438\u0441\u0430\u043d\u0438\u044f &#8212; \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0432 \u0442\u0435\u043b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u0438 \u043f\u0440\u0438 \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u0438\u0438 \u043e\u043d\u043e\u0433\u043e \u0432\u044b\u0445\u043e\u0434\u0438\u0442\u044c \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 TIMEOUT. \u0414\u043b\u044f \u043e\u0442\u0441\u0447\u0435\u0442\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f SysTick \u0442\u0430\u0439\u043c\u0435\u0440. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u044f \u0432\u044b\u043d\u0435\u0441 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442. <\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0442\u0430\u0441\u043a\u0430\u0442\u044c \u0432\u0441\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 HAL \u0432 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u044f \u043f\u043e\u043b\u043e\u0436\u0438\u043b \u0438\u0445 \u0432 \u043f\u0430\u043f\u043a\u0443 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0441 \u043f\u0430\u043f\u043a\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0441\u044f, \u043d\u0430\u0434\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u043f\u0443\u0442\u044c \u043a \u044d\u0442\u043e\u0439 \u043f\u0430\u043f\u043a\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430\u0436\u0430\u0432 Project -> Properties. \u0412 \u043e\u0442\u043a\u0440\u044b\u0432\u0448\u0435\u043c\u0441\u044f \u043e\u043a\u043d\u0435 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c C\/C++ General -> Path and symbols, \u0432 \u043f\u043e\u043b\u0435 Languages \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043d\u0430 GNU C \u0438 \u0432 \u043f\u043e\u043b\u0435 include directories \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0443 &#171;<code>\/${ProjName}\/HAL<\/code>&#171;. \u042d\u0442\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u043f\u0430\u043f\u043a\u0443 \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/fc5\/46d\/575\/fc546d5758b4b40460f4d08f266907a0.jpg\" width=\"1269\" height=\"572\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fc5\/46d\/575\/fc546d5758b4b40460f4d08f266907a0.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>\u0412 \u0434\u0435\u0440\u0435\u0432\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0449\u0435\u043b\u043a\u0430\u0435\u043c \u043f\u0440\u0430\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043c\u044b\u0448\u0438 \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0430\u043f\u043a\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 Add -> External Linked Folder. \u0424\u0430\u0439\u043b\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0430\u043f\u043a\u0438 \u0434\u043e\u0431\u0430\u0432\u044f\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438.<\/p>\n<p>\u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <code>\"i2c_hal.h\"<\/code> \u044f \u043e\u043f\u0438\u0440\u0430\u043b\u0441\u044f \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440 I2C_EEPROM. \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0432\u0437\u044f\u043b \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043d\u0435 \u0431\u0443\u0434\u0443 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u043a\u0440\u043e\u0435\u0442 ~95% \u0432\u0441\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c.<\/p>\n<p>\u041d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u043d\u0438\u0436\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0435\u0434\u043e\u043c\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441 \u0430\u0434\u0440\u0435\u0441\u043e\u043c 0b1101000 \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442 \u0432\u0435\u0434\u0443\u0449\u0435\u0433\u043e \u043a \u0432\u0435\u0434\u043e\u043c\u043e\u043c\u0443. \u041d\u0430 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0441\u0445\u0435\u043c\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0432\u0435\u0434\u043e\u043c\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0442\u0432\u0435\u0442\u0438\u043b\u043e, \u0447\u0442\u043e \u0433\u043e\u0442\u043e\u0432\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u0430 \u043d\u0430 \u043d\u0438\u0436\u043d\u0435\u0439 \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043b\u043e (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441 \u0442\u0430\u043a\u0438\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u043d\u0430 \u0448\u0438\u043d\u0435 \u043d\u0435\u0442).<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9f5\/73e\/c55\/9f573ec553f179d00c5f784859d22183.png\" width=\"708\" height=\"429\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9f5\/73e\/c55\/9f573ec553f179d00c5f784859d22183.png\"\/><\/figure>\n<p>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0431\u0430\u0439\u0442 \u0432\u044b\u043d\u0435\u0441\u0435\u043c \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e:<\/p>\n<pre><code class=\"cpp\">uint8_t HAL_I2C_Transmit (I2C_TypeDef *i2c_periph,                            uint8_t DevAddress,                            uint8_t *pData,                            uint16_t Size,                            uint32_t i2c_timeout)<\/code><\/pre>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438: <\/p>\n<ol>\n<li>\n<p><code>I2C_TypeDef *i2c_periph<\/code> &#8212; \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0443\u044e \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e\u0431 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435. \u0422\u0430\u043a \u043a\u0430\u043a I2C \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u041c\u041a \u043e\u0434\u0438\u043d, \u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d: <code>I2C1<\/code>;<\/p>\n<\/li>\n<li>\n<p><code>uint8_t DevAddress<\/code> &#8212; \u0430\u0434\u0440\u0435\u0441 \u0432\u0435\u0434\u043e\u043c\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430;<\/p>\n<\/li>\n<li>\n<p><code>uint8_t *pData<\/code> &#8212; \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432 \u0431\u0430\u0439\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c;<\/p>\n<\/li>\n<li>\n<p><code>uint16_t Size<\/code> &#8212; \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0439\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c;<\/p>\n<\/li>\n<li>\n<p><code>uint32_t i2c_timeout<\/code> &#8212; \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0435\u0431\u044b\u0432\u0430\u043d\u0438\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u043e\u0442\u0441\u0447\u0435\u0442\u0430\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430 (\u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445).<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u0440\u0438 \u0432\u0445\u043e\u0434\u0435 \u0432 \u043b\u044e\u0431\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0438\u043b\u0438 \u043f\u0440\u0438\u0435\u043c\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 \u043d\u0435\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f Timeout-\u0430.<\/p>\n<pre><code class=\"cpp\">uint32_t tickstart = get_tick();<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b \u0441\u0442\u0430\u0440\u0442, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0448\u0438\u043d\u0430 \u043d\u0435 \u0437\u0430\u043d\u044f\u0442\u0430. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0444\u043b\u0430\u0433 <code>I2C_FLAG_BUSY<\/code> \u0438 \u0436\u0434\u0435\u043c, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u0441\u0431\u0440\u043e\u0441\u0438\u0442\u0441\u044f, \u043d\u043e \u043d\u0435 \u0434\u043e\u043b\u044c\u0448\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0440\u0435\u0431\u044b\u0432\u0430\u043d\u0438\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041f\u043e\u0441\u043b\u0435 \u0441\u0431\u0440\u043e\u0441\u0430 \u0444\u043b\u0430\u0433\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0441\u0442\u0430\u0440\u0442 \u0438 \u0436\u0434\u0435\u043c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0444\u043b\u0430\u0433\u0430 <code>I2C_EVENT_MASTER_MODE_SELECT<\/code>. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043d\u0430\u0448\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0437\u0430\u0445\u0432\u0430\u0442\u0438\u043b\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0448\u0438\u043d\u043e\u0439.<\/p>\n<pre><code class=\"cpp\">\/* i2c master sends start signal only when the bus is idle *\/ while((I2C_GetFlagStatus( i2c_periph, I2C_FLAG_BUSY ) != RESET) &amp;&amp; (get_tick() - tickstart &lt; i2c_timeout)) ;      if(get_tick() - tickstart &lt; i2c_timeout) {         } else {                 return I2C_BUSY;                 } \/* send the start signal *\/ I2C_GenerateSTART( i2c_periph, ENABLE );  while(!I2C_CheckEvent( I2C1, I2C_EVENT_MASTER_MODE_SELECT )  &amp;&amp; (get_tick() - tickstart &lt; i2c_timeout)) ;            if(get_tick() - tickstart &lt; i2c_timeout) {         } else {                 return I2C_BUSY;                 }<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0432\u0435\u0434\u043e\u043c\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u041d\u0430\u0434\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0430\u0434\u0440\u0435\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u0434\u0432\u0438\u043d\u0443\u0442 \u043d\u0430 \u043e\u0434\u0438\u043d \u0431\u0438\u0442 \u0432\u043b\u0435\u0432\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u043b\u0430\u0434\u0448\u0438\u0439 \u0431\u0438\u0442 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0441 \u0434\u0430\u043d\u043d\u044b\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u0443 \u043c\u0435\u043d\u044f \u0447\u0430\u0441\u0442\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u0443\u0442\u0430\u043d\u0438\u0446\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445 \u041c\u041a \u0444\u0438\u0440\u043c\u044b Nordic \u043d\u0435 \u043d\u0430\u0434\u043e \u0441\u0434\u0432\u0438\u0433\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0432\u043b\u0435\u0432\u043e). \u0427\u0442\u043e\u0431\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043c\u043b\u0430\u0434\u0448\u0438\u0439 \u0431\u0438\u0442 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>I2C_Send7bitAddress<\/code> \u0443\u043a\u0430\u0436\u0435\u043c <code>I2C_Direction_Transmitter.<\/code> \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u0434\u043e\u0436\u0434\u0435\u043c\u0441\u044f \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0432\u0435\u0434\u043e\u043c\u043e\u0433\u043e, \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0439 \u0430\u0434\u0440\u0435\u0441 \u0435\u0441\u0442\u044c \u043d\u0430 \u0448\u0438\u043d\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0444\u043b\u0430\u0433\u0430 <code>I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED<\/code>. \u0415\u0441\u043b\u0438 \u0432\u0435\u0434\u043e\u043c\u043e\u0433\u043e \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u043d\u0435 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043d\u0430 \u0448\u0438\u043d\u0435, \u043e\u0442 \u0437\u0430\u0432\u0438\u0441\u0430\u043d\u0438\u044f \u043d\u0430\u0441 \u0441\u043f\u0430\u0441\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u0448\u043b\u0435\u0442 \u043d\u0430 \u0448\u0438\u043d\u0443 I2C \u0441\u0438\u0433\u043d\u0430\u043b \u0441\u0442\u043e\u043f \u0438 \u0432\u0435\u0440\u043d\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>I2C_ADDR_NACK<\/code>.<\/p>\n<pre><code class=\"cpp\">I2C_Send7bitAddress( i2c_periph, DevAddress, I2C_Direction_Transmitter );  \/* address flag set means i2c slave sends ACK *\/ while((!I2C_CheckEvent( i2c_periph, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED )) &amp;&amp; (get_tick() - tickstart &lt; i2c_timeout));      if(get_tick() - tickstart &lt; i2c_timeout) {       } else {               I2C_GenerateSTOP( i2c_periph, ENABLE );               return I2C_ADDR_NACK;               }<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043f\u043e\u043b\u0435\u0437\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e. \u0412 \u0446\u0438\u043a\u043b\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <code>I2C_SendData( i2c_periph, *pData )<\/code> , \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0431\u0443\u0444\u0435\u0440, \u0447\u0442\u043e\u0431\u044b \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043f\u0440\u043e\u0445\u043e\u0434\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0431\u0430\u0439\u0442 \u0438 \u0436\u0434\u0435\u043c, \u043a\u043e\u0433\u0434\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0444\u043b\u0430\u0433 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 <code>I2C_EVENT_MASTER_BYTE_TRANSMITTED<\/code>. \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0430 \u0448\u0438\u043d\u0443 \u0441\u0438\u0433\u043d\u0430\u043b \u0421\u0422\u041e\u041f \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c  <code>I2C_OK<\/code>.<\/p>\n<pre><code class=\"cpp\">for(count = 0; count &lt; Size; count ++) {    I2C_SendData( i2c_periph, *pData );   \/* increment pointer to the next byte to be written *\/   pData++;   \/* wait until transmission complete *\/   while((!I2C_CheckEvent( i2c_periph, I2C_EVENT_MASTER_BYTE_TRANSMITTED )) &amp;&amp; (get_tick() - tickstart &lt; i2c_timeout));      if(get_tick() - tickstart &lt; i2c_timeout) {       } else {               I2C_GenerateSTOP( i2c_periph, ENABLE );               return I2C_TIMEOUT;               } }    I2C_GenerateSTOP( i2c_periph, ENABLE ); return I2C_OK;<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u0440\u0438\u0435\u043c\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0431\u0430\u0439\u0442:<\/p>\n<pre><code class=\"cpp\">uint8_t HAL_I2C_Receive (I2C_TypeDef *i2c_periph,                            uint8_t DevAddress,                            uint8_t *pData,                            uint16_t Size,                            uint32_t i2c_timeout)<\/code><\/pre>\n<p>\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u0438\u0435\u043c\u0430 \u0442\u0430\u043a\u0438\u0435 \u0436\u0435, \u043a\u0430\u043a \u0438 \u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438, \u0441 \u0440\u0430\u0437\u043d\u0438\u0446\u0435\u0439 \u043b\u0438\u0448\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u044b \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0439\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u044c.<\/p>\n<p>\u0417\u0430\u043f\u0440\u043e\u0441 \u0432\u0435\u0434\u043e\u043c\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u043f\u0440\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0435\u043c\u0443 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432\u0435\u0434\u043e\u043c\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u0448\u0438\u043d\u0443, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043c\u043b\u0430\u0434\u0448\u0438\u0439 \u0431\u0438\u0442 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432 &#171;1&#187;. \u0418\u0437\u043c\u0435\u043d\u0438\u043c \u0432\u0442\u043e\u0440\u043e\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>I2C_Send7bitAddress( i2c_periph, DevAddress, I2C_Direction_Receiver )<\/code>. \u0417\u0430\u0442\u0435\u043c \u0434\u043e\u0436\u0434\u0435\u043c\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0444\u043b\u0430\u0433\u0430 <code>I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED<\/code> \u0438 \u043f\u0435\u0440\u0435\u0432\u0435\u0434\u0435\u043c \u041c\u041a \u0432 \u0440\u0435\u0436\u0438\u043c <abbr class=\"habraabbr\" title=\"Acknolege - \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0432 \u043a\u043e\u043d\u0446\u0435 \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b ACK \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0435\u0434\u043e\u043c\u043e\u043c\u0443, \u0447\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0431\u0430\u0439\u0442 \u0442\u043e\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043d\u044f\u0442.\" data-title=\"&lt;p>Acknolege &#8212; \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0432 \u043a\u043e\u043d\u0446\u0435 \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b ACK \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0435\u0434\u043e\u043c\u043e\u043c\u0443, \u0447\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0431\u0430\u0439\u0442 \u0442\u043e\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043d\u044f\u0442.&lt;\/p>&#187; data-abbr=&#187;ACK&#187;>ACK<\/abbr> \u0432\u044b\u0437\u0432\u0430\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>I2C_AcknowledgeConfig( i2c_periph, ENABLE )<\/code>.<\/p>\n<pre><code class=\"cpp\">\/* i2c master sends start signal only when the bus is idle *\/ while((I2C_GetFlagStatus( i2c_periph, I2C_FLAG_BUSY ) != RESET) &amp;&amp; (get_tick() - tickstart &lt; i2c_timeout)) ;  if(get_tick() - tickstart &lt; i2c_timeout) {     } else {             return I2C_BUSY;             }  \/* send the start signal *\/ I2C_GenerateSTART( I2C1, ENABLE ); while(!I2C_CheckEvent( I2C1, I2C_EVENT_MASTER_MODE_SELECT )  &amp;&amp; (get_tick() - tickstart &lt; i2c_timeout)) ;  if(get_tick() - tickstart &lt; i2c_timeout) {     } else {             I2C_GenerateSTOP( i2c_periph, ENABLE );             return I2C_BUSY;             }  I2C_Send7bitAddress( i2c_periph, DevAddress, I2C_Direction_Receiver ); \/* address flag set means i2c slave sends ACK *\/ while((!I2C_CheckEvent( i2c_periph, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED )) &amp;&amp; (get_tick() - tickstart &lt; i2c_timeout));  if(get_tick() - tickstart &lt; i2c_timeout){     } else {             I2C_GenerateSTOP( i2c_periph, ENABLE );             return I2C_ADDR_NACK;             }  I2C_AcknowledgeConfig( i2c_periph, ENABLE ); <\/code><\/pre>\n<p>\u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 \u0432\u0435\u0434\u043e\u043c\u043e\u0433\u043e. \u0412 \u0446\u0438\u043a\u043b\u0435 \u0436\u0434\u0435\u043c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0444\u043b\u0430\u0433\u0430 <code>I2C_FLAG_RXNE<\/code>, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u043a\u0430 \u0432 \u0431\u0443\u0444\u0435\u0440\u0435 \u043d\u0435 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0431\u0430\u0439\u0442 \u0434\u0430\u043d\u043d\u044b\u0445. \u0417\u0430\u0442\u0435\u043c \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u043c \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0439 \u0431\u0430\u0439\u0442 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 <code>*pData = I2C_ReceiveData( i2c_periph )<\/code> \u0438 \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u044d\u0442\u043e\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 <code>pData++<\/code>. \u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u0438\u0435\u043c\u0430 \u043f\u0440\u0435\u0434\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0435\u0434\u043e\u043c\u043e\u043c\u0443, \u0447\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0431\u0430\u0439\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439. \u041a\u043e\u0433\u0434\u0430 \u0441\u0447\u0435\u0442\u0447\u0438\u043a <code>count<\/code> \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u0435\u043d \u043d\u043e\u043c\u0435\u0440\u0443 \u043f\u0440\u0435\u0434\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0431\u0430\u0439\u0442\u0430, \u0432\u044b\u0437\u043e\u0432\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>I2C_AcknowledgeConfig( i2c_periph, DISABLE )<\/code>. \u043f\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044e \u043f\u0440\u0438\u0435\u043c\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0441\u0438\u043b\u043e \u043b\u0438 \u0432\u0440\u0435\u043c\u044f TIMEOUT, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 &#8212; \u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043d\u044f\u0442\u044b \u0443\u0441\u043f\u0435\u0448\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043b\u0430\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b \u0421\u0422\u041e\u041f.<\/p>\n<pre><code class=\"cpp\"> for(count = 0; count &lt; Size; count ++)   {       \/* wait until data received *\/       while((I2C_GetFlagStatus( i2c_periph, I2C_FLAG_RXNE ) ==  RESET) &amp;&amp; (get_tick() - tickstart &lt; i2c_timeout));        if( count == (Size-2) )               {                \/*before receiving last byte and after receiving byte-1 disable ACK for last byte *\/               I2C_AcknowledgeConfig( i2c_periph, DISABLE );               }        \/* receive data and store in buffer *\/       *pData = I2C_ReceiveData( i2c_periph );       pData++;   }        \/* check timeout while receiving data *\/       if(get_tick() - tickstart > i2c_timeout)           {            I2C_GenerateSTOP( i2c_periph, ENABLE );            return I2C_TIMEOUT;           }        I2C_GenerateSTOP( i2c_periph, ENABLE );  return I2C_OK;<\/code><\/pre>\n<p>\u042d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c I2C (\u043a\u043e\u0433\u043e-\u0442\u043e \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445 \u0438\u043b\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 I2C), \u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 STM32 \u043c\u043d\u0435 \u043d\u0440\u0430\u0432\u044f\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432\/\u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u0435\u0434\u043e\u043c\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.<\/p>\n<pre><code class=\"cpp\">uint8_t HAL_I2C_Mem_Write (I2C_TypeDef *i2c_periph,                             uint8_t DevAddress,                             uint8_t MemAddress,                             uint8_t *pData,                             uint16_t Size,                             uint32_t i2c_timeout)  uint8_t HAL_I2C_Mem_Read (I2C_TypeDef *i2c_periph,                            uint8_t DevAddress,                            uint8_t MemAddress,                            uint8_t *pData,                            uint16_t Size,                            uint32_t i2c_timeout) <\/code><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>HAL_I2C_Mem_Write<\/code> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0442\u0443 \u0436\u0435 \u0441\u0430\u043c\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0435\u0434\u043e\u043c\u043e\u043c\u0443 \u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0435\u0434 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c \u0431\u0430\u0439\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u0430\u043c\u044f\u0442\u0438\/\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 <code>uint8_t MemAddres<\/code>.<\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>HAL_I2C_Mem_Read<\/code> \u0441\u043e\u0432\u043c\u0435\u0449\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u0430\u043c\u044f\u0442\u0438\/\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0432\u0435\u0434\u043e\u043c\u043e\u043c\u0443 \u0438 \u043f\u0440\u0438\u0435\u043c\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442 \u0432\u0435\u0434\u043e\u043c\u043e\u0433\u043e.<\/p>\n<h2>\u0412\u0440\u0435\u043c\u044f \u043f\u043e\u043c\u0438\u0433\u0430\u0442\u044c \u0434\u0438\u0441\u043f\u043b\u0435\u0435\u043c<\/h2>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u044b \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e <a href=\"https:\/\/github.com\/SL-RU\/stm32libs\/tree\/master\/stm32f10x\/ssd1306\" rel=\"noopener noreferrer nofollow\">\u0434\u0430\u043d\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443<\/a> \u0440\u0430\u0431\u043e\u0442\u044b \u0441 SSD1306 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u0430\u0432\u043d\u043e \u043d\u0430 \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0445 \u041c\u041a. \u0421\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u043f\u0430\u043f\u043a\u0443 \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u0434\u0438\u0441\u043f\u043b\u0435\u044f \u0438 \u0448\u0440\u0438\u0444\u0442\u043e\u043c \u0432 \u043f\u0430\u043f\u043a\u0443 User \u0432 \u043a\u043e\u0440\u043d\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u0434\u0435\u0440\u0435\u0432\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u0430\u043f\u043a\u0443 ssd1306 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 Add -> Existing Folder \u043f\u0440\u043e\u043f\u0438\u0448\u0435\u043c \u0432 \u043c\u0435\u043d\u044e Path &amp; Symbols <code>\/${ProjName}\/User\/ssd1306<\/code> \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 HAL. <\/p>\n<p>\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0441\u043d\u0443\u043b\u0438\u0441\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0439 <code>SSD1306_writecommand \u0438 SSD1306_UpdateScreen<\/code>. \u0412 \u043d\u0438\u0445 \u0431\u044b\u043b\u0438 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e I2C \u043d\u0430 \u0432\u044b\u0448\u0435\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f CH32V003. \u0412 \u0444\u0430\u0439\u043b\u0435 <code>\"SSD1306.h\"<\/code> \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <code>#include \"i2c_hal.h<\/code>&#187; \u0438 <code>#include \"systick_hal.h\"<\/code>. \u0412 main.c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c <code>#include \"SSD1306.h\"<\/code> \u0438 <code>#include \"systick_hal.h\" <\/code>\u0438 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u043a \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0434\u0438\u0441\u043f\u043b\u0435\u0435\u043c.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c SysTick, I2C, ssd1306 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0434\u0438\u0441\u043f\u043b\u0435\u0435\u043c \u0432 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435. \u0422\u0430\u043a \u0436\u0435 \u043c\u0435\u043d\u044f\u0435\u043c \u0432\u0441\u0435 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u0441 <code>Delay_Ms(500)<\/code> \u043d\u0430 <code>delay_1ms(500)<\/code>, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441\u0434\u0435\u043b\u0430\u043d\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c \u0442\u0430\u0439\u043c\u0435\u0440\u043e\u043c.<\/p>\n<p>\u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>HAL_I2C_Init<\/code> \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0432 \u0433\u0435\u0440\u0446\u0430\u0445 \u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u041c\u041a \u043d\u0430 \u0448\u0438\u043d\u0435 I2C \u043a\u0430\u043a \u0432\u0435\u0434\u043e\u043c\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u043d\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0442\u0430\u043a).<\/p>\n<p>\u0412 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u0431\u0443\u0444\u0435\u0440 \u0434\u0438\u0441\u043f\u043b\u0435\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0447\u0435\u0440\u043d\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 &#171;Blink OFF&#187;. \u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u043b\u0435\u0432\u043e\u0433\u043e \u0443\u0433\u043b\u0430 \u043d\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0438 \u0431\u0443\u0444\u0435\u0440 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u0439. \u0417\u0430\u0442\u0435\u043c, \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u0432 \u043f\u043e\u043b\u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0431\u0435\u043b\u044b\u043c \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u043e\u0432\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430.<\/p>\n<pre><code class=\"cpp\">uint8_t buff[32];     Systick_Init ();     HAL_I2C_Init(400000, 0xEE);     SSD1306_Init();       while(1)     {         SSD1306_Fill(SSD1306_COLOR_BLACK);         sprintf (buff,\"Blink OFF\");         SSD1306_GotoXY(0, 0);         SSD1306_Puts(buff, &amp;Font_11x18, SSD1306_COLOR_WHITE);         SSD1306_UpdateScreen();         delay_1ms(500);          SSD1306_Fill(SSD1306_COLOR_WHITE);         sprintf (buff,\"Blink ON\");         SSD1306_GotoXY(0, 0);         SSD1306_Puts(buff, &amp;Font_11x18, SSD1306_COLOR_BLACK);         SSD1306_UpdateScreen();         delay_1ms(500);          GPIO_WriteBit(GPIOD, GPIO_Pin_3, (i == 0) ? (i = Bit_SET) : (i = Bit_RESET));     }<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0422\u044f\u0436\u0435\u043b\u0430\u044f \u0433\u0438\u0444 \u043c\u0438\u0433\u0430\u043d\u0438\u044f \u0434\u0438\u0441\u043f\u043b\u0435\u0435\u043c<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/232\/e9d\/7ae\/232e9d7ae693469bc8f835a263e6e9ce.gif\" width=\"301\" height=\"389\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/232\/e9d\/7ae\/232e9d7ae693469bc8f835a263e6e9ce.gif\"\/><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<h2>\u0418\u0437\u043c\u0435\u0440\u044f\u0435\u043c \u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0430\u0446\u0438\u044e CO2<\/h2>\n<p>\u0414\u043b\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043f\u044b\u0442\u043e\u0432 \u0441 \u043c\u0435\u0434\u0438\u0446\u0438\u043d\u0441\u043a\u0438\u043c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043e\u043c \u044f \u0437\u0430\u043a\u0430\u0437\u0430\u043b \u043c\u043e\u0434\u0443\u043b\u044c \u0434\u0430\u0442\u0447\u0438\u043a\u0430 CO2 SCD41.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/94e\/a43\/f7b\/94ea43f7bb215ccb38be8f4eaa39bb44.png\" width=\"948\" height=\"738\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/94e\/a43\/f7b\/94ea43f7bb215ccb38be8f4eaa39bb44.png\"\/><\/figure>\n<p>\u0414\u0430\u0442\u0447\u0438\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e \u0444\u043e\u0442\u043e\u0430\u043a\u0443\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f. \u041f\u0440\u0438 \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u0418\u041a \u0441\u0432\u0435\u0442\u0430 \u043d\u0430 \u043c\u043e\u043b\u0435\u043a\u0443\u043b\u044b CO2 \u043e\u043d\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u043a\u043e\u043b\u0435\u0431\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u043d\u043e\u043c \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c \u041c\u041a (\u0432 \u043e\u0431\u0449\u0438\u0445 \u0447\u0435\u0440\u0442\u0430\u0445, \u043a\u0430\u043a \u044f \u043f\u043e\u043d\u044f\u043b). \u0414\u0430\u043d\u043d\u044b\u0439 \u0434\u0430\u0442\u0447\u0438\u043a \u0441\u043d\u0430\u0431\u0436\u0435\u043d \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0430\u043b\u0438\u0431\u0440\u043e\u0432\u043a\u0438. \u041e\u043d \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 CO2 \u0432 \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0435\u0439 \u0441\u0440\u0435\u0434\u0435, \u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0435\u0433\u043e \u0437\u0430 400 ppm (\u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0430\u0446\u0438\u044f \u0443\u0433\u043b\u0435\u043a\u0438\u0441\u043b\u043e\u0433\u043e \u0433\u0430\u0437\u0430 \u0432 \u0430\u0442\u043c\u043e\u0441\u0444\u0435\u0440\u0435 \u0443 \u0437\u0435\u043c\u043b\u0438). \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u0434\u0430\u0442\u0447\u0438\u043a, \u0445\u043e\u0442\u044c \u0438\u0437\u0440\u0435\u0434\u043a\u0430, \u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u0430\u0442\u043c\u043e\u0441\u0444\u0435\u0440\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f CO2. \u0418\u0437 \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442, \u0447\u0442\u043e \u0434\u0430\u0442\u0447\u0438\u043a \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0430\u0432\u0442\u043e\u043a\u0430\u043b\u0438\u0431\u0440\u043e\u0432\u043a\u0438 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u043c\u0435\u0449\u0430\u0442\u044c \u0432 \u0430\u0442\u043c\u043e\u0441\u0444\u0435\u0440\u0443 \u0447\u0438\u0441\u0442\u043e\u0433\u043e \u0433\u0430\u0437\u0430. \u042f \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043b \u0435\u0433\u043e \u0432 \u0430\u0442\u043c\u043e\u0441\u0444\u0435\u0440\u0443 \u043a\u0438\u0441\u043b\u043e\u0440\u043e\u0434\u0430 (\u043f\u043e \u043d\u043e\u0440\u043c\u0430\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 CO2 \u043c\u0435\u043d\u0435\u0435 100 ppm) \u0438 \u0434\u0430\u0442\u0447\u0438\u043a \u0441\u0442\u0430\u043b \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u0432\u044b\u0448\u0430\u0442\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f. \u0412 \u0441\u0432\u043e\u0438\u0445 \u043e\u043f\u044b\u0442\u0430\u0445 \u044f \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u044e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043a\u0430\u043b\u0438\u0431\u0440\u043e\u0432\u043a\u0443, \u043d\u043e \u0434\u043b\u044f \u0431\u044b\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f.<\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u043c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 Arduino, \u043d\u043e \u043e\u043d\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043d\u0430 C++ \u0438 \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043d\u0435 \u0434\u043b\u044f CH32V003, \u0442\u0430\u043a \u0447\u0442\u043e \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0441\u0432\u043e\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e. \u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u043f\u0430\u043f\u043a\u0443 \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 scd4x \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0443\u0442\u044c \u043a \u043d\u0435\u0439, \u043a\u0430\u043a \u044d\u0442\u043e \u0443\u0436\u0435 \u0434\u0435\u043b\u0430\u043b\u0438 \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u0434\u043b\u044f ssd1306. <\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u0430\u0442\u0447\u0438\u043a\u0430, \u043d\u0430\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0438 \u043f\u0440\u0438\u0435\u043c\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438:<\/p>\n<pre><code class=\"cpp\">uint8_t scd4x_transmit_data (uint8_t *pData, uint16_t Size) {     return HAL_I2C_Transmit(I2C_SCD4x, SCD4x_SLAVE_ADDR, pData, Size, I2C_Timeout); }  uint8_t scd4x_receive_data (uint8_t *pData, uint16_t Size) {     return HAL_I2C_Receive(I2C_SCD4x, SCD4x_SLAVE_ADDR, pData, Size, I2C_Timeout); }<\/code><\/pre>\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u0442 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0431\u0430\u0439\u0442 (\u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043c\u0430\u043d\u0434 \u0438 \u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043d\u0430 \u0434\u0430\u0442\u0447\u0438\u043a). \u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u043a\u043e\u043c\u0430\u043d\u0434 \u0442\u0430\u043a \u0436\u0435 \u0432\u044b\u043d\u0435\u0441\u0435\u043c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e:<\/p>\n<pre><code class=\"cpp\">uint8_t scd4x_send_command (uint16_t command) {     uint8_t buff[2];     buff [0] = (uint8_t)(command>>8);     buff [1] = (uint8_t)command;     return scd4x_transmit_data(buff, 2); }<\/code><\/pre>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0443\u0441\u044c \u0442\u0440\u0435\u043c\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u043c. \u041f\u0435\u0440\u0432\u0443\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439.<\/p>\n<pre><code class=\"cpp\">uint8_t scd4x_Init(void) {     uint8_t err_code;     err_code = scd4x_send_command (SCD4x_START_PERIODIC_MEASUREMENT);     return err_code; }<\/code><\/pre>\n<p>\u0421 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0432\u0440\u044f\u0434 \u043b\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0443\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435:<\/p>\n<pre><code class=\"cpp\">uint8_t scd4x_read_measurement(uint16_t* co2_conc, int16_t* temp, uint16_t* humidity) {     uint8_t buff [10];     uint8_t err_code = 0;     scd4x_send_command (SCD4x_READ_MEASUREMENT);     err_code = scd4x_receive_data (buff, 9);     if (err_code != 0)     {         return err_code; \/\/return i2c err code in case of i2c troubles     }     if (buff[2] != sensirion_common_generate_crc(buff,2)        ||buff[5] != sensirion_common_generate_crc(&amp;buff[3],2)        ||buff[8] != sensirion_common_generate_crc(&amp;buff[6],2))     {         return 0xFF;\/\/crc error     }     *co2_conc = ((uint16_t)buff[0]&lt;&lt;8) + buff[1];     *temp = (int32_t)(((uint16_t)buff[3]&lt;&lt;8) + buff[4])*175\/65535 - 45;     *humidity = (int32_t)(((uint16_t)buff[3]&lt;&lt;8) + buff[4])*1000\/65535;     return 0; }<\/code><\/pre>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u0434\u0430\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0430\u0446\u0438\u0438 CO2 \u0432 ppm, \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u0432 \u0433\u0440\u0430\u0434\u0443\u0441\u0430\u0445 \u0426\u0435\u043b\u044c\u0441\u0438\u044f \u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u0430\u0445*10. \u0412 \u0442\u0435\u043b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438  \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0447\u0442\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>SCD4x_READ_MEASUREMENT<\/code>, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c 9 \u0431\u0430\u0439\u0442 \u043e\u0442 \u0434\u0430\u0442\u0447\u0438\u043a\u0430. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u043b\u0438 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0430 \u0448\u0438\u043d\u0435 I2C, \u0438 \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0441\u043b\u0443\u0447\u0438\u043b\u0438\u0441\u044c, \u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043a\u043e\u0434 \u043e\u0448\u0438\u0431\u043a\u0438. \u0417\u0430\u0442\u0435\u043c \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0435 \u0441\u0443\u043c\u043c\u044b \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u043e\u0439. \u0424\u0443\u043d\u043a\u0446\u0438\u044e <code>sensirion_common_generate_crc<\/code> \u043b\u044e\u0431\u0435\u0437\u043d\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u043b \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u0434\u0430\u0442\u0447\u0438\u043a\u0430. \u0415\u0441\u043b\u0438 \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u043b\u0430 &#8212; \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c <code>crc_error<\/code>. \u0417\u0430\u0442\u0435\u043c \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u0430\u043c, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438, \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c 0 \u043a\u0430\u043a \u0441\u0432\u0438\u0434\u0435\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043d\u044f\u0442\u044b \u0443\u0441\u043f\u0435\u0448\u043d\u043e. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u0441\u0438\u043b\u044c\u043d\u043e \u0442\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c, \u043d\u043e \u0434\u0430\u0442\u0447\u0438\u043a \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u044d\u043d\u0435\u0440\u0433\u0438\u0438 (\u0441\u0440\u0435\u0434\u043d\u0438\u0439 \u0442\u043e\u043a 15 \u043c\u0410) \u0438 \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443 \u0434\u0430\u0442\u0447\u0438\u043a\u0430, \u043d\u043e \u043d\u0435 \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0435\u0433\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0430. \u0414\u0430\u043d\u043d\u043e\u0435 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0432\u043d\u0443\u0442\u0440\u0438 \u0434\u0430\u0442\u0447\u0438\u043a\u0430.<\/p>\n<p>\u0412 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 I2C \u043c\u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043c\u043e\u0433 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440. \u042f \u043a\u0443\u043f\u0438\u043b \u0435\u0433\u043e \u043d\u0435 \u0442\u0430\u043a \u0434\u0430\u0432\u043d\u043e \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u0441\u0432\u043e\u0435\u0439 \u0436\u0438\u0437\u043d\u0438 \u0431\u0435\u0437 \u043d\u0435\u0433\u043e. \u0420\u0430\u043d\u044c\u0448\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u043b \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043e\u0441\u0446\u0438\u043b\u043e\u0433\u0440\u0430\u0444\u0430, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u044b \u0441\u0447\u0438\u0442\u0430\u0442\u044c. \u0410 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0434\u0430\u0435\u0442 \u043a\u0440\u0430\u0441\u0438\u0432\u0443\u044e \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0447\u0442\u0435\u043d\u0438\u044f <code>scd4x_read_measurement<\/code> \u0432 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0435. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/d98\/8e1\/cd4\/d988e1cd47dde72e980156529e5959f9.jpg\" width=\"1078\" height=\"274\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d98\/8e1\/cd4\/d988e1cd47dde72e980156529e5959f9.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0421\u0422\u0410\u0420\u0422 (S) \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 <code>0xC4<\/code> &#8212; \u044d\u0442\u043e  \u0430\u0434\u0440\u0435\u0441 \u0432\u0435\u0434\u043e\u043c\u043e\u0433\u043e <code>0x62&lt;&lt;1 <\/code>\u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0431\u0438\u0442\u0430 \u0417\u0410\u041f\u0418\u0421\u042c(W), \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043e\u0442 \u043d\u0435\u0433\u043e \u043e\u0442\u0432\u0435\u0442 ACK(A), \u0437\u0430\u0442\u0435\u043c \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0447\u0442\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 <code>0xEC 0x05 (SCD4x_READ_MEASUREMENT).<\/code> \u041f\u0440\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u0432\u0435\u0434\u043e\u043c\u044b\u0439 \u043e\u0442\u0432\u0435\u0442\u0438\u043b ACK, \u043d\u043e \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u0443\u0436\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u0421\u0422\u041e\u041f (P).<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/216\/110\/5fa\/2161105fa9c7a848d7eb333fbfc44d9a.jpg\" width=\"1088\" height=\"252\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/216\/110\/5fa\/2161105fa9c7a848d7eb333fbfc44d9a.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>\u0414\u043b\u044f \u043f\u0440\u0438\u0435\u043c\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u0441\u043d\u043e\u0432\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430 \u0448\u0438\u043d\u0443 \u0421\u0422\u0410\u0420\u0422 (S), \u0437\u0430\u0442\u0435\u043c <code>0xC5<\/code> &#8212; \u044d\u0442\u043e  \u0430\u0434\u0440\u0435\u0441 \u0432\u0435\u0434\u043e\u043c\u043e\u0433\u043e <code>0x62&lt;&lt;1 <\/code>\u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0431\u0438\u0442\u0430 \u0427\u0422\u0415\u041d\u0418\u0415(R), \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043e\u0442 \u0432\u0435\u0434\u043e\u043c\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442 ACK(A) \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435. \u0412 \u043a\u043e\u043d\u0446\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0432\u0435\u0434\u043e\u043c\u043e\u043c\u0443 ACK(A), \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043f\u0440\u0438\u0435\u043c\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0431\u0430\u0439\u0442\u0430 NACK(N), \u0447\u0442\u043e \u0432\u0438\u0434\u043d\u043e \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u043d\u0438\u0436\u0435. \u0412\u0441\u0435\u0433\u043e \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 9 \u0431\u0430\u0439\u0442 \u043e\u0442 \u0432\u0435\u0434\u043e\u043c\u043e\u0433\u043e, \u043a\u0430\u043a \u0438 \u0437\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043e.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/da0\/5a9\/31b\/da05a931b485ac704aca2bfea678e2bc.jpg\" width=\"1074\" height=\"268\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/da0\/5a9\/31b\/da05a931b485ac704aca2bfea678e2bc.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u043f\u0435\u0440\u0438\u043e\u0434 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 5 \u0441\u0435\u043a\u0443\u043d\u0434, \u0430 \u043c\u0435\u0436\u0434\u0443 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f\u043c\u0438 \u0434\u0430\u0442\u0447\u0438\u043a \u043d\u0435\u043e\u0445\u043e\u0442\u043d\u043e \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f\u043c\u0438, \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. <\/p>\n<pre><code class=\"cpp\">uint8_t scd4x_is_data_ready(void) {     uint8_t buff [3];     uint16_t status = 0;     uint8_t err_code = 0;     scd4x_send_command (SCD4x_GET_DATA_READY_STATUS);     err_code = scd4x_receive_data (buff, 3);     if (err_code != 0)     {         return err_code; \/\/return i2c err code in case of i2c troubles     }     status = ((uint16_t)buff[0]&lt;&lt;8) + buff[1];     status = status &amp; 0x07FF; \/\/set first 5 bits to zero     if (status)return 0; \/\/return 0 if data is ready     else return SCD4x_DATA_NOT_READY; }<\/code><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u0414\u0430\u0442\u0447\u0438\u043a \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>uint16_t<\/code>. \u041a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u043c\u043b\u0430\u0434\u0448\u0438\u0435 11 \u0431\u0438\u0442 \u0440\u0430\u0432\u043d\u044b \u043d\u0443\u043b\u044e &#8212; \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0433\u043e\u0442\u043e\u0432\u044b \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043b\u043e\u0436\u0438\u043c \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0435 \u0434\u0432\u0430 \u0431\u0430\u0439\u0442\u0430 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>status<\/code> \u0438 \u043e\u0431\u043d\u0443\u043b\u0438\u043c \u0441\u0442\u0430\u0440\u0448\u0438\u0435 5 \u0431\u0438\u0442. \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0440\u0430\u0432\u043d\u0430 0 &#8212; \u0434\u0430\u043d\u043d\u044b\u0435 \u0433\u043e\u0442\u043e\u0432\u044b \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u0435\u0440\u043d\u0435\u0442 0. \u0415\u0441\u043b\u0438 \u0436\u0435 \u043d\u0435 \u0433\u043e\u0442\u043e\u0432\u044b &#8212; \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c <code>SCD4x_DATA_NOT_READY<\/code>.<\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0438 \u0432\u044b\u0432\u043e\u0434 \u043d\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 &#171;Dushnometr&#187; (\u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0431\u044b \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c, \u043d\u043e \u0448\u0440\u0438\u0444\u0442 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442, \u0430 \u043a\u0438\u0440\u0438\u043b\u043b\u0438\u0446\u0443 \u043c\u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043b\u0435\u043d\u0438\u0432\u043e). \u041e\u0431\u044a\u044f\u0432\u0438\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u0430\u0442\u0447\u0438\u043a\u0430. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0435 \u0432\u0440\u0435\u043c\u044f, \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043c\u0435\u0436\u0434\u0443 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438 \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a, \u0432\u044b\u0432\u043e\u0434\u0438\u043c\u044b\u0445 \u043d\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u0439.<\/p>\n<pre><code class=\"cpp\">scd4x_Init();  SSD1306_Fill(SSD1306_COLOR_BLACK);       sprintf (buff,\"Dushnometr\");       SSD1306_GotoXY(0, 0);       SSD1306_Puts(buff, &amp;Font_11x18, SSD1306_COLOR_WHITE);       SSD1306_UpdateScreen();       delay_1ms(1500);  uint16_t co2_conc = 0, rh = 0; int16_t temp = 0; uint32_t time = 0, prev_time = 0; uint8_t sensor_disconnect = 0; uint8_t err_code; uint8_t data[32];<\/code><\/pre>\n<p>\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0432 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445, \u0438 \u043f\u0440\u0438 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 \u0434\u0430\u0442\u0447\u0438\u043a\u0430. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u0440\u0430\u0437\u0440\u044b\u0432 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u043c, \u043f\u043e\u0441\u043b\u0435 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0435.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u043d\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0430\u0446\u0438\u0438 \u0443\u0433\u043b\u0435\u043a\u0438\u0441\u043b\u043e\u0433\u043e \u0433\u0430\u0437\u0430, \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b, \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u0438 \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043c\u0435\u0436\u0434\u0443 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f\u043c\u0438. \u0412 \u043a\u0430\u0436\u0434\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430 \u043d\u0430 1 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0434\u043b\u044f \u0438\u043d\u0434\u0438\u043a\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<\/p>\n<pre><code class=\"cpp\">while(1)     {         err_code = scd4x_is_data_ready();         if (err_code == 0) \/\/data ready             {                  scd4x_read_measurement(&amp;co2_conc, &amp;temp, &amp;rh);                  time = (get_tick() - prev_time)\/100;                  prev_time = get_tick();              }         else if (err_code != SCD4x_DATA_NOT_READY) \/\/i2c bus error             {                  sensor_disconnect = 1;             }          if (sensor_disconnect)\/\/sensor reinit             {                 if (scd4x_Init() == 0){                     sensor_disconnect = 0;                     }             }                  SSD1306_Fill(SSD1306_COLOR_BLACK);          sprintf (data, \"CO2:%dppm\", co2_conc);         SSD1306_GotoXY(0, 0);         SSD1306_Puts(data, &amp;Font_11x18, SSD1306_COLOR_WHITE);          sprintf (data, \"RH:%d.%d  T:%d'C\",rh\/10, rh%10, temp);         SSD1306_GotoXY(0, 25);         SSD1306_Puts(data, &amp;Font_7x10, SSD1306_COLOR_WHITE);          sprintf (data, \"time:%d.%d d\/c:%d\",time\/10, time%10, sensor_disconnect);         SSD1306_GotoXY(0, 40);         SSD1306_Puts(data, &amp;Font_7x10, SSD1306_COLOR_WHITE);          SSD1306_UpdateScreen();         delay_1ms(10);         GPIO_WriteBit(GPIOD, GPIO_Pin_3,Bit_RESET);         delay_1ms(1);         GPIO_WriteBit(GPIOD, GPIO_Pin_3,Bit_SET);     }<\/code><\/pre>\n<p>\u0414\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u0435\u043d\u0441\u043e\u0440\u0430 \u0432\u044b\u0432\u0435\u0434\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>sensor_disconnect<\/code> \u043d\u0430 \u044d\u043a\u0440\u0430\u043d. \u0415\u0441\u043b\u0438 \u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c \u0434\u0430\u0442\u0447\u0438\u043a \u0438\u0437 \u0440\u0430\u0437\u044a\u0435\u043c\u0430, \u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u043d\u0435\u0442 &#171;1&#187;, \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u043d\u0435\u0442 \u0441\u043d\u043e\u0432\u0430 &#171;0&#187; \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043e\u0431\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u043f\u043e \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/e7e\/4f1\/4fc\/e7e4f14fcea7d24d4136b2a742a39e04.jpg\" alt=\"\u0421\u0430\u043a\u0440\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0440\u0430\u0437\u0430 \u0438\u0437 \u0436\u0443\u0440\u043d\u0430\u043b\u0430 \u0420\u0410\u0414\u0418\u041e: &quot;\u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432 \u043d\u0430\u043b\u0430\u0434\u043a\u0435 \u043d\u0435 \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f&quot;.\" title=\"\u0421\u0430\u043a\u0440\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0440\u0430\u0437\u0430 \u0438\u0437 \u0436\u0443\u0440\u043d\u0430\u043b\u0430 \u0420\u0410\u0414\u0418\u041e: &quot;\u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432 \u043d\u0430\u043b\u0430\u0434\u043a\u0435 \u043d\u0435 \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f&quot;.\" width=\"1271\" height=\"1280\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e7e\/4f1\/4fc\/e7e4f14fcea7d24d4136b2a742a39e04.jpg\" data-blurred=\"true\"\/><\/p>\n<div><figcaption>\u0421\u0430\u043a\u0440\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0440\u0430\u0437\u0430 \u0438\u0437 \u0436\u0443\u0440\u043d\u0430\u043b\u0430 \u0420\u0410\u0414\u0418\u041e: &#171;\u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432 \u043d\u0430\u043b\u0430\u0434\u043a\u0435 \u043d\u0435 \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f&#187;.<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/9ff\/dd8\/ee1\/9ffdd8ee11611a9951d463fd8b1e4aa4.jpg\" alt=\"\u041f\u0440\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f sensor_disconnect \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0440\u0430\u0432\u043d\u043e\u0439 &quot;1&quot;.\" title=\"\u041f\u0440\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f sensor_disconnect \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0440\u0430\u0432\u043d\u043e\u0439 &quot;1&quot;.\" width=\"1278\" height=\"1210\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9ff\/dd8\/ee1\/9ffdd8ee11611a9951d463fd8b1e4aa4.jpg\" data-blurred=\"true\"\/><\/p>\n<div><figcaption>\u041f\u0440\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>sensor_disconnect<\/code> \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0440\u0430\u0432\u043d\u043e\u0439 &#171;1&#187;.<\/figcaption><\/div>\n<\/figure>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u041c\u041a CH32V003 \u043c\u043d\u0435 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u043e\u0441\u044c. \u0425\u043e\u0442\u044c \u043e\u043d \u043d\u0435 \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c\u0438 \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440\u043e\u043c, \u043a\u0430\u043a STM32, \u043d\u043e \u0432\u0441\u0435 \u0436\u0435 \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0439. \u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0435\u0439 \u043f\u043e \u0438\u0437\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u0438\u044e &#171;\u0414\u0443\u0448\u043d\u043e\u043c\u0435\u0442\u0440\u0430&#187;, \u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043c\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c I2C \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0430\u0441\u044c \u0434\u0430\u043d\u043d\u0430\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f, \u0442\u043e \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u043d\u0430 \u043c\u043e\u0439 \u0442\u0435\u043b\u0435\u0433\u0440\u0430&#8230; Oh, SHI~. \u0423 \u043c\u0435\u043d\u044f \u0436\u0435 \u0435\u0433\u043e \u043d\u0435\u0442 \u0438 \u0432\u0441\u0435\u043c \u043d\u0430\u0434\u043e\u0435\u043b\u0430 \u0440\u0435\u043a\u043b\u0430\u043c\u0430 \u044d\u0442\u0438\u0445 \u0432\u0430\u0448\u0438\u0445 \u043a\u0430\u043d\u0430\u043b\u043e\u0432!<\/p>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u043f\u0440\u0438\u043d\u0435\u0441\u0443 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u043e\u043b\u044c\u0437\u0443 \u0441\u0432\u043e\u0435\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u0435\u0439 I2C \u0434\u043b\u044f CH32V003. \u0412 <a href=\"https:\/\/github.com\/Sergo101\/CH32V003_stHAL\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a> \u0435\u0441\u0442\u044c \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 SPI \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u0432\u044b\u0448\u0435 I2C. \u0411\u0443\u0434\u0443 \u0448\u0430\u0433 \u0437\u0430 \u0448\u0430\u0433\u043e\u043c \u043f\u0440\u0438\u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0437\u0430\u0432\u0435\u0441\u0443 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u043e\u0439 \u0442\u0430\u0439\u043d\u044b.<\/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\/articles\/775724\/\"> https:\/\/habr.com\/ru\/articles\/775724\/<\/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<figure class=\"full-width\"><\/figure>\n<p>\u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u0438 \u0438\u0441\u043f\u044b\u0442\u044b\u0432\u0430\u044e\u0442 \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0438 \u0441 \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0430\u043c\u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432. \u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 &#171;\u0438\u0441\u043a\u043e\u043d\u043d\u043e \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0443\u044e&#187; \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043d\u0443\u044e \u0431\u0430\u0437\u0443. \u042d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u043a\u0443\u043f\u0430\u0435\u0442 \u0446\u0435\u043d\u043e\u0439 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c\u044e, \u043d\u043e \u043f\u0443\u0433\u0430\u0435\u0442 \u043f\u043b\u043e\u0445\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 \u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0430 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0445 \u043d\u0430\u043c \u044f\u0437\u044b\u043a\u0430\u0445. \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u043e\u043c \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 \u043d\u0430 \u044f\u0434\u0440\u0435 RISC-V \u0438 \u0441\u0434\u0435\u043b\u0430\u044e \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u043f\u0435\u0440\u0432\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e &#8212; \u0434\u0430\u0442\u0447\u0438\u043a \u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0430\u0446\u0438\u0438 \u0443\u0433\u043b\u0435\u043a\u0438\u0441\u043b\u043e\u0433\u043e \u0433\u0430\u0437\u0430 \u0432 \u0432\u043e\u0437\u0434\u0443\u0445\u0435\/\u043c\u0438\u0433\u0430\u043b\u043a\u0443 OLED \u0434\u0438\u0441\u043f\u043b\u0435\u0435\u043c \u0438 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c (\u043a\u0443\u0434\u0430 \u0436 \u0431\u0435\u0437 \u043c\u0438\u0433\u0430\u043b\u043a\u0438 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c). \u0412 <a href=\"https:\/\/github.com\/Sergo101\/CH32V003_stHAL\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a> \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d \u043f\u0440\u043e\u0435\u043a\u0442 \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0437\u0430\u0445\u043e\u0447\u0435\u0442 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0430\u043c\u0438.<\/p>\n<h2>\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u044f \u0441\u043b\u044b\u0448\u0430\u043b \u043f\u0440\u043e \u044f\u0434\u0440\u043e RISC-V \u0438 \u0435\u0433\u043e \u043d\u0430\u0440\u0430\u0441\u0442\u0430\u044e\u0449\u0443\u044e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u044c. \u041c\u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043d\u0430 \u044d\u0442\u043e\u043c \u044f\u0434\u0440\u0435. \u041c\u0438\u043a\u0440\u043e\u043d \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043e\u0449\u043d\u044b\u0439 <abbr class=\"habraabbr\" title=\"\u041c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\" data-title=\"&lt;p>a-title=&#187;&lt;p>\u041c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440&lt;\/p>&#187; data-abbr=&#187;\u041c\u041a&#187;>\u041c\u041a<\/abbr> \u043d\u0430 \u044f\u0434\u0440\u0435 RISC-V, \u043d\u043e \u0435\u0433\u043e \u0437\u0430\u043a\u0443\u043f\u043a\u0443 \u044f \u0434\u0430\u0436\u0435 \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b, \u0442\u0430\u043a \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043d\u043e\u043c\u0443 \u043b\u0438\u0446\u0443 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442 \u0434\u043b\u044f \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u043e\u0433\u043e \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430. <\/p>\n<p>\u0422\u0430\u043a \u0436\u0435 \u043c\u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u043b\u0438\u0441\u044c \u041c\u041a CH32 \u043e\u0442 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u043e\u0439 \u0444\u0438\u0440\u043c\u044b WCH. \u041e\u043d\u0430 \u0448\u0438\u0440\u043e\u043a\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c USB-UART CH340. \u042f \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0438 \u0440\u0435\u0448\u0438\u043b \u0437\u0430\u043a\u0430\u0437\u0430\u0442\u044c \u043c\u043b\u0430\u0434\u0448\u0438\u0439 \u041c\u041a \u0438\u0437 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430 RISC-V. \u041c\u0435\u043d\u044f \u0436\u0434\u0430\u043b \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439 \u0441\u044e\u0440\u043f\u0440\u0438\u0437: \u043d\u0430 \u0430\u043b\u0438 \u0437\u0430 1400 \u0440\u0443\u0431\u043b\u0435\u0439 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u0434\u0432\u0435 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u043b\u0430\u0442\u044b, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440 \u0438 \u043f\u043e \u043f\u044f\u0442\u044c \u041c\u041a \u043e\u0434\u043d\u0438\u043c \u043b\u043e\u0442\u043e\u043c!<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>CH32V003 \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0437\u0430\u043c\u0435\u043d\u0430 \u0432\u043e\u0441\u044c\u043c\u0438\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u041c\u041a STM8S003F3, \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \u0441 \u043d\u0438\u043c \u043f\u043e \u043d\u043e\u0433\u0430\u043c, \u043d\u043e \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043c. \u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c CH32V003 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 25 \u0440\u0443\u0431\u043b\u0435\u0439 \u0437\u0430 \u0448\u0442\u0443\u043a\u0443. \u0422\u0430\u043a \u0436\u0435 \u043d\u0435\u043c\u0430\u043b\u043e\u0432\u0430\u0436\u043d\u043e, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0439 \u041c\u041a \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u043c\u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430\u043c\u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432.<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044f \u041c\u041a CH32V003<\/figcaption><\/div>\n<\/figure>\n<h2>\u041c\u0438\u0433\u0430\u0435\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c<\/h2>\n<p>\u041c\u0438\u0433\u0430\u043d\u0438\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c &#8212; \u043a\u0430\u043d\u043e\u043d \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u0440\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u041c\u041a. \u0412 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u044b, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440\u0430 \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u043e\u0432\u043e\u0434\u043e\u0432. <\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u0441\u0442\u0430\u043d\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0441\u0440\u0435\u0434\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 <a href=\"http:\/\/www.mounriver.com\/download\" rel=\"noopener noreferrer nofollow\">MounRiver Studio<\/a>. \u041e\u0441\u043d\u043e\u0432\u0430 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u044b &#8212; Eclipse. \u042f \u0431\u044b \u043f\u043e\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043b \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u0440\u0435\u0434\u044b \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u0443\u0442\u044c \u043a \u043f\u0430\u043f\u043a\u0435 \u0438 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043b\u0438 \u043a\u0438\u0440\u0438\u043b\u043b\u0438\u0446\u044b (\u0441 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u043e\u0439 \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b, \u043d\u043e \u0443\u0436\u0435 \u0438\u043c\u0435\u043b \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439 \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u0440\u0435\u0434\u0430\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430 \u0431\u0430\u0437\u0435 Eclipse, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c)<\/p>\n<p>\u0412\u0442\u043e\u0440\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c <a href=\"https:\/\/www.wch-ic.com\/products\/CH32V003.html?\" rel=\"noopener noreferrer nofollow\">SDK <\/a>\u0441 \u0441\u0430\u0439\u0442\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u041c\u041a. \u0412\u043d\u0438\u0437\u0443 \u0441\u0442\u0430\u043d\u0438\u0446\u044b \u0435\u0441\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 ZIP \u0430\u0440\u0445\u0438\u0432\u0430 \u0441\u043e \u0441\u0445\u0435\u043c\u043e\u0439 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u044b \u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u041f\u041e. \u0420\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0430\u0440\u0445\u0438\u0432 \u0432 \u0440\u0430\u0431\u043e\u0447\u0443\u044e \u043f\u0430\u043f\u043a\u0443. <\/p>\n<p>\u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 GPIO_Toggle \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u0441 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0443\u0440\u043e\u0432\u043d\u044f \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u0430\u043f\u043e\u043a. \u042f \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043b \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 Habr_CO2.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041e\u0442\u0440\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 \u0441\u0440\u0435\u0434\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u041f\u0440\u0438\u043c\u0435\u0440 GPIO_Toggle \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c \u043a \u043f\u043e\u0440\u0442\u0443 PD_0. \u0412 \u043c\u043e\u0435\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043a \u043f\u043e\u0440\u0442\u0443 PD_3.<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0421\u0445\u0435\u043c\u0430 \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044f \u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0430\u0446\u0438\u0438 \u0443\u0433\u043b\u0435\u043a\u0438\u0441\u043b\u043e\u0433\u043e \u0433\u0430\u0437\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0432 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u043c\u0438\u0433\u0430\u043d\u0438\u044f \u043c\u0435\u043d\u044f\u0435\u043c \u043d\u043e\u043c\u0435\u0440 \u0432\u044b\u0432\u043e\u0434\u0430 \u043f\u043e\u0440\u0442\u0430:<\/p>\n<pre><code class=\"cpp\">void GPIO_Toggle_INIT(void) {     GPIO_InitTypeDef GPIO_InitStructure = {0};      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;\/\/\u0437\u0434\u0435\u0441\u044c \u0431\u044b\u043b GPIO_Pin_0     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     GPIO_Init(GPIOD, &amp;GPIO_InitStructure); } ...   while(1)     {         Delay_Ms(500);         GPIO_WriteBit(GPIOD, GPIO_Pin_3, (i == 0) ? (i = Bit_SET) : (i = Bit_RESET));     } \/\/\u0438 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u0432\u044b\u0448\u0435 \u0431\u044b\u043b GPIO_Pin_0<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442. \u041d\u0430\u0436\u0438\u043c\u0430\u0435\u043c Project -> Build Project. \u041f\u043e\u0441\u043b\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c Flash -> Download, \u0434\u043e\u0436\u0438\u0434\u0430\u0435\u043c\u0441\u044f \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438, \u0441\u0443\u0434\u043e\u0440\u043e\u0436\u043d\u043e \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c Reset \u0438\u043b\u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u041c\u041a &#8212; \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442! \u0410 \u0432\u0441\u0435 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043c\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438 \u0438\u043c\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 hex \u0442\u043e\u0436\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c. \u0410 \u0441\u0440\u0435\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0435\u0442 \u0441\u0442\u0430\u0440\u044b\u0439 \u0444\u0430\u0439\u043b hex. \u041d\u0430\u0436\u0438\u043c\u0430\u0435\u043c Flash -> Configuration, \u0432 \u043f\u043e\u043b\u0435 Target File: \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c Habr_CO2.hex. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043c\u0438\u0433\u0430\u0442\u044c (\u0443 \u043c\u0435\u043d\u044f \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442). <\/p>\n<h2>\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 I2C<\/h2>\n<p>\u041a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0430 \u043f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u0438\u0446\u0430 \u043f\u043e \u043c\u0430\u0442\u0430\u043d\u0443 \u0432 \u041c\u0410\u0418 (\u043f\u0435\u0440\u0432\u044b\u0439 \u0444\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442, \u043a\u0442\u043e \u0431\u044b\u043b \u0442\u0430\u043c, \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442): &#171;\u0412\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u044c \u0437\u0430\u043c\u0435&#8230;\u0435\u0442\u0438\u0442&#187;, \u0447\u0442\u043e \u0432 \u0441\u0445\u0435\u043c\u0435 \u043d\u0435\u0442 \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0449\u0438\u0445 \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u043e\u0432 \u0448\u0438\u043d\u044b I2C \u043a &#171;+&#187; \u043f\u0438\u0442\u0430\u043d\u0438\u044f, \u043d\u043e \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0430 \u043f\u043b\u0430\u0442\u0430\u0445 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 CO2 \u0438 \u0434\u0438\u0441\u043f\u043b\u0435\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u044b \u0435\u0441\u0442\u044c. \u041d\u0430\u0447\u043d\u0435\u043c \u0441 OLED \u0434\u0438\u0441\u043f\u043b\u0435\u044f. \u041e\u043d \u0441\u0434\u0435\u043b\u0430\u043d \u043d\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 ssd1306 \u0438 \u043f\u0440\u043e \u043d\u0435\u0433\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442\u044b \u0442\u0435\u043a\u0441\u0442\u0430, \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0442\u0430\u043a \u0447\u0442\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0434\u0438\u0441\u043f\u043b\u0435\u0435\u043c \u044f \u043d\u0435 \u0441\u0442\u0430\u043d\u0443. \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0438\u0441\u043f\u043b\u0435\u0435\u043c \u043d\u0443\u0436\u0435\u043d \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 I2C. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 I2C \u043d\u0430\u043a\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043d\u043e\u0441\u0442\u0430\u043b\u044c\u0433\u0438\u044f \u043f\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0433\u043e\u0442\u043e\u0432\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c \u043e\u0442 \u0444\u0438\u0440\u043c\u044b ST. \u041d\u043e \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c &#8212; \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c <abbr class=\"habraabbr\" title=\"Hardware Abstraction Layer, \u0421\u043b\u043e\u0439 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439\" data-title=\"&lt;p>\u0438\u0439&#187; data-title=&#187;&lt;p>&lt;strong>Hardware Abstraction Layer,&lt;\/strong>&amp;nbsp;&lt;strong>\u0421\u043b\u043e\u0439 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439&lt;\/strong>&lt;\/p>&#187; data-abbr=&#187;HAL&#187;>HAL<\/abbr> \u0438 \u0434\u043e\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0438\u0441\u043f\u043b\u0435\u0435\u043c. <\/p>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 I2C \u0432 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0435\u043c \u0440\u0435\u0436\u0438\u043c\u0435. \u041c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b STM \u043f\u0440\u0438\u0443\u0447\u0438\u043b\u0438 \u043c\u0435\u043d\u044f, \u0447\u0442\u043e \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u043c\u0438 (\u0430 \u043f\u043e-\u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443 \u0438 \u043d\u0435 \u0441 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u043c\u0438) \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u044b \u043e\u0442 \u0437\u0430\u0432\u0438\u0441\u0430\u043d\u0438\u044f &#8212; \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0432 \u0442\u0435\u043b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u0438 \u043f\u0440\u0438 \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u0438\u0438 \u043e\u043d\u043e\u0433\u043e \u0432\u044b\u0445\u043e\u0434\u0438\u0442\u044c \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 TIMEOUT. \u0414\u043b\u044f \u043e\u0442\u0441\u0447\u0435\u0442\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f SysTick \u0442\u0430\u0439\u043c\u0435\u0440. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u044f \u0432\u044b\u043d\u0435\u0441 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442. <\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0442\u0430\u0441\u043a\u0430\u0442\u044c \u0432\u0441\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 HAL \u0432 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u044f \u043f\u043e\u043b\u043e\u0436\u0438\u043b \u0438\u0445 \u0432 \u043f\u0430\u043f\u043a\u0443 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0441 \u043f\u0430\u043f\u043a\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0441\u044f, \u043d\u0430\u0434\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u043f\u0443\u0442\u044c \u043a \u044d\u0442\u043e\u0439 \u043f\u0430\u043f\u043a\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430\u0436\u0430\u0432 Project -> Properties. \u0412 \u043e\u0442\u043a\u0440\u044b\u0432\u0448\u0435\u043c\u0441\u044f \u043e\u043a\u043d\u0435 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c C\/C++ General -> Path and symbols, \u0432 \u043f\u043e\u043b\u0435 Languages \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043d\u0430 GNU C \u0438 \u0432 \u043f\u043e\u043b\u0435 include directories \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0443 &#171;<code>\/${ProjName}\/HAL<\/code>&#171;. \u042d\u0442\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u043f\u0430\u043f\u043a\u0443 \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443. <\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0412 \u0434\u0435\u0440\u0435\u0432\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0449\u0435\u043b\u043a\u0430\u0435\u043c \u043f\u0440\u0430\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043c\u044b\u0448\u0438 \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0430\u043f\u043a\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 Add -> External Linked Folder. \u0424\u0430\u0439\u043b\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0430\u043f\u043a\u0438 \u0434\u043e\u0431\u0430\u0432\u044f\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438.<\/p>\n<p>\u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <code>\"i2c_hal.h\"<\/code> \u044f \u043e\u043f\u0438\u0440\u0430\u043b\u0441\u044f \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440 I2C_EEPROM. \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0432\u0437\u044f\u043b \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043d\u0435 \u0431\u0443\u0434\u0443 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u043a\u0440\u043e\u0435\u0442 ~95% \u0432\u0441\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c.<\/p>\n<p>\u041d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u043d\u0438\u0436\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0435\u0434\u043e\u043c\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441 \u0430\u0434\u0440\u0435\u0441\u043e\u043c 0b1101000 \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442 \u0432\u0435\u0434\u0443\u0449\u0435\u0433\u043e \u043a \u0432\u0435\u0434\u043e\u043c\u043e\u043c\u0443. \u041d\u0430 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0441\u0445\u0435\u043c\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0432\u0435\u0434\u043e\u043c\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0442\u0432\u0435\u0442\u0438\u043b\u043e, \u0447\u0442\u043e \u0433\u043e\u0442\u043e\u0432\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u0430 \u043d\u0430 \u043d\u0438\u0436\u043d\u0435\u0439 \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043b\u043e (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441 \u0442\u0430\u043a\u0438\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u043d\u0430 \u0448\u0438\u043d\u0435 \u043d\u0435\u0442).<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0431\u0430\u0439\u0442 \u0432\u044b\u043d\u0435\u0441\u0435\u043c \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e:<\/p>\n<pre><code class=\"cpp\">uint8_t HAL_I2C_Transmit (I2C_TypeDef *i2c_periph,                            uint8_t DevAddress,                            uint8_t *pData,                            uint16_t Size,                            uint32_t i2c_timeout)<\/code><\/pre>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438: <\/p>\n<ol>\n<li>\n<p><code>I2C_TypeDef *i2c_periph<\/code> &#8212; \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0443\u044e \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e\u0431 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435. \u0422\u0430\u043a \u043a\u0430\u043a I2C \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u041c\u041a \u043e\u0434\u0438\u043d, \u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d: <code>I2C1<\/code>;<\/p>\n<\/li>\n<li>\n<p><code>uint8_t DevAddress<\/code> &#8212; \u0430\u0434\u0440\u0435\u0441 \u0432\u0435\u0434\u043e\u043c\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430;<\/p>\n<\/li>\n<li>\n<p><code>uint8_t *pData<\/code> &#8212; \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432 \u0431\u0430\u0439\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c;<\/p>\n<\/li>\n<li>\n<p><code>uint16_t Size<\/code> &#8212; \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0439\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c;<\/p>\n<\/li>\n<li>\n<p><code>uint32_t i2c_timeout<\/code> &#8212; \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0435\u0431\u044b\u0432\u0430\u043d\u0438\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u043e\u0442\u0441\u0447\u0435\u0442\u0430\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430 (\u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445).<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u0440\u0438 \u0432\u0445\u043e\u0434\u0435 \u0432 \u043b\u044e\u0431\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0438\u043b\u0438 \u043f\u0440\u0438\u0435\u043c\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 \u043d\u0435\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f Timeout-\u0430.<\/p>\n<pre><code class=\"cpp\">uint32_t tickstart = get_tick();<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b \u0441\u0442\u0430\u0440\u0442, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0448\u0438\u043d\u0430 \u043d\u0435 \u0437\u0430\u043d\u044f\u0442\u0430. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0444\u043b\u0430\u0433 <code>I2C_FLAG_BUSY<\/code> \u0438 \u0436\u0434\u0435\u043c, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u0441\u0431\u0440\u043e\u0441\u0438\u0442\u0441\u044f, \u043d\u043e \u043d\u0435 \u0434\u043e\u043b\u044c\u0448\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0440\u0435\u0431\u044b\u0432\u0430\u043d\u0438\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041f\u043e\u0441\u043b\u0435 \u0441\u0431\u0440\u043e\u0441\u0430 \u0444\u043b\u0430\u0433\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0441\u0442\u0430\u0440\u0442 \u0438 \u0436\u0434\u0435\u043c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0444\u043b\u0430\u0433\u0430 <code>I2C_EVENT_MASTER_MODE_SELECT<\/code>. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043d\u0430\u0448\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0437\u0430\u0445\u0432\u0430\u0442\u0438\u043b\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0448\u0438\u043d\u043e\u0439.<\/p>\n<pre><code class=\"cpp\">\/* i2c master sends start signal only when the bus is idle *\/ while((I2C_GetFlagStatus( i2c_periph, I2C_FLAG_BUSY ) != RESET) &amp;&amp; (get_tick() - tickstart &lt; i2c_timeout)) ;      if(get_tick() - tickstart &lt; i2c_timeout) {         } else {                 return I2C_BUSY;                 } \/* send the start signal *\/ I2C_GenerateSTART( i2c_periph, ENABLE );  while(!I2C_CheckEvent( I2C1, I2C_EVENT_MASTER_MODE_SELECT )  &amp;&amp; (get_tick() - tickstart &lt; i2c_timeout)) ;            if(get_tick() - tickstart &lt; i2c_timeout) {         } else {                 return I2C_BUSY;                 }<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0432\u0435\u0434\u043e\u043c\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u041d\u0430\u0434\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0430\u0434\u0440\u0435\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u0434\u0432\u0438\u043d\u0443\u0442 \u043d\u0430 \u043e\u0434\u0438\u043d \u0431\u0438\u0442 \u0432\u043b\u0435\u0432\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u043b\u0430\u0434\u0448\u0438\u0439 \u0431\u0438\u0442 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0441 \u0434\u0430\u043d\u043d\u044b\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u0443 \u043c\u0435\u043d\u044f \u0447\u0430\u0441\u0442\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u0443\u0442\u0430\u043d\u0438\u0446\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445 \u041c\u041a \u0444\u0438\u0440\u043c\u044b Nordic \u043d\u0435 \u043d\u0430\u0434\u043e \u0441\u0434\u0432\u0438\u0433\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0432\u043b\u0435\u0432\u043e). \u0427\u0442\u043e\u0431\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043c\u043b\u0430\u0434\u0448\u0438\u0439 \u0431\u0438\u0442 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>I2C_Send7bitAddress<\/code> \u0443\u043a\u0430\u0436\u0435\u043c <code>I2C_Direction_Transmitter.<\/code> \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u0434\u043e\u0436\u0434\u0435\u043c\u0441\u044f \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0432\u0435\u0434\u043e\u043c\u043e\u0433\u043e, \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0439 \u0430\u0434\u0440\u0435\u0441 \u0435\u0441\u0442\u044c \u043d\u0430 \u0448\u0438\u043d\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0444\u043b\u0430\u0433\u0430 <code>I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED<\/code>. \u0415\u0441\u043b\u0438 \u0432\u0435\u0434\u043e\u043c\u043e\u0433\u043e \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u043d\u0435 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043d\u0430 \u0448\u0438\u043d\u0435, \u043e\u0442 \u0437\u0430\u0432\u0438\u0441\u0430\u043d\u0438\u044f \u043d\u0430\u0441 \u0441\u043f\u0430\u0441\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u0448\u043b\u0435\u0442 \u043d\u0430 \u0448\u0438\u043d\u0443 I2C \u0441\u0438\u0433\u043d\u0430\u043b \u0441\u0442\u043e\u043f \u0438 \u0432\u0435\u0440\u043d\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>I2C_ADDR_NACK<\/code>.<\/p>\n<pre><code class=\"cpp\">I2C_Send7bitAddress( i2c_periph, DevAddress, I2C_Direction_Transmitter );  \/* address flag set means i2c slave sends ACK *\/ while((!I2C_CheckEvent( i2c_periph, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED )) &amp;&amp; (get_tick() - tickstart &lt; i2c_timeout));      if(get_tick() - tickstart &lt; i2c_timeout) {       } else {               I2C_GenerateSTOP( i2c_periph, ENABLE );               return I2C_ADDR_NACK;               }<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043f\u043e\u043b\u0435\u0437\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e. \u0412 \u0446\u0438\u043a\u043b\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <code>I2C_SendData( i2c_periph, *pData )<\/code> , \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0431\u0443\u0444\u0435\u0440, \u0447\u0442\u043e\u0431\u044b \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043f\u0440\u043e\u0445\u043e\u0434\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0431\u0430\u0439\u0442 \u0438 \u0436\u0434\u0435\u043c, \u043a\u043e\u0433\u0434\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0444\u043b\u0430\u0433 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 <code>I2C_EVENT_MASTER_BYTE_TRANSMITTED<\/code>. \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0430 \u0448\u0438\u043d\u0443 \u0441\u0438\u0433\u043d\u0430\u043b \u0421\u0422\u041e\u041f \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c  <code>I2C_OK<\/code>.<\/p>\n<pre><code class=\"cpp\">for(count = 0; count &lt; Size; count ++) {    I2C_SendData( i2c_periph, *pData );   \/* increment pointer to the next byte to be written *\/   pData++;   \/*<\/code><\/pre>\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-360928","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/360928","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=360928"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/360928\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=360928"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=360928"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=360928"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}