{"id":362462,"date":"2024-05-21T01:35:33","date_gmt":"2024-05-21T01:35:33","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=362462"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-05-21T01:35:33","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=362462","title":{"rendered":"<span>\u0411\u043b\u043e\u043a \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0435\u0439 \u0420\u041a \u041f\u0430\u0442\u0440\u0438\u043e\u0442<\/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\/getpro\/habr\/upload_files\/9fb\/8b0\/0fb\/9fb8b00fb54f61171b73990df830b1f1.JPG\" alt=\"\u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0432 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435\" title=\"\u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0432 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435\" width=\"1600\" height=\"1200\"\/><\/p>\n<div><figcaption>\u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0432 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c, \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0443 \u0430\u0432\u0442\u043e\u043b\u044e\u0431\u0438\u0442\u0435\u043b\u0435\u0439 &#8212; \u043f\u043e\u043a\u0443\u043f\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u0435\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0438 \u043a\u0430\u043a \u0441\u0432\u043e\u0435\u0433\u043e \u0440\u043e\u0434\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u0432\u0437\u0440\u043e\u0441\u043b\u044b\u0445, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u043d\u0435\u043c \u043f\u043e \u0431\u0435\u0437\u0434\u043e\u0440\u043e\u0436\u044c\u044e. \u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0442\u0430\u043a\u0438\u0445 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u0439, \u0434\u043e \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0431\u044b\u043b \u00ab\u0423\u0410\u0417-Patriot\u00bb. \u041d\u0435\u00a0\u0431\u0443\u0434\u0443 \u0432\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f, \u043d\u0430\u00a0\u0447\u0442\u043e\u00a0\u0438\u0434\u0443\u0442 \u0442\u0432\u043e\u0440\u0447\u0435\u0441\u043a\u0438\u0435 \u043b\u044e\u0434\u0438 \u0438 \u0441\u00a0\u043a\u0430\u043a\u0438\u043c\u0438 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441\u0430\u043c\u0438 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044e\u0442\u0441\u044f, \u043e\u043f\u0438\u0448\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044f \u0440\u0435\u0436\u0438\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e\u043b\u043d\u043e\u2011\u043f\u0440\u0438\u0432\u043e\u0434\u043d\u043e\u0439 \u0442\u0440\u0430\u043d\u0441\u043c\u0438\u0441\u0441\u0438\u0438 \u0441 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 \u043f\u043e\u0434\u043e\u0433\u0440\u0435\u0432\u0430 \u0441\u0438\u0434\u0435\u043d\u0438\u0439 (\u0434\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0440\u0430\u0437\u0434\u0430\u0442\u043a\u0438).  \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0432\u043f\u043e\u043b\u043d\u0435 \u0441\u0435\u0431\u0435 \u043a\u0430\u043a\u0430\u044f \u0435\u0441\u0442\u044c, \u043d\u043e \u0435\u0441\u043b\u0438 \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u0432\u044b \u043c\u043e\u0434\u0435\u0440\u043d\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u0434\u043b\u044f \u0441\u0435\u0431\u044f, \u0431\u044b\u0432\u0430\u0435\u0442 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0445\u0435\u043c\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0443\u0437\u043b\u0430 \u043f\u043e\u0434 \u0441\u0432\u043e\u0438 \u043d\u0443\u0436\u0434\u044b &#8212; \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u0448\u0438\u043d\u0430\u0445 \u0438 \u0447\u0442\u043e-\u043b\u0438\u0431\u043e \u0435\u0449\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u0438\u043c\u0435\u0442\u044c \u0441\u0445\u0435\u043c\u0443 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0430, \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0430\u043c \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430.<\/p>\n<p>\u041f\u0440\u0438\u0432\u0435\u0434\u0443 \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u043c\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u0443 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043f\u0430\u043b \u043c\u043d\u0435 \u0432 \u0440\u0443\u043a\u0438:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/4d3\/409\/e63\/4d3409e63dd7fba85b1050a48ecb65a3.jpg\" alt=\"\u0441\u0445\u0435\u043c\u0430 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0430\" title=\"\u0441\u0445\u0435\u043c\u0430 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0430\" width=\"3564\" height=\"2520\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4d3\/409\/e63\/4d3409e63dd7fba85b1050a48ecb65a3.jpg\" data-blurred=\"true\"\/><\/p>\n<div><figcaption>\u0441\u0445\u0435\u043c\u0430 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u0445\u0435\u043c\u0430 \u043d\u0435 \u0441\u043b\u043e\u0436\u043d\u0430\u044f, \u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u0430\u0446\u0438\u0438, \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b. \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0441\u0442\u0438 \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c, \u043d\u043e \u0441 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f: \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f, \u043d\u043e \u0437\u0430\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0446\u0435\u043b\u044c &#8212; \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438. \u041c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0432 \u0431\u043b\u043e\u043a\u0435 &#8212; STM8S003F3, \u043f\u0440\u043e\u0441\u0442\u043e\u0439 8-\u0431\u0438\u0442\u043d\u044b\u0439, \u0441 \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u044b\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435\u043c \u0442\u043e\u043a\u0430 \u0438 \u0446\u0435\u043d\u043e\u0439. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0443\u043f\u0438\u043b \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0443\u044e \u043f\u043b\u0430\u0442\u0443 \u0441 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c \u0441\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440\u043e\u043c \u043f\u043e \u0448\u0438\u043d\u0435 SWIM, \u0438 \u0435\u0449\u0435 \u043f\u043b\u0430\u0442\u0443 \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c. \u0417\u0430\u043e\u0434\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u043b \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u0441\u0440\u0435\u0434\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 (\u043d\u0430 \u0425\u0430\u0431\u0440\u0435 \u0435\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0430 \u044d\u0442\u043e \u0442\u0435\u043c\u0443).<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/163\/256\/cf5\/163256cf57e0afb0226050f7be6063ba.JPG\" alt=\"\u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430 \u0438 \u043f\u043b\u0430\u0442\u0430 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432\" title=\"\u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430 \u0438 \u043f\u043b\u0430\u0442\u0430 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432\" width=\"1600\" height=\"1200\"\/><\/p>\n<div><figcaption>\u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430 \u0438 \u043f\u043b\u0430\u0442\u0430 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0431\u043b\u043e\u043a\u0430 \u0435\u0441\u0442\u044c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440\u0430 \u043a \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2bf\/7aa\/6e6\/2bf7aa6e654a427f6cd02058868f57e7.JPG\" alt=\"\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438\" title=\"\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438\" width=\"1600\" height=\"1200\"\/><\/p>\n<div><figcaption>\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u0437\u0430\u043e\u0434\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c\u0441\u044f \u043a \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u043c \u043f\u0438\u043d\u0430\u043c \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7b6\/f4e\/a3c\/7b6f4ea3c341f9313786eac302f31401.JPG\" alt=\"\u0421\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0434\u043b\u044f \u043c\u0438\u0433\u0430\u043d\u0438\u044f \u043f\u0440\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0435\" title=\"\u0421\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0434\u043b\u044f \u043c\u0438\u0433\u0430\u043d\u0438\u044f \u043f\u0440\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0435\" width=\"1600\" height=\"1200\"\/><\/p>\n<div><figcaption>\u0421\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0434\u043b\u044f \u043c\u0438\u0433\u0430\u043d\u0438\u044f \u043f\u0440\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0435<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/701\/ce5\/f0a\/701ce5f0a8175cb2ec22d93ad4b4bb90.JPG\" alt=\"\u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u0440\u0430\u043a\u0443\u0440\u0441\u043e\u043c\" title=\"\u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u0440\u0430\u043a\u0443\u0440\u0441\u043e\u043c\" width=\"1600\" height=\"1200\"\/><\/p>\n<div><figcaption>\u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u0440\u0430\u043a\u0443\u0440\u0441\u043e\u043c<\/figcaption><\/div>\n<\/figure>\n<p>\u0432\u0438\u0434 <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9e4\/2cd\/1cb\/9e42cd1cb9fd6b99b13e4c4c321ea272.JPG\" alt=\"\u0432\u0438\u0434 \u043f\u043e\u0434 \u0443\u0433\u043b\u043e\u043c\" title=\"\u0432\u0438\u0434 \u043f\u043e\u0434 \u0443\u0433\u043b\u043e\u043c\" width=\"1600\" height=\"1200\"\/><\/p>\n<div><figcaption>\u0432\u0438\u0434 \u043f\u043e\u0434 \u0443\u0433\u043b\u043e\u043c<\/figcaption><\/div>\n<\/figure>\n<p>\u0448\u0442\u0430\u0442\u043d\u044b\u0435 \u0431\u0435\u0441\u043a\u043e\u0440\u043f\u0443\u0441\u043d\u044b\u0435 \u0440\u0435\u043b\u0435 \u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043e\u0441\u043e\u0431\u043e\u0439 \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u044c\u044e, \u0438\u0445 \u0437\u0430\u043c\u0435\u043d\u0438\u043b\u0438 \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u0438\u0435, \u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043d\u0430\u043f\u0430\u0438\u0432\u0430\u0442\u044c \u043e\u0442\u0433\u0438\u0431\u0430\u044f \u0432\u044b\u0432\u043e\u0434 \u043a\u043e\u0440\u043f\u0443\u0441\u0430.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0430 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0435, \u0442\u043e \u0438 \u043a\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u043c:<\/p>\n<p>\u0444\u0430\u0439\u043b stm8s_conf.h:<\/p>\n<details class=\"spoiler\">\n<summary>Hidden text<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>\/**   ******************************************************************************   * @file     stm8s_conf.h   * @author   MCD Application Team   * @version  V2.0.0   * @date     25-February-2011   * @brief    This file is used to configure the Library.   ******************************************************************************   * @attention   *   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING   * FROM THE CONTENT OF SUCH FIRMWARE AND\/OR THE USE MADE BY CUSTOMERS OF THE   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.   *   * &lt;h2>&lt;center>&amp;copy; COPYRIGHT 2011 STMicroelectronics&lt;\/center>&lt;\/h2>   ******************************************************************************   *\/   \/* Define to prevent recursive inclusion -------------------------------------*\/ #ifndef __STM8S_CONF_H #define __STM8S_CONF_H  \/* Includes ------------------------------------------------------------------*\/ #include \"stm8s.h\"  \/* Uncomment the line below to enable peripheral header file inclusion *\/ #if defined(STM8S105) || defined(STM8S103) || defined(STM8S903) || defined (STM8AF626x) #include \"stm8s_adc1.h\"  #endif \/* (STM8S105) ||(STM8S103) || (STM8S903) || STM8AF626x*\/ #if defined(STM8S208) || defined(STM8S207) || defined (STM8AF52Ax) || defined (STM8AF62Ax)  #include \"stm8s_adc2.h\" #endif \/* (STM8S208) || (STM8S207) || (STM8AF62Ax) || (STM8AF52Ax) *\/ #include \"stm8s_awu.h\" #include \"stm8s_beep.h\" #if defined (STM8S208) || defined (STM8AF52Ax)  #include \"stm8s_can.h\" #endif \/* STM8S208 || STM8AF52Ax *\/ #include \"stm8s_clk.h\" #include \"stm8s_exti.h\" #include \"stm8s_flash.h\" #include \"stm8s_gpio.h\" #include \"stm8s_i2c.h\" #include \"stm8s_itc.h\" #include \"stm8s_iwdg.h\" #include \"stm8s_rst.h\" #include \"stm8s_spi.h\" #include \"stm8s_tim1.h\" #ifndef STM8S903  #include \"stm8s_tim2.h\" #endif \/* STM8S903 *\/ #if defined(STM8S208) || defined(STM8S207) ||defined(STM8S105) || defined (STM8AF52Ax) ||\\     defined (STM8AF62Ax) || defined (STM8AF626x)  #include \"stm8s_tim3.h\" #endif \/* (STM8S208) ||defined(STM8S207) ||defined(STM8S105) *\/  #ifndef STM8S903  #include \"stm8s_tim4.h\" #endif \/* STM8S903 *\/ #ifdef STM8S903  #include \"stm8s_tim5.h\"  #include \"stm8s_tim6.h\" #endif \/* STM8S903 *\/ #if defined(STM8S208) ||defined(STM8S207) ||defined(STM8S103) ||defined(STM8S903) ||\\     defined (STM8AF52Ax) || defined (STM8AF62Ax)  #include \"stm8s_uart1.h\" #endif \/* STM8S208 || STM8S207 || STM8S103 ||STM8S903 || STM8AF52Ax || STM8AF62Ax *\/ #if defined (STM8S105) || defined (STM8AF626x)  #include \"stm8s_uart2.h\" #endif \/* STM8S105 || STM8AF626x *\/ #if defined(STM8S208) ||defined(STM8S207) || defined (STM8AF52Ax) || defined (STM8AF62Ax)  #include \"stm8s_uart3.h\" #endif \/* STM8S208 || STM8S207 || STM8AF52Ax || STM8AF62Ax *\/  #include \"stm8s_wwdg.h\"  \/* Exported types ------------------------------------------------------------*\/ \/* Exported constants --------------------------------------------------------*\/ \/* Uncomment the line below to expanse the \"assert_param\" macro in the    Standard Peripheral Library drivers code *\/ \/\/#define USE_FULL_ASSERT    (1)   \/* Exported macro ------------------------------------------------------------*\/ #ifdef  USE_FULL_ASSERT  \/**   * @brief  The assert_param macro is used for function's parameters check.   * @param expr: If expr is false, it calls assert_failed function   *   which reports the name of the source file and the source   *   line number of the call that failed.   *   If expr is true, it returns no value.   * @retval : None   *\/ #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) \/* Exported functions ------------------------------------------------------- *\/ void assert_failed(uint8_t* file, uint32_t line); #else #define assert_param(expr) ((void)0) #endif \/* USE_FULL_ASSERT *\/  #endif \/* __STM8S_CONF_H *\/  \/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****\/ <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0444\u0430\u0439\u043b board.h:<\/p>\n<details class=\"spoiler\">\n<summary>Hidden text<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>\/\/\u0440\u0430\u0441\u043f\u0438\u043d\u043e\u0432\u043a\u0430 \u043f\u043b\u0430\u0442\u044b STM8S003F3P6 1kB RAM 128 EEPROM 8k Flash \/\/ \/\/             +---|___|---+ \/\/      PD4  o-|           |-o PD3 \/\/      PD5  o-|           |-o PD2 \/\/      PD6  o-|           |-o PD1 \/\/     NRST  o-|           |-o PC7 \/\/      PA1  o-|           |-o PC6 \/\/      PA2  o-|           |-o PC5 \/\/      GND  o-|           |-o PC4 \/\/       5V  o-|           |-o PC3 \/\/     3.3V  o-|           |-o PB4 \/\/      PA4  o-|           |-o PB5  \/\/             +-----------+ \/\/ \/\/************************************************************************** \/\/\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043b\u0430\u0442\u044b \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0430: \/\/PA1  - \u0432\u044b\u0445\u043e\u0434 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0431\u0430\u043a\u0430 2 \/\/PA2  - \u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \/\/PA3  - \u043a\u043d\u043e\u043f\u043a\u0430 \u0432\u0445\u043e\u0434 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044f \u0431\u0430\u043a\u0430 1\/2 \/\/PB4  - \u043a\u043d\u043e\u043f\u043a\u0430 \u0432\u0445\u043e\u0434 PHEAT \/\/PB5  - \u043a\u043d\u043e\u043f\u043a\u0430 \u0432\u0445\u043e\u0434 DHEAT \/\/PC3  - \u0432\u044b\u0445\u043e\u0434 \u0440\u0435\u043b\u0435\/\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 DHEAT \/\/PC4  - \u0432\u0445\u043e\u0434 ADC_IN2 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u0431\u043b\u043e\u043a\u0430 (VCC = 5V) \/\/PC5  - \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0432\u0445\u043e\u0434 2H \/\/PC6  - \u0432\u044b\u0445\u043e\u0434 \u0440\u0435\u043b\u0435\/\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 PHEAT \/\/PC7  - \u0432\u044b\u0445\u043e\u0434 \u0440\u0435\u043b\u0435\/\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0431\u0430\u043a\u0430 1 \/\/PD1  - SWIM \/\/PD2  - \u0432\u044b\u0445\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f X1_3 \/\/PD3  - \u0432\u044b\u0445\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f X1_1 \/\/PD4  - \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0432\u0445\u043e\u0434 4S \/\/PD5  - \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0432\u0445\u043e\u0434 4L \/\/PD6  - \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0432\u0445\u043e\u0434 4H \/\/ \/\/TIM4 8 - \u0431\u0438\u0442\u043d\u044b\u0439 \u0442\u0430\u0439\u043c\u0435\u0440 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f 1 \u043c\u0421\u0435\u043a \/\/ \/\/ \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u043f\u0438\u0442\u0430\u043d\u0438\u044f, \u0432\u0445\u043e\u0434\u043d\u043e\u0435 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 -> \u0432\u0445\u043e\u0434 ADC \/\/ 12V -> 2V \/\/ 18V -> 3V \/\/ ... \/\/ \/\/\u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 RGB \u0438 \u043a\u043d\u043e\u043f\u043a\u0430 \/\/PC7(17) - B (\u0440\u0435\u043b\u0435 \u0431\u0430\u043a\u0430) \/\/PA2(6)  - G  test pin \/\/PA1(5)  - R (\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0431\u0430\u043a\u0430) \/\/PA4 - \u043a\u043d\u043e\u043f\u043a\u0430 SW7 \/\/ \/\/\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043e\u043a \u0445\u0440\u0430\u043d\u0438\u043c \u0432 EEPROM \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043f\u0438\u0442\u0430\u043d\u0438\u044f \/\/\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430: \/\/ 0x00 - \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u043f\u043e\u0434\u043e\u0433\u0440\u0435\u0432\u0430 \u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0441\u0438\u0434\u0435\u043d\u044c\u044f \/\/ 0x01 - \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u043f\u043e\u0434\u043e\u0433\u0440\u0435\u0432\u0430 \u043f\u0430\u0441\u0441\u0430\u0436\u0438\u0440\u0441\u043a\u043e\u0433\u043e \u0441\u0438\u0434\u0435\u043d\u044c\u044f \/\/ 0x03 - \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044f \u0431\u0435\u043d\u0437\u043e\u0431\u0430\u043a\u0430 \/\/  #ifndef __BOARD_H #define __BOARD_H #include \"stm8s.h\"  \/\/\u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0440\u0430\u0437\u0434\u0430\u0442\u043a\u0438 ***** \/\/\u0432\u0445\u043e\u0434\u044b #define  S2H_PIN   GPIO_PIN_5 #define  S2H_PORT  GPIOC #define  S4H_PIN   GPIO_PIN_6 #define  S4H_PORT  GPIOD #define  S4L_PIN   GPIO_PIN_5 #define  S4L_PORT  GPIOD #define  S4S_PIN   GPIO_PIN_4 #define  S4S_PORT  GPIOD \/\/\u0432\u044b\u0445\u043e\u0434\u044b #define  OUT_2H_PIN     GPIO_PIN_2 #define  OUT_2H_PORT    GPIOD #define  OUT_4L_PIN     GPIO_PIN_3 #define  OUT_4L_PORT    GPIOD  \/\/\u043f\u043e\u0434\u043e\u0433\u0440\u0435\u0432 \u0441\u0438\u0434\u0435\u043d\u0438\u0439 ***** \/\/\u0432\u0445\u043e\u0434\u044b #define  D_KEY_PIN   GPIO_PIN_5 #define  D_KEY_PORT  GPIOB #define  P_KEY_PIN   GPIO_PIN_4 #define  P_KEY_PORT  GPIOB \/\/\u0432\u044b\u0445\u043e\u0434\u044b: #define  D_HEAT_PIN   GPIO_PIN_3 #define  D_HEAT_PORT  GPIOC #define  P_HEAT_PIN   GPIO_PIN_6 #define  P_HEAT_PORT  GPIOC  \/\/\u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043f\u0438\u0442\u0430\u043d\u0438\u044f ***** #define  V_IN_PIN   GPIO_PIN_4 #define  V_IN_PORT  GPIOC  \/\/\u0442\u043e\u043f\u043b\u0438\u0432\u043d\u044b\u0439 \u0431\u0430\u043a ***** \/\/\u0432\u0445\u043e\u0434\u044b #define  TANK_KEY_PIN   GPIO_PIN_3 #define  TANK_KEY_PORT  GPIOA \/\/\u0432\u044b\u0445\u043e\u0434\u044b: #define  TANK_R_PIN     GPIO_PIN_7 #define  TANK_R_PORT    GPIOC #define  TANK_LED_PIN   GPIO_PIN_1 #define  TANK_LED_PORT  GPIOA  \/\/\u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0432\u044b\u0445\u043e\u0434 (\u043d\u0435 \u0440\u0430\u0437\u0432\u0435\u0434\u0435\u043d \u043d\u0430 \u043f\u043b\u0430\u0442\u0435) #define  TEST_PIN     GPIO_PIN_2 #define  TEST_PORT    GPIOA  #define  START_EEPROM     0x4000 #define  SIZE_EEPROM      0x80  #define  D_HEAT_EEPROM     0x4000 #define  P_HEAT_EEPROM     0x4001 #define  T_EEPROM          0x4002  #define  SEL_NO         0 #define  SEL_2H         1 #define  SEL_4H         2 #define  SEL_4L         4 #define  SEL_4S         8 #define  SEL_TICK_ON    150     \/\/\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0438\u043a\u043e\u0432 (mS) \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0430 #define  SEL_TICK_LOCK  1000    \/\/\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0438\u043a\u043e\u0432 (mS) \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0430  #define  KEY_NO        0        \/\/\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 #define  KEY_SET       1   #define  VP_MIN        12000    \/\/\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 (mV)\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434\u043e\u0433\u0440\u0435\u0432\u0430 \u0441\u0438\u0434\u0435\u043d\u0438\u0439 #define  VP_GIST       500      \/\/\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u0433\u0438\u0441\u0442\u0435\u0440\u0435\u0437\u0438\u0441 (mV) void CLK_Configuration(void); void GPIO_Configuration(void); void Delay(uint16_t Cycles); void TIM4_Configuration(void); void ADC_Configuration(void); void BoardInit(void); void Loop(void); void SystemMS(void); void TestPin(uint8_t action); void ScanSelector(void); void SetTransferBox(uint8_t st,uint8_t lk); void LedStatus(uint8_t LedMode); void LedT(uint8_t action); void ScanKeyHeat(void); void StatusKeyHeat(void); void SetHeat(void); void StatusKeyTank(void); void ScanKeyTank(void); void SetTank(void); uint8_t ReadStatusEEPROM(char s); uint8_t WriteStatusEEPROM(char s,uint8_t st);  \/\/main extern  uint16_t        res_adc;   #endif<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0424\u0430\u0439\u043b board.c:<\/p>\n<details class=\"spoiler\">\n<summary>Hidden text<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>#include \"board.h\" #include \"stm8s.h\"  \/\/-------------------------------------------------------- \/\/\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 uint16_t  s2h_cnt;      \/\/\u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0446\u0438\u043a\u043b\u043e\u0432 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f uint16_t  s4h_cnt;      \/\/\u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0446\u0438\u043a\u043b\u043e\u0432 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f uint16_t  s4l_cnt;      \/\/\u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0446\u0438\u043a\u043b\u043e\u0432 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f uint16_t  s4s_cnt;      \/\/\u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0446\u0438\u043a\u043b\u043e\u0432 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f uint8_t   tr_Lock;      \/\/\u043f\u0440\u0438\u0437\u043d\u0430\u043a \u0440\u0435\u0436\u0438\u043c\u0430 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 uint8_t   select_status;\/\/\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0430  uint8_t   p2h; uint8_t   p4h; uint8_t   p4l; uint8_t   p4s;  uint8_t   key_d_cnt;    \/\/\u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0446\u0438\u043a\u043b\u043e\u0432 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u0436\u0430\u0442\u0438\u044f uint8_t   key_p_cnt;    \/\/\u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0446\u0438\u043a\u043b\u043e\u0432 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u0436\u0430\u0442\u0438\u044f uint8_t   key_t_cnt;    \/\/\u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0446\u0438\u043a\u043b\u043e\u0432 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u0436\u0430\u0442\u0438\u044f  uint8_t   key_d_press;  \/\/\u043f\u0440\u0438\u0437\u043d\u0430\u043a \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043d\u043e\u043f\u043a\u0438 uint8_t   key_p_press;  \/\/\u043f\u0440\u0438\u0437\u043d\u0430\u043a \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043d\u043e\u043f\u043a\u0438 uint8_t   key_t_press;  \/\/\u043f\u0440\u0438\u0437\u043d\u0430\u043a \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043d\u043e\u043f\u043a\u0438  uint8_t   key_d_status; \/\/\u0441\u0442\u0430\u0442\u0443\u0441 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u043e\u0434\u043e\u0433\u0440\u0435\u0432\u0430 \u0441\u0438\u0434\u0435\u043d\u044c\u044f \u0432\u043e\u0434 uint8_t   key_p_status; \/\/\u0441\u0442\u0430\u0442\u0443\u0441 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u043e\u0434\u043e\u0433\u0440\u0435\u0432\u0430 \u0441\u0438\u0434\u0435\u043d\u044c\u044f \u043f\u0430\u0441\u0441 uint8_t   key_t_status; \/\/\u0441\u0442\u0430\u0442\u0443\u0441 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044f \u0431\u0430\u043a\u0430  uint8_t   key_d_change; \/\/\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u0443\u0441\u0430 uint8_t   key_p_change; \/\/\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u0443\u0441\u0430 uint8_t   key_t_change; \/\/\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u0443\u0441\u0430  uint16_t  LedDiv;       \/\/\u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u0438\u0433\u0430\u043d\u0438\u0435\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u044b uint16_t  LedMask;      \/\/-- uint16_t  rolmask;      \/\/-- uint16_t  rolcnt;       \/\/-- uint16_t  rolbit;       \/\/--      uint8_t   LedMode;      \/\/-- uint8_t   workMode;     \/\/\u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0440\u0435\u0436\u0438\u043c uint32_t  MyTimeOn;     \/\/\u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0440\u0430\u0431\u043e\u0447\u0435\u0435 \u0432\u0440\u0435\u043c\u044f uint32_t  convAdc;      \/\/\u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0441\u0447\u0435\u0442\u0430 \u0410\u0426\u041f uint16_t  vdc;          \/\/\u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u0432 \u043c\u0438\u043b\u043b\u0438\u0432\u043e\u043b\u044c\u0442\u0430\u0445 uint8_t   heat_block;   \/\/\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u043f\u043e\u0434\u043e\u0433\u0440\u0435\u0432\u0430 \u0438\u0437 \u0437\u0430 \u043d\u0438\u0437\u043a\u043e\u0433\u043e \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \/\/-------------------------------------------------------- \/\/\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f void CLK_Configuration(void) {   \/* Fmaster = 16MHz *\/   CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);   \/\/ \u041f\u0440\u0435\u0434\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0438 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438   CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1); } \/\/-------------------------------------------------------- \/\/\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u043e\u0440\u0442\u043e\u0432 \u0432\u0432\u043e\u0434\u0430 \u0432\u044b\u0432\u043e\u0434\u0430 void GPIO_Configuration(void) {   \/* GPIOD reset *\/   GPIO_DeInit(GPIOA);   GPIO_DeInit(GPIOB);   GPIO_DeInit(GPIOC);   GPIO_DeInit(GPIOD);    \/\/\u0421\u0435\u043b\u0435\u043a\u0442\u043e\u0440 *****   \/\/\u0432\u044b\u0445\u043e\u0434\u044b   GPIO_Init(OUT_2H_PORT, OUT_2H_PIN, GPIO_MODE_OUT_PP_LOW_FAST);   GPIO_Init(OUT_4L_PORT, OUT_4L_PIN, GPIO_MODE_OUT_PP_LOW_FAST);   \/\/\u0432\u0445\u043e\u0434\u044b   GPIO_Init(S2H_PORT, S2H_PIN, GPIO_MODE_IN_FL_NO_IT);   GPIO_Init(S4H_PORT, S4H_PIN, GPIO_MODE_IN_FL_NO_IT);   GPIO_Init(S4L_PORT, S4L_PIN, GPIO_MODE_IN_FL_NO_IT);   GPIO_Init(S4S_PORT, S4S_PIN, GPIO_MODE_IN_FL_NO_IT);    \/\/\u043f\u043e\u0434\u043e\u0433\u0440\u0435\u0432 \u0441\u0438\u0434\u0435\u043d\u0438\u0439 *****   \/\/\u0432\u044b\u0445\u043e\u0434\u044b   GPIO_Init(D_HEAT_PORT,D_HEAT_PIN,GPIO_MODE_OUT_PP_LOW_FAST);   GPIO_Init(P_HEAT_PORT,P_HEAT_PIN,GPIO_MODE_OUT_PP_LOW_FAST);   \/\/\u0432\u0445\u043e\u0434\u044b   GPIO_Init(D_KEY_PORT, D_KEY_PIN, GPIO_MODE_IN_FL_NO_IT );   GPIO_Init(P_KEY_PORT, P_KEY_PIN, GPIO_MODE_IN_FL_NO_IT );      \/\/\u0442\u043e\u043f\u043b\u0438\u0432\u043d\u044b\u0439 \u0431\u0430\u043a *****   \/\/\u0432\u044b\u0445\u043e\u0434\u044b   GPIO_Init(TANK_R_PORT,   TANK_R_PIN,   GPIO_MODE_OUT_PP_LOW_FAST);   GPIO_Init(TANK_LED_PORT, TANK_LED_PIN, GPIO_MODE_OUT_PP_LOW_FAST);   \/\/\u0432\u0445\u043e\u0434\u044b   GPIO_Init(TANK_KEY_PORT, TANK_KEY_PIN, GPIO_MODE_IN_FL_NO_IT );      \/\/\u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0432\u044b\u0445\u043e\u0434 (\u043d\u0435 \u0440\u0430\u0437\u0432\u0435\u0434\u0435\u043d \u043d\u0430 \u043f\u043b\u0430\u0442\u0435)   \/\/\u0432\u044b\u0445\u043e\u0434\u044b PA2   GPIO_Init(TEST_PORT, TEST_PIN, GPIO_MODE_OUT_PP_LOW_FAST);    } \/\/-------------------------------------------------------- \/\/\u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u043e \u0442\u0430\u043a\u0442\u0430\u043c \/\/65535 ->  50mSec  void Delay(uint16_t Cycles) {   uint16_t NumberOfStart = Cycles;   while(NumberOfStart != 0)   {     NumberOfStart--;   } } \/\/-------------------------------------------------------- \/\/\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0442\u0430\u0439\u043c\u0435\u0440\u0430 4 \u043d\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0441 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 1\u043c\u0421\u0435\u043a void TIM4_Configuration(void) {   \/\/\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u0439\u043c\u0435\u0440\u0430   CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER4, ENABLE);   \/\/ \u041d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0432\u0441\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0442\u0430\u0439\u043c\u0435\u0440\u0430   TIM4_DeInit();   \/\/ \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u043d\u0430 256 \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0441\u0447\u0435\u0442 124   TIM4_TimeBaseInit(TIM4_PRESCALER_128, 124);   \/\/\u0420\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u043c \u041f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u043f\u043e \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e   TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);   \/\/ \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0441\u0447\u0435\u0442   TIM4_Cmd(ENABLE); } \/\/-------------------------------------------------------- \/\/\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f ADC PC4  - ADC_IN2 \/\/\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u043f\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0443, \u0438\u0431\u043e \u0432 \u0446\u0438\u043a\u043b\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0433\u0440\u0443\u0437\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 void ADC_Configuration(void) {   GPIO_Init(V_IN_PORT,V_IN_PIN,GPIO_MODE_IN_FL_NO_IT);    \/\/\u0432\u0445\u043e\u0434 \u0434\u043b\u044f ADC   ADC1_DeInit();    ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_2,             ADC1_PRESSEL_FCPU_D18,             ADC1_EXTTRIG_TIM,DISABLE,             ADC1_ALIGN_RIGHT,             ADC1_SCHMITTTRIG_CHANNEL2, DISABLE);   ADC1_ITConfig(ADC1_IT_EOCIE ,ENABLE); } \/\/-------------------------------------------------------- void BoardInit(void) {   CLK_Configuration();  \/\/\u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435   GPIO_Configuration(); \/\/\u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c GPIO   TIM4_Configuration(); \/\/\u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0442\u0430\u0439\u043c\u0435\u04404   ADC_Configuration();  \/\/\u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c ADC1      select_status = SEL_NO;   s2h_cnt = 0;   s4h_cnt = 0;   s4l_cnt = 0;   s4s_cnt = 0;   tr_Lock = 0;      workMode = 0;   MyTimeOn = 0;   LedDiv   = 0;   rolcnt   = 0;   rolmask  = 1;   LedMask  = 0;   LedMode  = 0;      key_d_cnt   = 0;   key_p_cnt   = 0;   key_t_cnt   = 0;   key_d_press = 0;   key_p_press = 0;   key_t_press = 0;    key_d_change = 0;   key_p_change = 0;   key_t_change = 0;      \/\/ \u043d\u0430\u0434\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u0437 EEPROM  \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u044b     key_d_status = ReadStatusEEPROM('d');   key_p_status = ReadStatusEEPROM('p');   key_t_status = ReadStatusEEPROM('t');;      \/\/   vdc = 0;   heat_block = 0; }   \/\/-------------------------------------------------------- \/\/\u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u0436\u0434\u0443\u044e \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0443 \/\/\u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c 15uSec void SystemMS(void) { \/\/  TestPin(1);   MyTimeOn ++;   ScanSelector();        \/\/\u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440   ScanKeyHeat();         \/\/\u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0438 \u043f\u043e\u0434\u043e\u0433\u0440\u0435\u0432\u0430   StatusKeyHeat();       \/\/\u043c\u0435\u043d\u044f\u0435\u043c \u0441\u0442\u0430\u0442\u0443\u0441 \u043a\u043d\u043e\u043f\u043e\u043a \u043f\u043e\u0434\u043e\u0433\u0440\u0435\u0432\u0430          ScanKeyTank();         \/\/\u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0443 \u0431\u0430\u043a\u0430   StatusKeyTank();       \/\/\u043c\u0435\u043d\u044f\u0435\u043c \u0441\u0442\u0430\u0442\u0443\u0441 \u043a\u043d\u043e\u043f\u043a\u0438 \u0431\u0430\u043a\u0430   LedStatus(workMode);   \/\/\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u043c \/\/  TestPin(0); }   \/\/-------------------------------------------------------- \/\/\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0446\u0438\u043a\u043b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043d\u0435 \u0432 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0438 \/\/\u0446\u0438\u043a\u043b \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 8mS, \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c 2uS void Loop(void) {     \/\/TestPin(1);     Delay(11796);           \/\/\u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 9 mSec            ADC1_StartConversion(); \/\/\u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0447\u0435\u0440\u0435\u0437 30 uSec \u0433\u043e\u0442\u043e\u0432\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435     Delay(1310);            \/\/\u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 1 mSec     \/\/ADC 10 \u0440\u0430\u0437\u0440\u044f\u0434\u043e\u0432 !     \/\/\u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u043c 0x3ff (1023) -> 30000mV -> 3ff * 29     \/\/\u043f\u0438\u0442\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 4,8 \u0412\u043e\u043b\u044c\u0442\u0430 !     vdc = res_adc * 29;     SetHeat();     SetTank();     \/\/TestPin(0); }   \/\/-------------------------------------------------------- \/\/\u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u043c \u0432\u044b\u0445\u043e\u0434\u043e\u043c, PA2 void TestPin(uint8_t action) {   if(action == 0)   {     GPIO_WriteLow(TEST_PORT, TEST_PIN);   }   else   {     GPIO_WriteHigh(TEST_PORT, TEST_PIN);   } } \/\/-------------------------------------------------------- \/\/\u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043a\u0430\u0436\u0434\u0443\u044e \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0443 \/\/\u0447\u0438\u0442\u0430\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0430, \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u043c\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e 1 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 void ScanSelector(void) {   p2h = GPIO_ReadInputPin(S2H_PORT,S2H_PIN);\/\/\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 0 \u0438\u043b\u0438 \u043d\u043e\u043c\u0435\u0440 \u0431\u0438\u0442\u0430 !   p4h = GPIO_ReadInputPin(S4H_PORT,S4H_PIN);\/\/\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 0 \u0438\u043b\u0438 \u043d\u043e\u043c\u0435\u0440 \u0431\u0438\u0442\u0430 !   p4l = GPIO_ReadInputPin(S4L_PORT,S4L_PIN);\/\/\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 0 \u0438\u043b\u0438 \u043d\u043e\u043c\u0435\u0440 \u0431\u0438\u0442\u0430 !   p4s = GPIO_ReadInputPin(S4S_PORT,S4S_PIN);\/\/\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 0 \u0438\u043b\u0438 \u043d\u043e\u043c\u0435\u0440 \u0431\u0438\u0442\u0430 !        if((p2h == 0) &amp;&amp; (p4h != 0) &amp;&amp; (p4l != 0) &amp;&amp; (p4s != 0))     {       if(s2h_cnt > SEL_TICK_ON)       {         s2h_cnt = SEL_TICK_ON;         select_status = SEL_2H;         tr_Lock = 0;            \/\/\u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443         workMode = 1;         SetTransferBox(select_status,tr_Lock);       }       else       {         s2h_cnt ++;       }       s4h_cnt = 0; s4l_cnt = 0; s4s_cnt = 0;     }else     if((p2h != 0) &amp;&amp; (p4h == 0) &amp;&amp; (p4l != 0) &amp;&amp; (p4s != 0))     {       if(s4h_cnt > SEL_TICK_ON)       {         s4h_cnt = SEL_TICK_ON;         select_status = SEL_4H;         tr_Lock = 0;            \/\/\u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443         workMode = 2;         SetTransferBox(select_status,tr_Lock);       }       else       {         s4h_cnt ++;       }       s2h_cnt = 0; s4l_cnt = 0; s4s_cnt = 0;     }else     if((p2h != 0) &amp;&amp; (p4h != 0) &amp;&amp; (p4l == 0) &amp;&amp; (p4s != 0))     {       if(s4l_cnt > SEL_TICK_ON)       {         s4l_cnt = SEL_TICK_ON;         select_status = SEL_4L;         tr_Lock = tr_Lock;      \/\/\u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u043c \u043f\u043e\u043a\u0430  \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443         workMode = 3;         SetTransferBox(select_status,tr_Lock);       }       else       {         s4l_cnt ++;       }       s2h_cnt = 0; s4h_cnt = 0; s4s_cnt = 0;     }else     if((p2h != 0) &amp;&amp; (p4h != 0) &amp;&amp; (p4l != 0) &amp;&amp; (p4s == 0))     {       if(s4s_cnt > SEL_TICK_LOCK)       {         s4s_cnt = SEL_TICK_LOCK;         select_status = SEL_4S;         tr_Lock = 1;            \/\/\u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443         workMode = 4;         SetTransferBox(select_status,tr_Lock);       }       else       {         s4s_cnt ++;       }       s2h_cnt = 0; s4h_cnt = 0; s4l_cnt = 0;     }else     {       \/\/\u0432 \u0440\u0430\u0437\u0440\u044b\u0432\u0435 \u0438\u043b\u0438 \u0441\u0440\u0430\u0437\u0443 \u0432 \u0434\u0432\u0443\u0445 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0435\u043c       workMode = 0;       s2h_cnt = 0; s4h_cnt = 0; s4l_cnt = 0; s4s_cnt = 0;     }      \/\/\u043f\u043e\u043a\u0430\u0436\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438       if(tr_Lock == 1)     {       TestPin(1); \/\/G     }     else     {       TestPin(0); \/\/G     } } \/\/-------------------------------------------------------- \/\/\u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0438 \u043f\u043e\u0434\u043e\u0433\u0440\u0435\u0432\u0430 \u0441\u0438\u0434\u0435\u043d\u0438\u0439 void ScanKeyHeat(void) {     \/\/\u043a\u043d\u043e\u043f\u043a\u0430 \u043f\u043e\u0434\u043e\u0433\u0440\u0435\u0432\u0430 \u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0441\u0438\u0434\u0435\u043d\u044c\u044f     if(GPIO_ReadInputPin(D_KEY_PORT,D_KEY_PIN) == 0) \/\/\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 0 \u0438\u043b\u0438 \u043d\u043e\u043c\u0435\u0440 \u0431\u0438\u0442\u0430 !     {       if(key_d_cnt > SEL_TICK_ON)       {         key_d_cnt = SEL_TICK_ON;         key_d_press = 1;       }       else       {         key_d_cnt ++;       }     }     else     {       key_d_press = 0;       key_d_cnt   = 0;     }          \/\/\u043a\u043d\u043e\u043f\u043a\u0430 \u043f\u043e\u0434\u043e\u0433\u0440\u0435\u0432\u0430 \u043f\u0430\u0441\u0441\u0430\u0436\u0438\u0440\u0441\u043a\u043e\u0433\u043e \u0441\u0438\u0434\u0435\u043d\u044c\u044f     if(GPIO_ReadInputPin(P_KEY_PORT,P_KEY_PIN) == 0) \/\/\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 0 \u0438\u043b\u0438 \u043d\u043e\u043c\u0435\u0440 \u0431\u0438\u0442\u0430 !     {       if(key_p_cnt > SEL_TICK_ON)       {         key_p_cnt = SEL_TICK_ON;         key_p_press = 1;       }       else       {         key_p_cnt ++;       }     }     else     {       key_p_press = 0;       key_p_cnt   = 0;     } } \/\/-------------------------------------------------------- \/\/\u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0443 \u0431\u0430\u043a\u0430 void ScanKeyTank(void) {     \/\/\u043a\u043d\u043e\u043f\u043a\u0430 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0442\u043e\u043f\u043b\u0438\u0432\u043d\u043e\u0433\u043e \u0431\u0430\u043a\u0430     if(GPIO_ReadInputPin(TANK_KEY_PORT,TANK_KEY_PIN) == 0) \/\/\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 0 \u0438\u043b\u0438 \u043d\u043e\u043c\u0435\u0440 \u0431\u0438\u0442\u0430 !     {       if(key_t_cnt > SEL_TICK_ON)       {         key_t_cnt = SEL_TICK_ON;         key_t_press = 1;       }       else       {         key_t_cnt ++;       }     }     else     {       key_t_press = 0;       key_t_cnt   = 0;     } } \/\/-------------------------------------------------------- \/\/\u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0440\u0430\u0437\u0434\u0430\u0442\u043e\u0447\u043d\u0443\u044e \u043a\u043e\u0440\u043e\u0431\u043a\u0443 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 void SetTransferBox(uint8_t st,uint8_t lk) {   if((st == SEL_2H)||(st == SEL_NO ))   {     GPIO_WriteHigh(OUT_2H_PORT, OUT_2H_PIN);     GPIO_WriteLow (OUT_4L_PORT, OUT_4L_PIN);   }else   if(st == SEL_4H)     {     GPIO_WriteLow (OUT_2H_PORT, OUT_2H_PIN);     GPIO_WriteLow (OUT_4L_PORT, OUT_4L_PIN);   }else   if((st == SEL_4L)||(st == SEL_4S ))   {     if(lk == 1)     {       GPIO_WriteLow (OUT_2H_PORT, OUT_2H_PIN);       GPIO_WriteHigh(OUT_4L_PORT, OUT_4L_PIN);     }else     {       GPIO_WriteLow (OUT_2H_PORT, OUT_2H_PIN);       GPIO_WriteLow(OUT_4L_PORT, OUT_4L_PIN);     }   }else   { \/\/2h     GPIO_WriteLow (OUT_2H_PORT, OUT_2H_PIN);     GPIO_WriteLow (OUT_4L_PORT, OUT_4L_PIN);   } } \/\/-------------------------------------------------------- \/\/\u043c\u0435\u043d\u044f\u0435\u043c \u0441\u0442\u0430\u0442\u0443\u0441 \u043a\u043d\u043e\u043f\u043e\u043a \u043f\u043e\u0434\u043e\u0433\u0440\u0435\u0432\u0430 \u0441\u0438\u0434\u0435\u043d\u0438\u0439 void StatusKeyHeat(void) {   if(vdc &lt;= (VP_MIN - VP_GIST))    \/\/\u0435\u0441\u043b\u0438 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043d\u0438\u0437\u043a\u043e\u0435, \u043d\u0435 \u0433\u0440\u0435\u0435\u043c \u0438 \u0441\u0442\u0430\u0442\u0443\u0441\u044b \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u043c   {     heat_block = 1;   }       if(vdc >= (VP_MIN + VP_GIST))    \/\/\u0435\u0441\u043b\u0438 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043d\u0438\u0437\u043a\u043e\u0435, \u043d\u0435 \u0433\u0440\u0435\u0435\u043c \u0438 \u0441\u0442\u0430\u0442\u0443\u0441\u044b \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u043c   {     heat_block = 0;   }  \/\/--d     if(key_d_press == 1)          \/\/\u0435\u0441\u043b\u0438 \u043d\u0430\u0436\u0430\u0442\u0430 \u043a\u043d\u043e\u043f\u043a\u0430 \u043f\u043e\u0434\u043e\u0433\u0440\u0435\u0432\u0430 \u0432\u043e\u0434 \u0441\u0438\u0434\u0435\u043d\u044c\u044f     {       if (key_d_change == 0)      \/\/\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0435\u0449\u0435 \u043d\u0435 \u043c\u0435\u043d\u044f\u043b\u0438        {         if(key_d_status == KEY_NO)         {           key_d_status = KEY_SET;         }         else         {           key_d_status = KEY_NO;         }         WriteStatusEEPROM('d',key_d_status); \/\/\u0437\u0430\u043f\u0438\u0448\u0435\u043c \u043d\u043e\u0432\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 EEPROM         key_d_change = 1;         \/\/\u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0438 \u043a\u043d\u043e\u043f\u043a\u0443, \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u043c \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u0447\u0442\u043e \u0434\u043e \u043e\u0442\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u044f \u043a\u043d\u043e\u043f\u043a\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u043c       }     }     else     {       key_d_change = 0;           \/\/\u043e\u0442\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043a\u043d\u043e\u043f\u043a\u0443, \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u043d\u043e\u0432\u0430     } \/\/--p     if(key_p_press == 1)          \/\/\u0435\u0441\u043b\u0438 \u043d\u0430\u0436\u0430\u0442\u0430 \u043a\u043d\u043e\u043f\u043a\u0430 \u043f\u043e\u0434\u043e\u0433\u0440\u0435\u0432\u0430 \u043f\u0430\u0441\u0441 \u0441\u0438\u0434\u0435\u043d\u044c\u044f     {       if(key_p_change == 0)       \/\/\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0435\u0449\u0435 \u043d\u0435 \u043c\u0435\u043d\u044f\u043b\u0438        {         if(key_p_status == KEY_NO)         {           key_p_status = KEY_SET;         }         else         {           key_p_status = KEY_NO;         }         WriteStatusEEPROM('p',key_p_status); \/\/\u0437\u0430\u043f\u0438\u0448\u0435\u043c \u043d\u043e\u0432\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 EEPROM         key_p_change = 1;         \/\/\u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0438 \u043a\u043d\u043e\u043f\u043a\u0443, \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u043c \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u0447\u0442\u043e \u0434\u043e \u043e\u0442\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u044f \u043a\u043d\u043e\u043f\u043a\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u043c       }     }     else     {       key_p_change = 0;           \/\/\u043e\u0442\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043a\u043d\u043e\u043f\u043a\u0443, \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u043d\u043e\u0432\u0430     } } \/\/-------------------------------------------------------- \/\/\u043c\u0435\u043d\u044f\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u044b\u0445\u043e\u0434\u043e\u0432 \u043f\u043e\u0434\u043e\u0433\u0440\u0435\u0432\u0430 \u0441\u0438\u0434\u0435\u043d\u0438\u0439 void SetHeat(void) {   if(heat_block == 1)              \/\/\u0435\u0441\u043b\u0438 \u043f\u043e\u0434\u043e\u0433\u0440\u0435\u0432 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d   {       GPIO_WriteLow (D_HEAT_PORT, D_HEAT_PIN);       GPIO_WriteLow (P_HEAT_PORT, P_HEAT_PIN);   }   else   {     if(key_d_status == KEY_SET)     {       GPIO_WriteHigh(D_HEAT_PORT, D_HEAT_PIN);     }     else     {       GPIO_WriteLow (D_HEAT_PORT, D_HEAT_PIN);     }        if(key_p_status == KEY_SET)     {       GPIO_WriteHigh(P_HEAT_PORT, P_HEAT_PIN);     }     else     {       GPIO_WriteLow (P_HEAT_PORT, P_HEAT_PIN);     }   } } \/\/-------------------------------------------------------- \/\/\u043c\u0435\u043d\u044f\u0435\u043c \u0441\u0442\u0430\u0442\u0443\u0441 \u0432\u044b\u0445\u043e\u0434\u043e\u0432 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044f \u0431\u0430\u043a\u0430 void StatusKeyTank(void) {   if(key_t_press == 1)  \/\/\u0435\u0441\u043b\u0438 \u043d\u0430\u0436\u0430\u0442\u0430 \u043a\u043d\u043e\u043f\u043a\u0430 \u0441\u043c\u0435\u043d\u044b \u0431\u0430\u043a\u0430   {     if(key_t_change == 0)  \/\/\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0435\u0449\u0435 \u043d\u0435 \u043c\u0435\u043d\u044f\u043b\u0438     {       if(key_t_status == KEY_NO)       {         key_t_status = KEY_SET;       }       else       {         key_t_status = KEY_NO;       }       WriteStatusEEPROM('t',key_t_status); \/\/\u0437\u0430\u043f\u0438\u0448\u0435\u043c \u043d\u043e\u0432\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 EEPROM       key_t_change = 1;   \/\/\u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0438 \u043a\u043d\u043e\u043f\u043a\u0443, \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u043c \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u0447\u0442\u043e \u0434\u043e \u043e\u0442\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u044f \u043a\u043d\u043e\u043f\u043a\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u043c     }   }   else   {     key_t_change = 0;   \/\/\u043e\u0442\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043a\u043d\u043e\u043f\u043a\u0443, \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u043d\u043e\u0432\u0430   } } \/\/-------------------------------------------------------- \/\/\u043c\u0435\u043d\u044f\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u044b\u0445\u043e\u0434\u043e\u0432 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044f \u0431\u0430\u043a\u0430 void SetTank(void) {   \/\/\u043d\u0430\u0434\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 eeprom       if(key_t_status == KEY_SET)   {     GPIO_WriteHigh(TANK_R_PORT, TANK_R_PIN); \/\/B     \/\/GPIO_WriteLow(TANK_LED_PORT, TANK_LED_PIN); \/\/R        \/\/\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043c\u0438\u0433\u0430\u043d\u0438\u044f   }   else   {     GPIO_WriteLow(TANK_R_PORT, TANK_R_PIN); \/\/B     \/\/GPIO_WriteHigh(TANK_LED_PORT, TANK_LED_PIN); \/\/R       \/\/\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043c\u0438\u0433\u0430\u043d\u0438\u044f   } } \/\/-------------------------------------------------------- \/\/\u043c\u0438\u0433\u0430\u043d\u0438\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430\/\u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0432\u044b\u0445\u043e\u0434\u0430  \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0435\u0436\u0438\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \/\/\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0434\u0432\u0438\u0433 \u0440\u0430\u0437 \u0432 0,2 \u0441\u0435\u043a\u0443\u043d\u0434\u044b 12 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \/\/\u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u0438\u0437 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430 (\u0440\u0430\u0437 \u0432 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0443) \/\/\u043f\u0435\u0440\u0438\u043e\u0434 \u043c\u0438\u0433\u0430\u043d\u0438\u044f \u0440\u0430\u0432\u0435\u043d 12*200\u043c\u0421\u0435\u043a=2.4 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \/\/\u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u0430 \u043a\u0440\u0430\u0442\u043d\u0430 200\u043c\u0421\u0435\u043a voidLedStatus(uint8_tLedMode) {   switch(LedMode)   {     case0:     LedMask = 0x0555;\/\/\u043c\u0438\u0433\u0430\u043d\u0438\u0435 \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u043a\u0430\u0436\u0434\u044b\u0435 0.2 \u0441\u0435\u043a\u0443\u043d\u0434\u044b (6 \u0440\u0430\u0437)     break;     case1:     LedMask = 0x0001;\/\/1 \u0440\u0430\u0437 \u043c\u0438\u0433\u043d\u0435\u043c     break;     case2:     LedMask = 0x0005;\/\/2 \u0440\u0430\u0437\u0430 \u043c\u0438\u0433\u043d\u0435\u043c     break;     case3:     LedMask = 0x0015;\/\/3 \u0440\u0430\u0437\u0430 \u043c\u0438\u0433\u043d\u0435\u043c     break;     case4:     LedMask = 0x0055;\/\/4 \u0440\u0430\u0437\u0430 \u043c\u0438\u0433\u043d\u0435\u043c     break;     case5:     LedMask = 0x0155;\/\/5 \u0440\u0430\u0437 \u043c\u0438\u0433\u043d\u0435\u043c     break;     case6:     LedMask = 0x0013;\/\/1 \u0440\u0430\u0437 \u043c\u0438\u0433\u043d\u0435\u043c \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e 1 \u043a\u043e\u0440\u043e\u0442\u043a\u043e     break;     case7:     LedMask = 0x0053;\/\/1 \u0440\u0430\u0437 \u043c\u0438\u0433\u043d\u0435\u043c \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e 2 \u043a\u043e\u0440\u043e\u0442\u043a\u043e     break;     case8:     LedMask = 0x0153;\/\/1 \u0440\u0430\u0437 \u043c\u0438\u0433\u043d\u0435\u043c \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e 3 \u043a\u043e\u0440\u043e\u0442\u043a\u043e     break;     default:     LedMask = 0x0555;\/\/6 \u0440\u0430\u0437 \u043c\u0438\u0433\u043d\u0435\u043c     break;   }   LedDiv++;   \/\/\u0434\u043e\u0441\u0447\u0438\u0442\u0430\u043b\u0438 \u0434\u043e 0,2 \u0441\u0435\u043a\u0443\u043d\u0434\u044b   \/\/\u043f\u043e\u043b\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0438\u0437 16 \u0431\u0438\u0442 * 0,2 \u0441\u0435\u043a\u0443\u043d\u0434\u044b = 4 \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u0435\u0440\u0438\u043e\u0434 \u043c\u0438\u0433\u0430\u043d\u0438\u044f   if(LedDiv >= 200)   {     \/\/\u0441\u0434\u0432\u0438\u043d\u0435\u043c \u043c\u0430\u0441\u043a\u0443 \u0432 \u043d\u0443\u0436\u043d\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e     \/\/\u0438 \u0432\u044b\u0434\u0435\u043b\u0438\u043c \u0431\u0438\u0442     rolbit = (LedMask &amp; (rolmask &lt;&lt; rolcnt)) >> rolcnt;     \/\/\u043e\u0442\u043f\u0440\u0430\u0432\u0430\u043c \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430     LedT(rolbit); \/\/R     \/\/\u043e\u0442\u043f\u0440\u0430\u0432\u0430\u043c \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430     \/\/\u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0431\u0438\u0442\u0443     if( rolcnt &lt; 11 )     { rolcnt ++ ; }     else     { rolcnt = 0; }\/\/\u0438\u043b\u0438 \u0441\u0431\u0440\u043e\u0441\u0438\u043c \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0448\u043b\u0438 \u0432\u0441\u0435 \u0431\u0438\u0442\u044b     LedDiv = 0;   } } \/\/-------------------------------------------------------- \/\/\u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c \u0431\u0430\u043a\u0430, PA1 void LedT(uint8_t action) \/\/R {   if(action == 0)   {     GPIO_WriteLow(TANK_LED_PORT, TANK_LED_PIN);   }   else   {     GPIO_WriteHigh(TANK_LED_PORT, TANK_LED_PIN);   } } \/\/-------------------------------------------------------- \/\/\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0439 \u0432 EEPROM \u0441\u0442\u0430\u0442\u0443\u0441 \u043f\u043e\u0434\u043e\u0433\u0440\u0435\u0432\u0430 \u0441\u0438\u0434\u0435\u043d\u0438\u0439  \u0438\u043b\u0438 \u0431\u0430\u043a\u0430 \/\/s = 'D' \u0438\u043b\u0438 'd' - \u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c, 'P' \u0438\u043b\u0438 'p' - \u043f\u0430\u0441\u0441\u0430\u0436\u0438\u0440, \/\/'T' \u0438\u043b\u0438 't' - \u0442\u043e\u043f\u043b\u0438\u0432\u043d\u044b\u0439 \u0431\u0430\u043a \/\/\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c 0 - \u0435\u0441\u043b\u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043e, 1 \u0435\u0441\u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043e uint8_t ReadStatusEEPROM(char s) {   uint8_t       stat;   uint32_tByteAddr;   uint8_tByteData = 0;        if((s == 'D')||(s == 'd'))   {     ByteAddr    = D_HEAT_EEPROM;   }   else   if((s == 'P')||(s == 'p'))   {     ByteAddr    = P_HEAT_EEPROM;   }   else   if((s == 'T')||(s == 't'))   {     ByteAddr    = T_EEPROM;   }   else   {     return 0; \/\/\u0432\u044b\u0445\u043e\u0434\u0438\u043c \u0441 0 \u0431\u0435\u0437 \u0447\u0442\u0435\u043d\u0438\u044f     }      ByteData= FLASH_ReadByte(ByteAddr);   if(ByteData == 0xff)   {     stat = 1;   }else   {     stat = 0;   }   return stat;       } \/\/-------------------------------------------------------- \/\/\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 EEPROM \u0441\u0442\u0430\u0442\u0443\u0441 \u043f\u043e\u0434\u043e\u0433\u0440\u0435\u0432\u0430 \u0441\u0438\u0434\u0435\u043d\u0438\u0439 \u0438\u043b\u0438 \u0431\u0430\u043a\u0430 \/\/s = 'D' \u0438\u043b\u0438 'd' - \u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c, 'P' \u0438\u043b\u0438 'p' - \u043f\u0430\u0441\u0441\u0430\u0436\u0438\u0440, \/\/'T' \u0438\u043b\u0438 't' - \u0442\u043e\u043f\u043b\u0438\u0432\u043d\u044b\u0439 \u0431\u0430\u043a \/\/st - \u0441\u0442\u0430\u0442\u0443\u0441 1 \u0438\u043b\u0438 0 \/\/\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c 1 - \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u043b\u043e\u0441\u044c, 0 \u0435\u0441\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0430 uint8_t WriteStatusEEPROM(char s,uint8_t st) {   uint8_t       stat = 0;   uint32_tByteAddr;   uint8_tByteData = 0;        if((s == 'D')||(s == 'd'))   {     ByteAddr    = D_HEAT_EEPROM;   }   else   if((s == 'P')||(s == 'p'))   {     ByteAddr    = P_HEAT_EEPROM;   }   else   if((s == 'T')||(s == 't'))   {     ByteAddr    = T_EEPROM;   }   else   {     return stat;   }      if(st == 1)   {     ByteData = 0xff;    }   else   {     ByteData = 0x00;    }      FLASH_Unlock(FLASH_MEMTYPE_DATA);             \/\/\u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c EEPROM   FLASH_ProgramByte(ByteAddr, ByteData);        \/\/\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0431\u0430\u0439\u0442 \u0432  EEPROM   FLASH_Lock(FLASH_MEMTYPE_DATA);               \/\/\u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c EEPROM   stat = 1;   return stat;       } \/\/-------------------------------------------------------- \/*         \/\/\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 \u0410\u0426\u041f, \u0432\u0441\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 !     if(vdc &lt; 10000)     {       workMode = 1;     }else     if((vdc >= 10000)&amp;&amp;(vdc &lt; 11000))     {       workMode = 2;     }else     if((vdc >= 11000)&amp;&amp;(vdc &lt; 12000))     {       workMode = 3;     }else     if((vdc >= 12000)&amp;&amp;(vdc &lt; 13000))     {       workMode = 4;     }else     if((vdc >= 13000)&amp;&amp;(vdc &lt; 14000))     {       workMode = 5;     }else     if(vdc >= 14000)     {       workMode = 6;     }else     {       workMode = 0;     } *\/  <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0444\u0430\u0439\u043b main.c:<\/p>\n<details class=\"spoiler\">\n<summary>Hidden text<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>#include \"stm8s.h\" #include \"board.h\" \/\/-------------------------------------------------------- \/\/\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 uint16_t        res_adc; uint8_t         flag_out_adc = 0; uint16_t        ee_addr = 0;        \/\/\u0430\u0434\u0440\u0435\u0441 \u0434\u043b\u044f eeprom uint8_t         ee_data = 0;        \/\/\u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f eeprom    \/\/-------------------------------------------------------- \/\/\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f ADC \/\/22 - \u044d\u0442\u043e \u0432\u0435\u043a\u0442\u043e\u0440 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f adc (\u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0432 datasheet) \/\/\u0432\u0440\u0435\u043c\u044f  ~5uSec INTERRUPT_HANDLER(ADC1_IRQHandler, 22) {   res_adc = ADC1_GetConversionValue();   ADC1_ClearITPendingBit(ADC1_IT_EOC); } \/\/-------------------------------------------------------- \/\/\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u0439\u043c\u0435\u0440\u0430 4 \/\/23 - \u044d\u0442\u043e \u0432\u0435\u043a\u0442\u043e\u0440 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u0439\u043c\u0435\u0440\u0430 4 (\u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0432 datasheet) INTERRUPT_HANDLER(IRQ_Handler_TIM4, 23) {   \/\/\u0434\u0435\u043b\u0430\u0435\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044e \u0442\u0430\u0439\u043c\u0435\u0440\u0430 1mSec   SystemMS();      \/\/ \u0421\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0444\u043b\u0430\u0433 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f   TIM4_ClearITPendingBit(TIM4_IT_UPDATE); } \/\/--------------------------------------------------------  int main( void ) {   \/\/\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f   BoardInit();   \/\/\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f   enableInterrupts();   \/\/\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0446\u0438\u043a\u043b   while(1)   {     Loop();   } \/\/  return 0;   \/\/\u0441\u044e\u0434\u0430 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u043c }  <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u042d\u0442\u043e \u0431\u044b\u043b \u043f\u0435\u0440\u0432\u044b\u0439 \u0438 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u043a\u0430 \u043c\u043e\u0439 \u043e\u043f\u044b\u0442 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c, \u0438 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043f\u043e\u0441\u043b\u0443\u0436\u0438\u043b \u043a\u0430\u043a \u0448\u0430\u0431\u043b\u043e\u043d \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u044d\u0442\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430. \u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0431\u044b\u043b\u0430 \u0447\u0443\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0430 \u0441\u0445\u0435\u043c\u0430 \u0438 \u043a\u043e\u0434, \u0447\u0443\u0442\u044c \u043c\u043e\u0434\u0435\u0440\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043b\u0438\u0446\u0435\u0432\u0430\u044f \u043f\u0430\u043d\u0435\u043b\u044c (\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u043f\u0435\u0440\u0435\u043a\u0440\u0430\u0448\u0435\u043d\u044b \u043f\u043e\u0434 \u0441\u0432\u043e\u0438 \u043f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b):<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/362\/118\/3e9\/3621183e91684ff853cc37701b25f34d.JPG\" alt=\"\u043d\u043e\u0432\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u043b\u043e\u043a\u0430\" title=\"\u043d\u043e\u0432\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u043b\u043e\u043a\u0430\" width=\"773\" height=\"339\"\/><\/p>\n<div><figcaption>\u043d\u043e\u0432\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u043b\u043e\u043a\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 <s>\u043d\u0430\u043f\u0438\u043b\u044c\u043d\u0438\u043a\u043e\u043c<\/s> \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c\u0438 \u0440\u0443\u043a\u0430\u043c\u0438, \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0432\u0435\u0437\u0434\u0435\u0445\u043e\u0434 \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043a\u043e\u043b\u0435\u0441\u0430\u0445 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430\u043c\u0438 \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u0448\u0438\u043d\u0430\u0445. \u0418 \u0441 \u0442\u0435\u0445 \u043f\u043e\u0440 \u0433\u0434\u0435-\u0442\u043e \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u043a\u043e\u0440\u044f\u0435\u0442. <\/p>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e, \u0447\u0442\u043e \u0434\u043e\u0447\u0438\u0442\u0430\u043b\u0438. \u041c\u043e\u0436\u0435\u0442 \u044d\u0442\u043e \u043a\u043e\u043c\u0443-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0432 \u0442\u0432\u043e\u0440\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u043b\u0438 \u0440\u0435\u043c\u043e\u043d\u0442\u0435, \u0445\u043e\u0442\u0435\u043b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a \u043e\u0434\u0438\u043d \u0438\u0437 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043c\u043e\u0434\u0435\u0440\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0448\u0442\u0430\u0442\u043d\u044b\u0445 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f, \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043c\u0435\u043d\u044f\u044f \u0438\u043d\u0442\u0435\u0440\u044c\u0435\u0440.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/779488\/\"> https:\/\/habr.com\/ru\/articles\/779488\/<\/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\">\n<div><figcaption>\u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0432 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c, \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0443 \u0430\u0432\u0442\u043e\u043b\u044e\u0431\u0438\u0442\u0435\u043b\u0435\u0439 &#8212; \u043f\u043e\u043a\u0443\u043f\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u0435\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0438 \u043a\u0430\u043a \u0441\u0432\u043e\u0435\u0433\u043e \u0440\u043e\u0434\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u0432\u0437\u0440\u043e\u0441\u043b\u044b\u0445, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u043d\u0435\u043c \u043f\u043e \u0431\u0435\u0437\u0434\u043e\u0440\u043e\u0436\u044c\u044e. \u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0442\u0430\u043a\u0438\u0445 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u0439, \u0434\u043e \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0431\u044b\u043b \u00ab\u0423\u0410\u0417-Patriot\u00bb. \u041d\u0435\u00a0\u0431\u0443\u0434\u0443 \u0432\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f, \u043d\u0430\u00a0\u0447\u0442\u043e\u00a0\u0438\u0434\u0443\u0442 \u0442\u0432\u043e\u0440\u0447\u0435\u0441\u043a\u0438\u0435 \u043b\u044e\u0434\u0438 \u0438 \u0441\u00a0\u043a\u0430\u043a\u0438\u043c\u0438 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441\u0430\u043c\u0438 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044e\u0442\u0441\u044f, \u043e\u043f\u0438\u0448\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044f \u0440\u0435\u0436\u0438\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e\u043b\u043d\u043e\u2011\u043f\u0440\u0438\u0432\u043e\u0434\u043d\u043e\u0439 \u0442\u0440\u0430\u043d\u0441\u043c\u0438\u0441\u0441\u0438\u0438 \u0441 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 \u043f\u043e\u0434\u043e\u0433\u0440\u0435\u0432\u0430 \u0441\u0438\u0434\u0435\u043d\u0438\u0439 (\u0434\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0440\u0430\u0437\u0434\u0430\u0442\u043a\u0438).  \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0432\u043f\u043e\u043b\u043d\u0435 \u0441\u0435\u0431\u0435 \u043a\u0430\u043a\u0430\u044f \u0435\u0441\u0442\u044c, \u043d\u043e \u0435\u0441\u043b\u0438 \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u0432\u044b \u043c\u043e\u0434\u0435\u0440\u043d\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u0434\u043b\u044f \u0441\u0435\u0431\u044f, \u0431\u044b\u0432\u0430\u0435\u0442 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0445\u0435\u043c\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0443\u0437\u043b\u0430 \u043f\u043e\u0434 \u0441\u0432\u043e\u0438 \u043d\u0443\u0436\u0434\u044b &#8212; \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u0448\u0438\u043d\u0430\u0445 \u0438 \u0447\u0442\u043e-\u043b\u0438\u0431\u043e \u0435\u0449\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u0438\u043c\u0435\u0442\u044c \u0441\u0445\u0435\u043c\u0443 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0430, \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0430\u043c \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430.<\/p>\n<p>\u041f\u0440\u0438\u0432\u0435\u0434\u0443 \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u043c\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u0443 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043f\u0430\u043b \u043c\u043d\u0435 \u0432 \u0440\u0443\u043a\u0438:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0441\u0445\u0435\u043c\u0430 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u0445\u0435\u043c\u0430 \u043d\u0435 \u0441\u043b\u043e\u0436\u043d\u0430\u044f, \u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u0430\u0446\u0438\u0438, \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b. \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0441\u0442\u0438 \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c, \u043d\u043e \u0441 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f: \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f, \u043d\u043e \u0437\u0430\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0446\u0435\u043b\u044c &#8212; \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438. \u041c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0432 \u0431\u043b\u043e\u043a\u0435 &#8212; STM8S003F3, \u043f\u0440\u043e\u0441\u0442\u043e\u0439 8-\u0431\u0438\u0442\u043d\u044b\u0439, \u0441 \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u044b\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435\u043c \u0442\u043e\u043a\u0430 \u0438 \u0446\u0435\u043d\u043e\u0439. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0443\u043f\u0438\u043b \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0443\u044e \u043f\u043b\u0430\u0442\u0443 \u0441 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c \u0441\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440\u043e\u043c \u043f\u043e \u0448\u0438\u043d\u0435 SWIM, \u0438 \u0435\u0449\u0435 \u043f\u043b\u0430\u0442\u0443 \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c. \u0417\u0430\u043e\u0434\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u043b \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u0441\u0440\u0435\u0434\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 (\u043d\u0430 \u0425\u0430\u0431\u0440\u0435 \u0435\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0430 \u044d\u0442\u043e \u0442\u0435\u043c\u0443).<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430 \u0438 \u043f\u043b\u0430\u0442\u0430 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0431\u043b\u043e\u043a\u0430 \u0435\u0441\u0442\u044c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440\u0430 \u043a \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u0437\u0430\u043e\u0434\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c\u0441\u044f \u043a \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u043c \u043f\u0438\u043d\u0430\u043c \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0421\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0434\u043b\u044f \u043c\u0438\u0433\u0430\u043d\u0438\u044f \u043f\u0440\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0435<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\">\n<div><figcaption>\u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u0440\u0430\u043a\u0443\u0440\u0441\u043e\u043c<\/figcaption><\/div>\n<\/figure>\n<p>\u0432\u0438\u0434 <\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0432\u0438\u0434 \u043f\u043e\u0434 \u0443\u0433\u043b\u043e\u043c<\/figcaption><\/div>\n<\/figure>\n<p>\u0448\u0442\u0430\u0442\u043d\u044b\u0435 \u0431\u0435\u0441\u043a\u043e\u0440\u043f\u0443\u0441\u043d\u044b\u0435 \u0440\u0435\u043b\u0435 \u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043e\u0441\u043e\u0431\u043e\u0439 \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u044c\u044e, \u0438\u0445 \u0437\u0430\u043c\u0435\u043d\u0438\u043b\u0438 \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u0438\u0435, \u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043d\u0430\u043f\u0430\u0438\u0432\u0430\u0442\u044c \u043e\u0442\u0433\u0438\u0431\u0430\u044f \u0432\u044b\u0432\u043e\u0434 \u043a\u043e\u0440\u043f\u0443\u0441\u0430.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0430 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0435, \u0442\u043e \u0438 \u043a\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u043c:<\/p>\n<p>\u0444\u0430\u0439\u043b stm8s_conf.h:<\/p>\n<details class=\"spoiler\">\n<summary>Hidden text<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>\/**   ******************************************************************************   * @file     stm8s_conf.h   * @author   MCD Application Team   * @version  V2.0.0   * @date     25-February-2011   * @brief    This file is used to configure the Library.   ******************************************************************************   * @attention   *   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING   * FROM THE CONTENT OF SUCH FIRMWARE AND\/OR THE USE MADE BY CUSTOMERS OF THE   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.   *   * &lt;h2>&lt;center>&amp;copy; COPYRIGHT 2011 STMicroelectronics&lt;\/center>&lt;\/h2>   ******************************************************************************   *\/   \/* Define to prevent recursive inclusion -------------------------------------*\/ #ifndef __STM8S_CONF_H #define __STM8S_CONF_H  \/* Includes ------------------------------------------------------------------*\/ #include \"stm8s.h\"  \/* Uncomment the line below to enable peripheral header file inclusion *\/ #if defined(STM8S105) || defined(STM8S103) || defined(STM8S903) || defined (STM8AF626x) #include \"stm8s_adc1.h\"  #endif \/* (STM8S105) ||(STM8S103) || (STM8S903) || STM8AF626x*\/ #if defined(STM8S208) || defined(STM8S207) || defined (STM8AF52Ax) || defined (STM8AF62Ax)  #include \"stm8s_adc2.h\" #endif \/* (STM8S208) || (STM8S207) || (STM8AF62Ax) || (STM8AF52Ax) *\/ #include \"stm8s_awu.h\" #include \"stm8s_beep.h\" #if defined (STM8S208) || defined (STM8AF52Ax)  #include \"stm8s_can.h\" #endif \/* STM8S208 || STM8AF52Ax *\/ #include \"stm8s_clk.h\" #include \"stm8s_exti.h\" #include \"stm8s_flash.h\" #include \"stm8s_gpio.h\" #include \"stm8s_i2c.h\" #include \"stm8s_itc.h\" #include \"stm8s_iwdg.h\" #include \"stm8s_rst.h\" #include \"stm8s_spi.h\" #include \"stm8s_tim1.h\" #ifndef STM8S903  #include \"stm8s_tim2.h\" #endif \/* STM8S903 *\/ #if defined(STM8S208) || defined(STM8S207) ||defined(STM8S105) || defined (STM8AF52Ax) ||\\     defined (STM8AF62Ax) || defined (STM8AF626x)  #include \"stm8s_tim3.h\" #endif \/* (STM8S208) ||defined(STM8S207) ||defined(STM8S105) *\/  #ifndef STM8S903  #include \"stm8s_tim4.h\" #endif \/* STM8S903 *\/ #ifdef STM8S903  #include \"stm8s_tim5.h\"  #include \"stm8s_tim6.h\" #endif \/* STM8S903 *\/ #if defined(STM8S208) ||defined(STM8S207) ||defined(STM8S103) ||defined(STM8S903) ||\\     defined (STM8AF52Ax) || defined (STM8AF62Ax)  #include \"stm8s_uart1.h\" #endif \/* STM8S208 || STM8S207 || STM8S103 ||STM8S903 || STM8AF52Ax || STM8AF62Ax *\/ #if defined (STM8S105) || defined (STM8AF626x)  #include \"stm8s_uart2.h\" #endif \/* STM8S105 || STM8AF626x *\/ #if defined(STM8S208) ||defined(STM8S207) || defined (STM8AF52Ax) || defined (STM8AF62Ax)  #include \"stm8s_uart3.h\" #endif \/* STM8S208 || STM8S207 || STM8AF52Ax || STM8AF62Ax *\/  #include \"stm8s_wwdg.h\"  \/* Exported types ------------------------------------------------------------*\/ \/* Exported constants --------------------------------------------------------*\/ \/* Uncomment the line below to expanse the \"assert_param\" macro in the    Standard Peripheral Library drivers code *\/ \/\/#define USE_FULL_ASSERT    (1)   \/* Exported macro ------------------------------------------------------------*\/ #ifdef  USE_FULL_ASSERT  \/**   * @brief  The assert_param macro is used for function's parameters check.   * @param expr: If expr is false, it calls assert_failed function   *   which reports the name of the source file and the source   *   line number of the call that failed.   *   If expr is true, it returns no value.   * @retval : None   *\/ #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) \/* Exported functions ------------------------------------------------------- *\/ void assert_failed(uint8_t* file, uint32_t line); #else #define assert_param(expr) ((void)0) #endif \/* USE_FULL_ASSERT *\/  #endif \/* __STM8S_CONF_H *\/  \/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****\/ <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0444\u0430\u0439\u043b board.h:<\/p>\n<details class=\"spoiler\">\n<summary>Hidden text<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>\/\/\u0440\u0430\u0441\u043f\u0438\u043d\u043e\u0432\u043a\u0430 \u043f\u043b\u0430\u0442\u044b STM8S003F3P6 1kB RAM 128 EEPROM 8k Flash \/\/ \/\/             +---|___|---+ \/\/      PD4  o-|           |-o PD3 \/\/      PD5  o-|           |-o PD2 \/\/      PD6  o-|           |-o PD1 \/\/     NRST  o-|           |-o PC7 \/\/      PA1  o-|           |-o PC6 \/\/      PA2  o-|           |-o PC5 \/\/      GND  o-|           |-o PC4 \/\/       5V  o-|           |-o PC3 \/\/     3.3V  o-|           |-o PB4 \/\/      PA4  o-|           |-o PB5  \/\/             +-----------+ \/\/ \/\/************************************************************************** \/\/\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043b\u0430\u0442\u044b \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0430: \/\/PA1  - \u0432\u044b\u0445\u043e\u0434 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0431\u0430\u043a\u0430 2 \/\/PA2  - \u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \/\/PA3  - \u043a\u043d\u043e\u043f\u043a\u0430 \u0432\u0445\u043e\u0434 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044f \u0431\u0430\u043a\u0430 1\/2 \/\/PB4  - \u043a\u043d\u043e\u043f\u043a\u0430 \u0432\u0445\u043e\u0434 PHEAT \/\/PB5  - \u043a\u043d\u043e\u043f\u043a\u0430 \u0432\u0445\u043e\u0434 DHEAT \/\/PC3  - \u0432\u044b\u0445\u043e\u0434 \u0440\u0435\u043b\u0435\/\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 DHEAT \/\/PC4  - \u0432\u0445\u043e\u0434 ADC_IN2 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u0431\u043b\u043e\u043a\u0430 (VCC = 5V) \/\/PC5  - \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0432\u0445\u043e\u0434 2H \/\/PC6  - \u0432\u044b\u0445\u043e\u0434 \u0440\u0435\u043b\u0435\/\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 PHEAT \/\/PC7  - \u0432\u044b\u0445\u043e\u0434 \u0440\u0435\u043b\u0435\/\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0431\u0430\u043a\u0430 1 \/\/PD1  - SWIM \/\/PD2  - \u0432\u044b\u0445\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f X1_3 \/\/PD3  - \u0432\u044b\u0445\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f X1_1 \/\/PD4  - \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0432\u0445\u043e\u0434 4S \/\/PD5  - \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0432\u0445\u043e\u0434 4L \/\/PD6  - \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0432\u0445\u043e\u0434 4H \/\/ \/\/TIM4 8 - \u0431\u0438\u0442\u043d\u044b\u0439 \u0442\u0430\u0439\u043c\u0435\u0440 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f 1 \u043c\u0421\u0435\u043a \/\/ \/\/ \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u043f\u0438\u0442\u0430\u043d\u0438\u044f, \u0432\u0445\u043e\u0434\u043d\u043e\u0435 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 -> \u0432\u0445\u043e\u0434 ADC \/\/ 12V -> 2V \/\/ 18V -> 3V \/\/ ... \/\/ \/\/\u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 RGB \u0438 \u043a\u043d\u043e\u043f\u043a\u0430 \/\/PC7(17) - B (\u0440\u0435\u043b\u0435 \u0431\u0430\u043a\u0430) \/\/PA2(6)  - G  test pin \/\/PA1(5)  - R (\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0431\u0430\u043a\u0430) \/\/PA4 - \u043a\u043d\u043e\u043f\u043a\u0430 SW7 \/\/ \/\/\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043e\u043a \u0445\u0440\u0430\u043d\u0438\u043c \u0432 EEPROM \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043f\u0438\u0442\u0430\u043d\u0438\u044f \/\/\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430: \/\/ 0x00 - \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u043f\u043e\u0434\u043e\u0433\u0440\u0435\u0432\u0430 \u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0441\u0438\u0434\u0435\u043d\u044c\u044f \/\/ 0x01 - \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u043f\u043e\u0434\u043e\u0433\u0440\u0435\u0432\u0430 \u043f\u0430\u0441\u0441\u0430\u0436\u0438\u0440\u0441\u043a\u043e\u0433\u043e \u0441\u0438\u0434\u0435\u043d\u044c\u044f \/\/ 0x03 - \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044f \u0431\u0435\u043d\u0437\u043e\u0431\u0430\u043a\u0430 \/\/  #ifndef __BOARD_H #define __BOARD_H #include \"stm8s.h\"  \/\/\u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0440\u0430\u0437\u0434\u0430\u0442\u043a\u0438 ***** \/\/\u0432\u0445\u043e\u0434\u044b #define  S2H_PIN   GPIO_PIN_5 #define  S2H_PORT  GPIOC #define  S4H_PIN   GPIO_PIN_6 #define  S4H_PORT  GPIOD #define  S4L_PIN   GPIO_PIN_5 #define  S4L_PORT  GPIOD #define  S4S_PIN   GPIO_PIN_4 #define  S4S_PORT  GPIOD \/\/\u0432\u044b\u0445\u043e\u0434\u044b #define  OUT_2H_PIN     GPIO_PIN_2 #define  OUT_2H_PORT    GPIOD #define  OUT_4L_PIN     GPIO_PIN_3 #define  OUT_4L_PORT    GPIOD  \/\/\u043f\u043e\u0434\u043e\u0433\u0440\u0435\u0432 \u0441\u0438\u0434\u0435\u043d\u0438\u0439 ***** \/\/\u0432\u0445\u043e\u0434\u044b #define  D_KEY_PIN   GPIO_PIN_5 #define  D_KEY_PORT  GPIOB #define  P_KEY_PIN   GPIO_PIN_4 #define  P_KEY_PORT  GPIOB \/\/\u0432\u044b\u0445\u043e\u0434\u044b: #define  D_HEAT_PIN   GPIO_PIN_3 #define  D_HEAT_PORT  GPIOC #define  P_HEAT_PIN   GPIO_PIN_6 #define  P_HEAT_PORT  GPIOC  \/\/\u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043f\u0438\u0442\u0430\u043d\u0438\u044f ***** #define  V_IN_PIN   GPIO_PIN_4 #define  V_IN_PORT  GPIOC  \/\/\u0442\u043e\u043f\u043b\u0438\u0432\u043d\u044b\u0439 \u0431\u0430\u043a ***** \/\/\u0432\u0445\u043e\u0434\u044b #define  TANK_KEY_PIN   GPIO_PIN_3 #define  TANK_KEY_PORT  GPIOA \/\/\u0432\u044b\u0445\u043e\u0434\u044b: #define  TANK_R_PIN     GPIO_PIN_7 #define  TANK_R_PORT    GPIOC #define  TANK_LED_PIN   GPIO_PIN_1 #define  TANK_LED_PORT  GPIOA  \/\/\u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0432\u044b\u0445\u043e\u0434 (\u043d\u0435 \u0440\u0430\u0437\u0432\u0435\u0434\u0435\u043d \u043d\u0430 \u043f\u043b\u0430\u0442\u0435) #define  TEST_PIN   <\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-362462","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/362462","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=362462"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/362462\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=362462"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=362462"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=362462"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}