{"id":294390,"date":"2019-09-07T21:00:11","date_gmt":"2019-09-07T21:00:11","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=294390"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=294390","title":{"rendered":"\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u043e\u043b\u044f\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043d\u0430 \u0421++ \u0431\u0435\u0437 \u0443\u0449\u0435\u0440\u0431\u0430 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438(\u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 CortexM)"},"content":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/et\/ni\/fl\/etnifl3hcinjjsqt8skfvv6km5q.png\" alt=\"image\"><br \/>  <sub> \u0420\u0438\u0441. \u0432\u0437\u044f\u0442 \u0441 \u0441\u0430\u0439\u0442\u0430 <a href=\"https:\/\/www.extremetech.com\/wp-content\/uploads\/2016\/07\/MegaProcessor-Feature.jpg\">www.extremetech.com\/wp-content\/uploads\/2016\/07\/MegaProcessor-Feature.jpg<\/a> <\/sub><\/p>\n<p>  \u0412\u0441\u0435\u043c \u0434\u043e\u0431\u0440\u043e\u0433\u043e \u0437\u0434\u0440\u0430\u0432\u0438\u044f!<br \/>  <a href=\"https:\/\/habr.com\/ru\/post\/459204\/\">\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u044f \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u0432\u043e\u043f\u0440\u043e\u0441 \u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0441 \u044f\u0434\u0440\u043e\u043c CortexM \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u0421++ \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c.<\/p>\n<p>  \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u0434\u0435\u044e \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443 \u0438 \u0435\u0433\u043e \u043f\u043e\u043b\u044f\u043c \u0431\u0435\u0437 \u0443\u0449\u0435\u0440\u0431\u0430 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 SVD \u0444\u0430\u0439\u043b\u043e\u0432 \u0421++ \u043a\u043b\u0430\u0441\u0441\u044b. <\/p>\n<p>  \u0412\u0441\u0435\u0445 \u043a\u043e\u0433\u043e \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b, \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u043a\u0430\u0442. \u041a\u043e\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043c\u043d\u043e\u0433\u043e.<br \/>  <a name=\"habracut\"><\/a>   <\/p>\n<h3>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h3>\n<p>  \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 <a href=\"https:\/\/yogiken.files.wordpress.com\/2010\/02\/c-register-access.pdf\">C++ Hardware Register Access Redux<\/a>, Ken Smith \u043f\u043e\u043a\u0430\u0437\u0430\u043b, \u043a\u0430\u043a \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 \u0438 \u0434\u0430\u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u044d\u0442\u043e \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 <a href=\"https:\/\/github.com\/kensmith\/cppmmio\">github.com\/kensmith\/cppmmio<\/a>. <br \/>  \u0417\u0430\u0442\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u044e\u0434\u0435\u0439 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u043b\u0438 \u044d\u0442\u0443 \u0438\u0434\u0435\u044e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/blog.salkinium.com\/typesafe-register-access-in-c++\/\">Niklas Hauser \u0441\u0434\u0435\u043b\u0430\u043b \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u0437\u043e\u0440<\/a> \u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b \u0435\u0449\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c. <\/p>\n<p>  \u0427\u0430\u0441\u0442\u044c \u044d\u0442\u0438\u0445 \u0438\u0434\u0435\u0439 \u0431\u044b\u043b\u0430 \u0443\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0432 <a href=\"https:\/\/github.com\/modm-io\/modm\/blob\/develop\/src\/modm\/architecture\/interface\/register.hpp\">modm<\/a>. \u041f\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u044d\u0442\u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0436\u0438\u0437\u043d\u0438. \u041d\u043e \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u044d\u0442\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0430\u043b\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u043f\u043e\u0442\u043e\u043c\u0443 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0435\u0449\u0438 \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u0441 \u0442\u0435\u043c \u043f\u0440\u0438\u0446\u0435\u043b\u043e\u043c, \u0447\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043b\u044f\u0436\u0435\u0442 \u043d\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430. \u0422\u0430\u043a\u0436\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430.<\/p>\n<p>  \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c ARM \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 SVD. \u0418\u0437 \u044d\u0442\u0438\u0445 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, \u0430 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0435, \u043d\u043e \u0437\u0430\u0442\u043e, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0435 \u043f\u043e\u0432\u044b\u0441\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u0434\u0430. \u0418 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0447\u0442\u043e \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u0430\u0439\u043b \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u0421, \u0421++, \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 <a href=\"https:\/\/github.com\/JinShil\/memory_mapped_io\/blob\/master\/source\/mmio.d\">D<\/a> <\/p>\n<p>  \u041d\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0432\u043e\u043e\u0431\u0449\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c, \u0438 \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u044d\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0443\u0436\u043d\u043e. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043c\u0430\u043b\u043e\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u044b\u0445, \u043d\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445:<\/p>\n<pre><code class=\"cpp\">int main(void) {   \/\/ \u0425\u043e\u0442\u0435\u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u0440\u0442\u0435 GPIOA      \/\/\u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430, \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440 AHB1ENR     RCC-&gt;APB1ENR |= RCC_AHB1ENR_GPIOAEN ;     \/\/\u0445\u043e\u0442\u0435\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0431\u0438\u0442, \u043d\u043e \u043e\u0431\u043d\u0443\u043b\u0438\u043b\u0438 \u0432\u0441\u0435 \u0431\u0438\u0442\u044b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430    RCC-&gt;AHB1ENR = RCC_AHB1ENR_GPIOAEN;     \/\/\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0442\u0430\u0439\u043c\u0435\u0440 TIM1 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043a \u0448\u0438\u043d\u0435 APB2    RCC-&gt;APB1ENR  |=  RCC_APB1ENR_TIM2EN | RCC_APB2ENR_TIM1EN;     \/\/\u0412\u0438\u0434\u0438\u043c\u043e \u043a\u0442\u043e-\u0442\u043e \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u0430 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430.         auto result = GPIOA-&gt;BSRR ;    if (result &amp; GPIO_BSRR_BS1)     {      \/\/do something   }     \/\/\u041a\u043e\u043c\u0443-\u0442\u043e \u043f\u043b\u0430\u0442\u044f\u0442 \u0437\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430. \u0422\u0430\u043a \u0432\u0435\u0434\u044c \u043c\u043e\u0436\u043d\u043e...   GPIOA-&gt;IDR = GPIO_IDR_ID5 ;    } <\/code><\/pre>\n<p>  \u0412\u0441\u0435 \u044d\u0442\u0438 \u0441\u043b\u0443\u0447\u0430\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0438 \u044f \u0442\u043e\u0447\u043d\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u043b \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u0443 \u0441\u0432\u043e\u0438\u0445 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432. \u0411\u044b\u043b\u043e \u0431\u044b \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0440\u0435\u0442\u0438\u0442\u044c \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438. <\/p>\n<p>  \u0415\u0449\u0435 \u043c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u044f\u0442\u043d\u0435\u0435, \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u0434 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u044b\u043c \u0438 \u043d\u0435 \u043d\u0443\u0436\u0434\u0430\u044e\u0449\u0438\u043c\u0441\u044f \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0440\u043e\u0448\u043e \u0437\u043d\u0430\u0435\u0442\u0435 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 STM32F411, \u0442\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u0442\u0430\u043a\u043e\u043c \u043a\u043e\u0434\u0435:<\/p>\n<pre><code class=\"cpp\">int main() {   uint32 temp = GPIOA-&gt;OSPEEDR ;   temp &amp;=~ GPIO_OSPEEDR_OSPEED0_Msk ;    temp = (GPIO_OSPEEDR_OSPEED0_0 | GPIO_OSPEEDR_OSPEED0_1) ;   GPIOA-&gt;OSPEEDR =  temp; } <\/code><\/pre>\n<p>  \u0411\u0435\u0437 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \u0442\u0443\u0442 \u043d\u0435 \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c. \u0425\u043e\u0442\u044f \u043a\u043e\u0434 \u0432\u0441\u0435\u0433\u043e-\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e\u0440\u0442\u0430 GPIOA.0 \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 40 \u041c\u0433\u0446. <br \/>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u044d\u0442\u0438\u0445 \u043d\u0435\u0434\u043e\u0447\u0435\u0442\u043e\u0432.<\/p>\n<h3>\u0410\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430<\/h3>\n<p>  \u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e, \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0447\u0442\u043e \u0436\u0435 \u0438\u0437 \u0441\u0435\u0431\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430 \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. <\/p>\n<p>  \u0420\u0435\u0433\u0438\u0441\u0442\u0440 \u0438\u043c\u0435\u0435\u0442 \u0430\u0434\u0440\u0435\u0441, \u0434\u043b\u0438\u043d\u0443 \u0438\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0440, \u0440\u0435\u0436\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0430: \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0438\u0442\u0430\u0442\u044c, \u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438 \u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u043f\u0438\u0441\u0430\u0442\u044c.<\/p>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u043d\u0430\u0431\u043e\u0440 \u043f\u043e\u043b\u0435\u0439. \u041f\u043e\u043b\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0438\u0442\u0430 \u0438\u043b\u0438 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0431\u0438\u0442\u043e\u0432 \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043b\u044e\u0431\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430. <\/p>\n<p>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u043d\u0430\u0441 \u0432\u0430\u0436\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u043f\u043e\u043b\u044f: \u0434\u043b\u0438\u043d\u0430 \u0438\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0440(<b>width<\/b> \u0438\u043b\u0438 <b>size<\/b>), \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 (<b>offset<\/b>) \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0432\u0441\u0435\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0432\u0435\u043b\u0438\u0447\u0438\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u043e\u043b\u0435 \u0438 \u043e\u043d\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0434\u043b\u0438\u043d\u044b \u043f\u043e\u043b\u044f. \u0422.\u0435. \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u0435 \u0438\u043c\u0435\u0435\u0442 \u0434\u043b\u0438\u043d\u0443 2, \u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 4 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f (0,1,2,3). \u0422\u0430\u043a \u0436\u0435 \u043a\u0430\u043a \u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430, \u0443 \u043f\u043e\u043b\u0435\u0439 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e\u043b\u0435\u0439 \u0435\u0441\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0430 (\u0447\u0442\u0435\u043d\u0438\u0435, \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c, \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0438\u0441\u044c) <\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u0435\u0435, \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440 CR1 \u0422\u0430\u0439\u043c\u0435\u0440\u0430 TIM1 \u0443 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 STM32F411. \u0421\u0445\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u043e\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/sr\/da\/i4\/srdai4a4hmphkmhrulcvdcx9r3u.png\" alt=\"image\">  <\/p>\n<ul>\n<li>\u0411\u0438\u0442 0 CEN: \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0447\u0435\u0442\u0447\u0438\u043a<br \/>   0: \u0421\u0447\u0435\u0442\u0447\u0438\u043a \u0432\u043a\u043b\u044e\u0447\u0435\u043d: <b>Disable<\/b> <br \/>   1: \u0421\u0447\u0435\u0442\u0447\u0438\u043a \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d: <b>Enable<\/b>  <\/li>\n<li>\u0411\u0438\u0442 1 UDIS: \u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\/\u0412\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f UEV<br \/>   0: \u0421\u043e\u0431\u044b\u0442\u0438\u0435 UEV \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043e: <b>Enable<\/b><br \/>   1: \u0421\u043e\u0431\u044b\u0442\u0438\u0435 UEV \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043e: <b>Disable<\/b>  <\/li>\n<li>\u0411\u0438\u0442 2 URS: \u0432\u044b\u0431\u043e\u0440 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u044f UEV<br \/>   0: UEV \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0438\u043b\u0438 \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0431\u0438\u0442\u0430 UG: <b>Any<\/b><br \/>   1: UEV \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438: <b>Overflow<\/b>  <\/li>\n<li>\u0411\u0438\u0442 3 OPM: \u0420\u0435\u0436\u0438\u043c \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f<br \/>   0: \u0422\u0430\u0439\u043c\u0435\u0440 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f UEV: <b>ContinueAfterUEV<\/b><br \/>   1: \u0422\u0430\u0439\u043c\u0435\u0440 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f UEV: <b>StopAfterUEV<\/b>  <\/li>\n<li>\u0411\u0438\u0442 4 DIR: \u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0447\u0435\u0442\u0430<br \/>   0: \u041f\u0440\u044f\u043c\u043e\u0439 \u0441\u0447\u0435\u0442: <b>Upcounter<\/b><br \/>   1: \u041e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u0441\u0447\u0435\u0442: <b>Downcounter<\/b>  <\/li>\n<li>\u0411\u0438\u0442 6:5 CMS: \u0420\u0435\u0436\u0438\u043c \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u044f<br \/>   0: \u0420\u0435\u0436\u0438\u043c \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u044f 0: <b>CenterAlignedMode0<\/b><br \/>   1: \u0420\u0435\u0436\u0438\u043c \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u044f 1: <b>CenterAlignedMode1<\/b><br \/>   2: \u0420\u0435\u0436\u0438\u043c \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u044f 2: <b>CenterAlignedMode2<\/b><br \/>   3: \u0420\u0435\u0436\u0438\u043c \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u044f 3: <b>CenterAlignedMode3<\/b>  <\/li>\n<li>\u0411\u0438\u0442 7 APRE: \u0420\u0435\u0436\u0438\u043c\u0430 \u043f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 ARR<br \/>   0: \u0420\u0435\u0433\u0438\u0441\u0442\u0440 TIMx_ARR \u043d\u0435 \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f: <b>ARRNotBuffered<\/b><br \/>   1: \u0420\u0435\u0433\u0438\u0441\u0442\u0440 TIMx_ARR \u043d\u0435 \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f: <b>ARRBuffered<\/b>  <\/li>\n<li>\u0411\u0438\u0442 8:9 CKD: \u0414\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430<br \/>   0: tDTS=tCK_INT: <b>ClockDevidedBy1<\/b><br \/>   1: tDTS=2*tCK_INT: <b>ClockDevidedBy2<\/b><br \/>   2: tDTS=4*tCK_INT: <b>ClockDevidedBy4<\/b><br \/>   3: Reserved: <b>Reserved<\/b>  <\/li>\n<\/ul>\n<p>  \u0417\u0434\u0435\u0441\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, CEN \u2014 \u044d\u0442\u043e \u043f\u043e\u043b\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 1 \u0431\u0438\u0442 \u0438\u043c\u0435\u044e\u0449\u0435\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 0 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430. \u0410 <b>Enable<\/b>(1) \u0438 <b>Disable<\/b>(0) \u044d\u0442\u043e \u0435\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u041d\u0435 \u0431\u0443\u0434\u0435\u043c \u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0442\u043e\u043c, \u0437\u0430 \u0447\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043a\u0430\u0436\u0434\u043e\u0435 \u043f\u043e\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430, \u043d\u0430\u043c \u0432\u0430\u0436\u043d\u043e, \u0447\u0442\u043e \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u043b\u044f \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f \u0435\u0441\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0435\u0441\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u043e\u0432\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0438 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043e\u043d\u043e \u0434\u0435\u043b\u0430\u0435\u0442. <\/p>\n<p>  \u041c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u0435\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a\u0430\u043a \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443, \u0442\u0430\u043a \u0438 \u043a \u043f\u043e\u043b\u044e \u0438 \u043a \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/pi\/kr\/-s\/pikr-sq7lnpo9c6uilrmghdzd5a.png\" alt=\"image\"><br \/>  \u041f\u043e\u043c\u0438\u043c\u043e \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043d\u0430\u043c \u0432\u0430\u0436\u043d\u043e \u0435\u0449\u0435 \u0442\u043e, \u0447\u0442\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f \u0438\u043c\u0435\u044e\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0435\u0441\u0442\u044c \u0430\u0434\u0440\u0435\u0441, \u0440\u0430\u0437\u043c\u0435\u0440, \u0440\u0435\u0436\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0430(\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f, \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u043b\u0438 \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0438 \u0434\u0440\u0443\u0433\u043e\u0433\u043e).<br \/>  \u0423 \u043f\u043e\u043b\u044f \u0435\u0441\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440, \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0438 \u0442\u0430\u043a\u0436\u0435 \u0440\u0435\u0436\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0430. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043f\u043e\u043b\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043e\u043d\u043e \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442. <br \/>  \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f \u0434\u043e\u043b\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043f\u043e\u043b\u0435 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u2014 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u043d\u0430\u0448\u0430 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/m4\/3u\/mb\/m43umbc8vceiuila8_komovib38.png\"><br \/>   \u041f\u043e\u043c\u0438\u043c\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0443 \u043d\u0430\u0448\u0435\u0439 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430. \u0414\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438\/\u0437\u0430\u043f\u0438\u0441\u0438 \u0438 \u0447\u0442\u0435\u043d\u0438\u044f. <\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/uy\/d7\/sb\/uyd7sb-z-tggllnj4knjf_rfhi4.png\" alt=\"image\"><br \/>  \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438\u0441\u044c \u0441 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0435\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430, \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043a\u0430\u043a \u044d\u0442\u0430 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432 SVD \u0444\u0430\u0439\u043b\u0435.<\/p>\n<h3>System View Description (SVD) \u0424\u0430\u0439\u043b<\/h3>\n<p>  \u0424\u043e\u0440\u043c\u0430\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f CMSIS (CMSIS-SVD) \u2014 \u044d\u0442\u043e \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u043d\u0430 \u0431\u0430\u0437\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 ARM Cortex-M. \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f\u0441\u044f \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u043c \u0432 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u044b\u0445 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430\u0445 \u043f\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c. \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0432 \u0442\u0430\u043a\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043a\u0430\u043a \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0442\u0430\u043a \u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0431\u0438\u0442\u0430 \u043f\u043e\u043b\u044f \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435.<br \/>  \u0421\u0445\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0443\u0440\u043e\u0432\u043d\u0438 \u0434\u0435\u0442\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u0442\u0430\u043a\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0445\u0435\u043c\u043e\u0439, <a href=\"https:\/\/www.keil.com\/pack\/doc\/CMSIS\/SVD\/html\/svd_Format_pg.html\">\u0432\u0437\u044f\u0442\u043e\u0439 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 Keil<\/a>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/1s\/oq\/6d\/1soq6disxizzaj8hvyaovxs9_pm.png\" alt=\"image\"><\/p>\n<p>  \u0424\u0430\u0439\u043b\u044b SVD \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f\u043c\u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f\u043c\u0438 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0435 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, IAR \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0438\u0445 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u043f\u0430\u043d\u0435\u043b\u0438 View-&gt;Registers. \u0421\u0430\u043c\u0438 \u0444\u0430\u0439\u043b\u044b \u043b\u0435\u0436\u0430\u0442 \u0432 \u043f\u0430\u043f\u043a\u0435, Program Files (x86)\\IAR Systems\\Embedded Workbench 8.3\\arm\\config\\debugger. <\/p>\n<p>  Clion \u043e\u0442 JetBrains \u0442\u0430\u043a\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 svd \u0444\u0430\u0439\u043b\u044b \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445 \u043f\u0440\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0435.<\/p>\n<p>  \u0412\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441 \u0441\u0430\u0439\u0442\u043e\u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f. <a href=\"https:\/\/www.st.com\/resource\/en\/svd\/stm32f4_svd.zip\">\u0417\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c SVD \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 STM32F411 <\/a><\/p>\n<p>  \u0412 \u043e\u0431\u0449\u0435\u043c, SVD \u0444\u043e\u0440\u043c\u0430\u0442 \u044d\u0442\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0438. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u0443\u0440\u043e\u0432\u043d\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0432 SVD.<\/p>\n<p>  \u0412\u0441\u0435\u0433\u043e \u0432\u044b\u0434\u0435\u043b\u044f\u044e\u0442 5 \u0443\u0440\u043e\u0432\u043d\u0435\u0439, \u0423\u0440\u043e\u0432\u0435\u043d\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0439, \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. <\/p>\n<ul>\n<li><b>\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430<\/b>: \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u2014 \u044d\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e. \u041d\u0430 \u044d\u0442\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0430\u044f\u0441\u044f \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 \u0432 \u0446\u0435\u043b\u043e\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u043c\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u043b\u0438 \u0432\u0435\u0440\u0441\u0438\u044f. \u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441\u0443\u0435\u043c\u044b\u0439 \u0431\u043b\u043e\u043a, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0437\u0440\u044f\u0434\u043d\u043e\u0441\u0442\u044c \u0448\u0438\u043d\u044b \u0434\u0430\u043d\u043d\u044b\u0445. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a \u0440\u0430\u0437\u043c\u0435\u0440 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0431\u0440\u043e\u0441\u0430 \u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u044d\u0442\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0438 \u043d\u0435\u044f\u0432\u043d\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442\u0441\u044f \u043d\u0438\u0436\u043d\u0438\u043c\u0438 \u0443\u0440\u043e\u0432\u043d\u044f\u043c\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f. <\/li>\n<li><b>\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430:<\/b> \u0440\u0430\u0437\u0434\u0435\u043b CPU \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u044f\u0434\u0440\u043e \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0438 \u0435\u0433\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438. \u042d\u0442\u043e\u0442 \u0440\u0430\u0437\u0434\u0435\u043b \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c, \u0435\u0441\u043b\u0438 \u0444\u0430\u0439\u043b SVD \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. <\/li>\n<li><b>\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432<\/b>: \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e-\u044d\u0442\u043e \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432. \u041f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u0431\u0430\u0437\u043e\u0432\u044b\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. <\/li>\n<li><b>\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432<\/b>: \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u2014 \u044d\u0442\u043e \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441, \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u0439 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u043e\u043c\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443. \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u0410\u0434\u0440\u0435\u0441 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430. \u0422\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0436\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0430 (\u0447\u0442\u0435\u043d\u0438\u044f\/\u0437\u0430\u043f\u0438\u0441\u0438).<\/li>\n<li><b>\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0439<\/b>: \u043a\u0430\u043a \u0443\u0436\u0435 \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0432\u044b\u0448\u0435, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u044b \u043d\u0430 \u043a\u0443\u0441\u043a\u0438 \u0431\u0438\u0442\u043e\u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u2014 \u043f\u043e\u043b\u044f. \u0414\u0430\u043d\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043c\u0435\u043d\u0430 \u043f\u043e\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043e\u0434\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b, \u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0440, \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0435\u0436\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0430. <\/li>\n<li><b>\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e\u043b\u0435\u0439<\/b>: \u043f\u043e \u0441\u0443\u0442\u0438 \u044d\u0442\u043e \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0432 \u044f\u0437\u044b\u043a\u0430\u0445 \u0421, \u0421++, D \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. <\/li>\n<\/ul>\n<p>  \u041f\u043e \u0441\u0443\u0442\u0438 SVD \u0444\u0430\u0439\u043b\u044b \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 xml \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0441 \u043f\u043e\u043b\u043d\u044b\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440\u044b svd \u0444\u0430\u0439\u043b\u0430 \u0432 \u0421\u0438 \u043a\u043e\u0434, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <a href=\"https:\/\/www.keil.com\/pack\/doc\/CMSIS\/SVD\/html\/svd_SVDConv_pg.html\">\u0437\u0434\u0435\u0441\u044c<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442 \u0443\u0434\u043e\u0431\u043d\u044b\u0435 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0421\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u0438\u043a\u0438 \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430. <\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0430\u0440\u0441\u0435\u0440 SVD \u0444\u0430\u0439\u043b\u043e\u0432 <a href=\"https:\/\/github.com\/posborne\/cmsis-svd\">cmsis-svd<\/a>, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 Phyton, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0435\u043b\u0430\u0435\u0442 \u0447\u0442\u043e-\u0442\u043e \u0442\u0438\u043f\u0430 \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u043d\u0430 Phython, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0442\u0435\u043c \u0443\u0434\u043e\u0431\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0432\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430. <\/p>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 STM32F411 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u043e\u043c:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 CR1 \u0442\u0430\u0439\u043c\u0435\u0440\u0430 TIM1<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"xml\">&lt;peripheral&gt;       &lt;name&gt;TIM1&lt;\/name&gt;       &lt;description&gt;Advanced-timers&lt;\/description&gt;       &lt;groupName&gt;TIM&lt;\/groupName&gt;       &lt;baseAddress&gt;0x40010000&lt;\/baseAddress&gt;       &lt;addressBlock&gt;         &lt;offset&gt;0x0&lt;\/offset&gt;         &lt;size&gt;0x400&lt;\/size&gt;         &lt;usage&gt;registers&lt;\/usage&gt;       &lt;\/addressBlock&gt;       &lt;registers&gt;         &lt;register&gt;           &lt;name&gt;CR1&lt;\/name&gt;           &lt;displayName&gt;CR1&lt;\/displayName&gt;           &lt;description&gt;control register 1&lt;\/description&gt;           &lt;addressOffset&gt;0x0&lt;\/addressOffset&gt;           &lt;size&gt;0x20&lt;\/size&gt;           &lt;access&gt;read-write&lt;\/access&gt;           &lt;resetValue&gt;0x0000&lt;\/resetValue&gt;           &lt;fields&gt;             &lt;field&gt;               &lt;name&gt;CKD&lt;\/name&gt;               &lt;description&gt;Clock division&lt;\/description&gt;               &lt;bitOffset&gt;8&lt;\/bitOffset&gt;               &lt;bitWidth&gt;2&lt;\/bitWidth&gt;             &lt;\/field&gt;             &lt;field&gt;               &lt;name&gt;ARPE&lt;\/name&gt;               &lt;description&gt;Auto-reload preload enable&lt;\/description&gt;               &lt;bitOffset&gt;7&lt;\/bitOffset&gt;               &lt;bitWidth&gt;1&lt;\/bitWidth&gt;             &lt;\/field&gt;             &lt;field&gt;               &lt;name&gt;CMS&lt;\/name&gt;               &lt;description&gt;Center-aligned mode               selection&lt;\/description&gt;               &lt;bitOffset&gt;5&lt;\/bitOffset&gt;               &lt;bitWidth&gt;2&lt;\/bitWidth&gt;             &lt;\/field&gt;             &lt;field&gt;               &lt;name&gt;DIR&lt;\/name&gt;               &lt;description&gt;Direction&lt;\/description&gt;               &lt;bitOffset&gt;4&lt;\/bitOffset&gt;               &lt;bitWidth&gt;1&lt;\/bitWidth&gt;             &lt;\/field&gt;             &lt;field&gt;               &lt;name&gt;OPM&lt;\/name&gt;               &lt;description&gt;One-pulse mode&lt;\/description&gt;               &lt;bitOffset&gt;3&lt;\/bitOffset&gt;               &lt;bitWidth&gt;1&lt;\/bitWidth&gt;             &lt;\/field&gt;             &lt;field&gt;               &lt;name&gt;URS&lt;\/name&gt;               &lt;description&gt;Update request source&lt;\/description&gt;               &lt;bitOffset&gt;2&lt;\/bitOffset&gt;               &lt;bitWidth&gt;1&lt;\/bitWidth&gt;             &lt;\/field&gt;             &lt;field&gt;               &lt;name&gt;UDIS&lt;\/name&gt;               &lt;description&gt;Update disable&lt;\/description&gt;               &lt;bitOffset&gt;1&lt;\/bitOffset&gt;               &lt;bitWidth&gt;1&lt;\/bitWidth&gt;             &lt;\/field&gt;             &lt;field&gt;               &lt;name&gt;CEN&lt;\/name&gt;               &lt;description&gt;Counter enable&lt;\/description&gt;               &lt;bitOffset&gt;0&lt;\/bitOffset&gt;               &lt;bitWidth&gt;1&lt;\/bitWidth&gt;             &lt;\/field&gt;           &lt;\/fields&gt;         &lt;\/register&gt;         &lt;register&gt; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u0437\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u0432\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430\u044f \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0431\u0438\u0442\u043e\u0432 \u043f\u043e\u043b\u0435\u0439.<\/p>\n<p>  \u041d\u0435 \u0432\u0441\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0438 \u0445\u043e\u0442\u044f\u0442 \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0432\u043e\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u043a\u0430\u043a \u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u0432\u0438\u0434\u0435\u0442\u044c, ST \u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 \u0438 \u043f\u0435\u0440\u0435\u043b\u043e\u0436\u0438\u043b \u044d\u0442\u0443 \u043d\u043e\u0448\u0443 \u043d\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430. \u0410 \u0432\u043e\u0442 TI \u0437\u0430\u0431\u043e\u0442\u0438\u0442\u044c\u0441\u044f \u043e \u0441\u0432\u043e\u0438\u0445 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430\u0445 \u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e\u043b\u0435\u0439.<\/p>\n<p>  \u0412\u044b\u0448\u0435\u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0444\u043e\u0440\u043c\u0430\u0442 SVD \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e \u0441\u043e\u0433\u043b\u0430\u0441\u0443\u0435\u0442\u0441\u044f \u0441 \u043d\u0430\u0448\u0435\u0439 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0435\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430. \u0424\u0430\u0439\u043b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440.<\/p>\n<h3>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/h3>\n<p>  <\/p>\n<h4>\u0420\u0435\u0433\u0438\u0441\u0442\u0440<\/h4>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043a\u043e\u0433\u0434\u0430 \u0441\u0434\u0435\u043b\u0430\u043d\u0430 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0438 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0432 \u0432\u0438\u0434\u0435 svd \u043e\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u0439 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u043f\u043e\u0434 \u044d\u0442\u0443 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044e, \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<br \/>  \u041d\u0430\u0448\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043a\u0430\u043a \u043a\u043e\u0434 \u043d\u0430 \u0421\u0438 \u0438 \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u0425\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u043e \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u0435\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">  if (TIM1::CR1::CKD::DividedBy2::IsSet())   {      TIM1::ARR::Set(10_ms) ;      TIM1::CR1::CEN::Enable::Set() ;   } <\/code><\/pre>\n<p>  \u0412\u0441\u043f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043f\u043e \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430, \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c reinterpret_cast:<\/p>\n<pre><code class=\"cpp\">*reinterpret_cast&lt;volatile uint32_t *&gt;(0x40010000) = (1 &lt;&lt; 5) ;<\/code><\/pre>\n<p>  \u041a\u043b\u0430\u0441\u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0443\u0436\u0435 \u0431\u044b\u043b \u043e\u043f\u0438\u0441\u0430\u043d \u0432\u044b\u0448\u0435, \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u0430\u0434\u0440\u0435\u0441, \u0440\u0430\u0437\u043c\u0435\u0440 \u0438 \u0440\u0435\u0436\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 <code>Get() <\/code>\u0438 <code>Set()<\/code>:<\/p>\n<pre><code class=\"cpp\">\/\/\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u043c template&lt;uint32_t address, size_t size, typename AccessMode&gt; struct RegisterBase {   static constexpr auto Addr = address ;   using Type = typename RegisterType&lt;size&gt;::Type ;      \/\/\u041c\u0435\u0442\u043e\u0434 Set \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432,    \/\/\u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435   __forceinline template&lt;typename T = AccessMode,      class = typename std::enable_if_t&lt;std::is_base_of&lt;WriteMode, T&gt;::value&gt;&gt;   inline static void Set(Type value)   {     *reinterpret_cast&lt;volatile Type *&gt;(address) = value ;   }      \/\/\u041c\u0435\u0442\u043e\u0434 Get \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0446\u0435\u043b\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430,    \/\/\u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c   __forceinline template&lt;typename T = AccessMode,      class = typename std::enable_if_t&lt;std::is_base_of&lt;ReadMode, T&gt;::value&gt;&gt;   inline static Type Get()   {     return *reinterpret_cast&lt;volatile Type *&gt;(address) ;   } } ;<\/code><\/pre>\n<p>  \u0412 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0430\u0434\u0440\u0435\u0441, \u0434\u043b\u0438\u043d\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0438 \u0440\u0435\u0436\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0430 (\u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u043a\u043b\u0430\u0441\u0441). \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 <a href=\"https:\/\/habr.com\/ru\/post\/205772\/\">SFINAE<\/a>, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043c\u0435\u0442\u0430\u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>enable_if<\/code> \u0431\u0443\u0434\u0435\u043c \u00ab\u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u0442\u044c\u00bb \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 <code>Set()<\/code> \u0438\u043b\u0438 <code>Get()<\/code> \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0445 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f, \u0442\u043e \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u0435\u043c\u0443 \u0442\u0438\u043f <code>ReadMode<\/code>, <code>enable_if<\/code> \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u043c <code>ReadMode <\/code>\u0438 \u0435\u0441\u043b\u0438 \u043d\u0435\u0442, \u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 (\u0442\u0438\u043f T \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u0432\u0435\u0434\u0435\u043d), \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u0441\u0442\u0430\u043d\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <code>Set()<\/code> \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430. \u0422\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0438 \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438.<\/p>\n<p>  \u0414\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u044b: <\/p>\n<pre><code class=\"cpp\">\/\/\u0420\u0435\u0436\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c struct WriteMode {};  struct ReadMode {};  struct ReadWriteMode: public WriteMode, public ReadMode {};<\/code><\/pre>\n<p>  \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0431\u044b\u0432\u0430\u044e\u0442 \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430: 8, 16, 32, 64 \u0431\u0438\u0442\u0430 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043d\u0438\u0445 \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u0441\u0432\u043e\u0439 \u0442\u0438\u043f:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0422\u0438\u043f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">template &lt;uint32_t size&gt; struct RegisterType {} ;  template&lt;&gt; struct RegisterType&lt;8&gt; {   using Type = uint8_t ; } ;  template&lt;&gt; struct RegisterType&lt;16&gt; {   using Type = uint16_t ; } ;  template&lt;&gt; struct RegisterType&lt;32&gt; {   using Type = uint32_t ; } ;  template&lt;&gt; struct RegisterType&lt;64&gt; {   using Type = uint64_t ; } ;<\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0434\u043b\u044f \u0442\u0430\u0439\u043c\u0435\u0440\u0430 TIM1 \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440 CR1 \u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0435\u0433\u0438\u0441\u0442\u0440 EGR \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">struct TIM1 {    struct CR1 : public RegisterBase&lt;0x40010000, 32, ReadWriteMode&gt;    {    }    struct EGR : public RegisterBase&lt;0x40010014, 32, WriteMode&gt;    {    } } int main() {   TIM1::CR1::Set(10) ;   auto reg = TIM1::CR1::Get() ;   \/\/\u043e\u0448\u0438\u0431\u043a\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438   reg = TIM1::EGR::Get()  } <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u043c\u0435\u0442\u043e\u0434 <code>Get()<\/code> \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0435\u0436\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442\u0441\u044f \u043e\u0442 <code>ReadMode<\/code>, \u0430 \u043c\u0435\u0442\u043e\u0434\u044b <code>Set()<\/code> \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0435\u0436\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442\u0441\u044f \u043e\u0442 <code>WriteMode<\/code>, \u0442\u043e, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u043e\u0448\u0438\u0431\u043a\u0443 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u0410 \u0435\u0441\u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0442\u0438\u043f\u0430 Clion, \u0442\u043e \u0434\u0430\u0436\u0435 \u0435\u0449\u0435 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u043e\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043a\u043e\u0434\u0430:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/vc\/we\/gu\/vcwegu6a0vulgfcvzjkaum9ac4a.png\" alt=\"image\"><br \/>  \u041e\u0442\u043b\u0438\u0447\u043d\u043e, \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c \u0441\u0442\u0430\u043b \u0442\u0435\u043f\u0435\u0440\u044c \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0435\u0435, \u043d\u0430\u0448 \u043a\u043e\u0434 \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0435\u0449\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430, \u043d\u043e \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u0439\u0442\u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u0438 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u043a\u043e \u0432\u0441\u0435\u043c\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443, \u0430 \u043a \u0435\u0433\u043e \u043f\u043e\u043b\u044f\u043c.<\/p>\n<h4>\u041f\u043e\u043b\u044f<\/h4>\n<p>  \u041f\u043e\u043b\u0435 \u0432\u043c\u0435\u0441\u0442\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0434\u0432\u0438\u0433\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u043d\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0438\u043b\u0438 \u0442\u0438\u043f \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f, \u043e\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430:<\/p>\n<pre><code class=\"cpp\">\/\/\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0431\u0438\u0442\u043e\u0432\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 template&lt;typename Reg, size_t offset, size_t size, typename AccessMode&gt; struct RegisterField {   using RegType = typename Reg::Type ;   using Register = Reg ;   static constexpr RegType Offset = offset ;   static constexpr RegType Size = size ;   using Access = AccessMode ;    template&lt;typename T = AccessMode,         class = typename std::enable_if_t&lt;std::is_base_of&lt;WriteMode, T&gt;::value&gt;&gt;   static void Set(RegType value)   {     assert(value &lt; ((1 &lt;&lt; size) - 1)) ;     \/\/CriticalSection cs ;       \/\/\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430     RegType newRegValue = *reinterpret_cast&lt;RegType *&gt;(Register::Address) ;       \/\/\u0412\u043d\u0430\u0447\u0430\u043b\u0435 \u043d\u0443\u0436\u043d\u043e \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0441\u0442\u0430\u0440\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0438\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f     newRegValue &amp;= ~ (((1 &lt;&lt; size) - 1) &lt;&lt; offset);       \/\/ \u0417\u0430\u0442\u0435\u043c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u043e\u0435     newRegValue |= (value &lt;&lt; offset) ;           \/\/\u0418 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440     *reinterpret_cast&lt;RegType *&gt;(Reg::Address) = newRegValue ;    }      __forceinline template&lt;typename T = AccessMode,         class = typename std::enable_if_t&lt;std::is_base_of&lt;ReadMode, T&gt;::value&gt;&gt;   inline static RegType Get()   {     return ((*reinterpret_cast&lt;RegType *&gt;(Register::Address)) &amp;         (((1 &lt;&lt; size) - 1) &gt;&gt; offset))  ;   } };<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0443\u0436\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0432\u0435\u0449\u0438:<\/p>\n<pre><code class=\"cpp\">struct TIM1 {    struct CR1 : public RegisterBase&lt;0x40010000, 32, ReadWriteMode&gt;    {      using CKD = RegisterField&lt;TIM1::CR1, 8, 2, ReadWriteMode&gt; ;      using ARPE = RegisterField&lt;TIM1::CR1, 7, 1, ReadWriteMode&gt; ;      using CMS = RegisterField&lt;TIM1::CR1, 5, 2, ReadWriteMode&gt; ;      using DIR = RegisterField&lt;TIM1::CR1, 4, 1, ReadWriteMode&gt; ;      using OPM = RegisterField&lt;TIM1::CR1, 3, 1, ReadWriteMode&gt; ;      using URS = RegisterField&lt;TIM1::CR1, 2, 1, ReadWriteMode&gt; ;      using UDIS = RegisterField&lt;TIM1::CR1, 1, 1, ReadWriteMode&gt; ;      using CEN = RegisterField&lt;TIM1::CR1, 0, 1, ReadWriteMode&gt; ;    } }  int main() {   \/\/ \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 CR1 \u0431\u0438\u0442 9 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432 1, \u0431\u0438\u0442 8 \u0432 0   TIM1::CR1::CKD::Set(2U) ;    auto reg = TIM1::CR1::CEN::Get() ; } <\/code><\/pre>\n<p>  \u0425\u043e\u0442\u044f \u0432 \u0446\u0435\u043b\u043e\u043c \u0432\u0441\u0451 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0435\u043f\u043b\u043e\u0445\u043e, \u043d\u043e \u0432\u0441\u0435 \u0435\u0449\u0435 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 <code>TIM1::CR1::CKD::Set(2)<\/code>, \u0447\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0434\u0432\u043e\u0439\u043a\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u0430\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>Set()<\/code>? \u0418 \u0447\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0438\u0441\u043b\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0438\u043b \u043c\u0435\u0442\u043e\u0434 <code>TIM1::CR1::CEN::Get()<\/code>?<\/p>\n<p>  \u041f\u043b\u0430\u0432\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c \u043f\u043e\u043b\u0435\u0439<\/p>\n<h4>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0435\u0439<\/h4>\n<p>  \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f \u044d\u0442\u043e \u043f\u043e \u0441\u0443\u0442\u0438 \u0442\u043e \u0436\u0435 \u043f\u043e\u043b\u0435, \u043d\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u041a \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u043f\u043e\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u2014 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043f\u043e\u043b\u0435. \u041c\u0435\u0442\u043e\u0434 <code>Set()<\/code> \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f, \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u0435\u043d \u043c\u0435\u0442\u043e\u0434\u0443 <code>Set()<\/code> \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u043e\u043b\u044f, \u0437\u0430 \u0442\u0435\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c, \u0447\u0442\u043e \u0441\u0430\u043c\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u043c\u0435\u0442\u043e\u0434, \u043e\u043d\u043e \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0434\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c. \u0410 \u0432\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 <code>Get()<\/code> \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430, \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0435\u0433\u043e \u043d\u0435\u0433\u043e, \u043b\u0443\u0447\u0448\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u043b\u0438 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u043d\u0435\u0442, \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u044d\u0442\u043e \u043c\u0435\u0442\u043e\u0434 \u043d\u0430 \u043c\u0435\u0442\u043e\u0434 <code>IsSet()<\/code>. <\/p>\n<pre><code class=\"cpp\">\/\/\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0431\u0438\u0442\u043e\u0432\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 template&lt;typename Field, typename Field::Register::Type value&gt; struct FieldValueBase {   using RegType = typename Field::Register::Type ;    template&lt;typename T = typename Field::Access,         class = typename std::enable_if_t&lt;std::is_base_of&lt;WriteMode, T&gt;::value&gt;&gt;   static void Set()   {     RegType newRegValue = *reinterpret_cast&lt;RegType *&gt;(Field::Register::Address) ;      newRegValue &amp;= ~ (((1 &lt;&lt; Field::Size) - 1) &lt;&lt; Field::Offset);      newRegValue |= (value &lt;&lt; Field::Offset) ;      *reinterpret_cast&lt;RegType *&gt;(Field::Register::Address) = newRegValue ;    }    __forceinline template&lt;typename T = typename Field::Access,         class = typename std::enable_if_t&lt;std::is_base_of&lt;ReadMode, T&gt;::value&gt;&gt;   inline static bool IsSet()   {     return ((*reinterpret_cast&lt;RegType *&gt;(Field::Register::Address)) &amp;            static_cast&lt;RegType&gt;(((1 &lt;&lt; Field::Size) - 1) &lt;&lt; Field::Offset)) ==            (value &lt;&lt; Field::Offset) ;   } };<\/code><\/pre>\n<p>  \u041f\u043e\u043b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 CR1 \u0442\u0430\u0439\u043c\u0435\u0440\u0430 TIM1<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">template &lt;typename Reg, size_t offset, size_t size, typename AccessMode&gt;  struct TIM_CR_CKD_Values: public RegisterField&lt;Reg, offset, size, AccessMode&gt;  {   using DividedBy1 = FieldValue&lt;TIM_CR_CKD_Values, 0U&gt; ;   using DividedBy2 = FieldValue&lt;TIM_CR_CKD_Values, 1U&gt; ;   using DividedBy4 = FieldValue&lt;TIM_CR_CKD_Values, 2U&gt; ;   using Reserved = FieldValue&lt;TIM_CR_CKD_Values, 3U&gt; ; } ;  template &lt;typename Reg, size_t offset, size_t size, typename AccessMode&gt;  struct TIM_CR_ARPE_Values: public RegisterField&lt;Reg, offset, size, AccessMode&gt;  {   using ARRNotBuffered = FieldValue&lt;TIM_CR_ARPE_Values, 0U&gt; ;   using ARRBuffered = FieldValue&lt;TIM_CR_ARPE_Values, 1U&gt; ; } ;  template &lt;typename Reg, size_t offset, size_t size, typename AccessMode&gt;  struct TIM_CR_CMS_Values: public RegisterField&lt;Reg, offset, size, AccessMode&gt;  {   using CenterAlignedMode0 = FieldValue&lt;TIM_CR_CMS_Values, 0U&gt; ;   using CenterAlignedMode1 = FieldValue&lt;TIM_CR_CMS_Values, 1U&gt; ;   using CenterAlignedMode2 = FieldValue&lt;TIM_CR_CMS_Values, 2U&gt; ;   using CenterAlignedMode3 = FieldValue&lt;TIM_CR_CMS_Values, 3U&gt; ; } ;  template &lt;typename Reg, size_t offset, size_t size, typename AccessMode&gt;  struct TIM_CR_DIR_Values: public RegisterField&lt;Reg, offset, size, AccessMode&gt;  {   using Upcounter = FieldValue&lt;TIM_CR_DIR_Values, 0U&gt; ;   using Downcounter = FieldValue&lt;TIM_CR_DIR_Values, 1U&gt; ; } ;  template &lt;typename Reg, size_t offset, size_t size, typename AccessMode&gt;  struct TIM_CR_OPM_Values: public RegisterField&lt;Reg, offset, size, AccessMode&gt;  {   using ContinueAfterUEV = FieldValue&lt;TIM_CR_OPM_Values, 0U&gt; ;   using StopAfterUEV = FieldValue&lt;TIM_CR_OPM_Values, 1U&gt; ; } ;  template &lt;typename Reg, size_t offset, size_t size, typename AccessMode&gt;  struct TIM_CR_URS_Values: public RegisterField&lt;Reg, offset, size, AccessMode&gt;  {   using Any = FieldValue&lt;TIM_CR_URS_Values, 0U&gt; ;   using Overflow = FieldValue&lt;TIM_CR_URS_Values, 1U&gt; ; } ;  template &lt;typename Reg, size_t offset, size_t size, typename AccessMode&gt;  struct TIM_CR_UDIS_Values: public RegisterField&lt;Reg, offset, size, AccessMode&gt;  {   using Enable  = FieldValue&lt;TIM_CR_UDIS_Values, 0U&gt; ;   using Disable = FieldValue&lt;TIM_CR_UDIS_Values, 1U&gt; ; } ;  template &lt;typename Reg, size_t offset, size_t size, typename AccessMode&gt;  struct TIM_CR_CEN_Values: public RegisterField&lt;Reg, offset, size, AccessMode&gt;  {   using Disable = FieldValue&lt;TIM_CR_CEN_Values, 0U&gt; ;   using Enable = FieldValue&lt;TIM_CR_CEN_Values, 1U&gt; ; } ; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0422\u043e\u0433\u0434\u0430 \u0441\u0430\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440 CR1 \u0443\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">struct TIM1 {   struct CR1 : public RegisterBase&lt;0x40010000, 32, ReadWriteMode&gt;   {     using CKD = TIM_CR1_CKD_Values&lt;TIM1::CR1, 8, 2, ReadWriteMode&gt; ;     using ARPE = TIM_CR1_ARPE_Values&lt;TIM1::CR1, 7, 1, ReadWriteMode&gt; ;     using CMS = TIM_CR1_CMS_Values&lt;TIM1::CR1, 5, 2, ReadWriteMode&gt; ;     using DIR = TIM_CR1_DIR_Values&lt;TIM1::CR1, 4, 1, ReadWriteMode&gt; ;     using OPM = TIM_CR1_OPM_Values&lt;TIM1::CR1, 3, 1, ReadWriteMode&gt; ;     using URS = TIM_CR1_URS_Values&lt;TIM1::CR1, 2, 1, ReadWriteMode&gt; ;     using UDIS = TIM_CR1_UDIS_Values&lt;TIM1::CR1, 1, 1, ReadWriteMode&gt; ;     using CEN = TIM_CR1_CEN_Values&lt;TIM1::CR1, 0, 1, ReadWriteMode&gt; ;   } ; } <\/code><\/pre>\n<p>  \u041f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0438 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430: \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u0430\u0439\u043c\u0435\u0440 \u043d\u0430 \u0441\u0447\u0435\u0442, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <code>Set()<\/code> \u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>Enable<\/code> \u043f\u043e\u043b\u044f CEN \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 CR1 \u0442\u0430\u0439\u043c\u0435\u0440\u0430 TIM1: <code>TIM1::CR1::CEN::Enable::Set() ;<\/code>. \u0412 \u043a\u043e\u0434\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">int main() {   if (TIM1::CR1::CKD::DividedBy2::IsSet())   {     TIM1::ARR::Set(100U) ;     TIM1::CR1::CEN::Enable::Set() ;   } } <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0414\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f, \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0421\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u0438\u043a\u0430:<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">int main() {   if((TIM1-&gt;CR1 &amp; TIM_CR1_CKD_Msk) == TIM_CR1_CKD_0)   {      TIM1-&gt;ARR = 100U ;      regValue = TIM1-&gt;CR1 ;      regValue &amp;=~(TIM_CR1_CEN_Msk) ;      regValue |= TIM_CR1_CEN ;      TIM1-&gt;CR1 = regValue ;   } } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0418\u0442\u0430\u043a, \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0441\u0434\u0435\u043b\u0430\u043d\u044b, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u043c\u0435\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443, \u0435\u0433\u043e \u043f\u043e\u043b\u044f\u043c \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c. \u0414\u043e\u0441\u0442\u0443\u043f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0438 \u0435\u0441\u043b\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440, \u043f\u043e\u043b\u0435 \u0438\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u043b\u0438 \u0447\u0442\u0435\u043d\u0438\u044f, \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u044f\u0441\u043d\u043e \u0435\u0449\u0435 \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043a\u043e\u0434 \u043f\u0440\u043e\u0448\u044c\u0435\u0442\u0441\u044f \u0432 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440.<br \/>  \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u0441\u0435 \u0435\u0449\u0435 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u043d\u0435\u0434\u043e\u0447\u0435\u0442, \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e\u043b\u0435\u0439 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c, \u0447\u0442\u043e \u043d\u0430\u0434\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">int main() {    uint32_t regValue = TIM1-&gt;CR1 ;    regValue &amp;=~(TIM_CR1_CKD_Msk | TIM_CR1_DIR) ;    regValue |= (TIM_CR1_CEN | TIM_CR1_CKD_0 | TIM_CR1_CKD_0) ;    TIM1-&gt;CR1 = regValue ; } <\/code><\/pre>\n<p>   \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043b\u0438\u0431\u043e \u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <code>Set(...)<\/code> \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043b\u0438\u0431\u043e \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u0435. \u0422.\u0435. \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432:<\/p>\n<pre><code class=\"cpp\">int main() {   \/\/\u0412\u0430\u0440\u0438\u0430\u043d\u0442 1, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 Set()   TIM1::CR1::Set(TIM1::CR1::DIR::Upcounter,                  TIM1::CR1::CKD::DividedBy4,                  TIM1::CR1::CEN::Enable) ;     \/\/\u0412\u0430\u0440\u0438\u0430\u043d\u0442 2, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u0448\u0430\u0431\u043b\u043e\u043d    TIM1::CR1&lt;TIM1::CR1::DIR::Upcounter,                  TIM1::CR1::CKD::DividedBy4,                  TIM1::CR1::CEN::Enable&gt;::Set() ; } <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c \u0438 \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u0432\u0441\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0438 \u0441\u0442\u0435\u043a, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u0438 \u0440\u0430\u0441\u0445\u043e\u0434\u0430\u0445 \u041e\u0417\u0423, \u044f \u0432\u044b\u0431\u0440\u0430\u043b \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434, \u043a\u043e\u0433\u0434\u0430 \u0440\u0430\u0441\u0447\u0435\u0442 \u043c\u0430\u0441\u043a\u0438 \u0431\u0438\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438.<\/p>\n<p>  \u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u0421\u043f\u0438\u0441\u043e\u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u043a\u0430\u043a \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0438\u043f\u043e\u0432:<\/p>\n<pre><code class=\"cpp\">\/\/\u041a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u043c, \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e\u043b\u0435\u0439 \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 template&lt;uint32_t address, size_t size, typename AccessMode,      typename ...Args&gt; class Register {   private:  ... <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e: <br \/>  1. \u0418\u0437 \u0432\u0441\u0435\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u0443 \u043c\u0430\u0441\u043a\u0443, \u0434\u043b\u044f \u043e\u0431\u043d\u0443\u043b\u0435\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u044b\u0445 \u0431\u0438\u0442\u043e\u0432 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445.<br \/>  2. \u0418\u0437 \u0432\u0441\u0435\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0443\u0436\u043d\u044b\u0445 \u0431\u0438\u0442\u043e\u0432.<br \/>  \u042d\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c constexpr \u043c\u0435\u0442\u043e\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0434\u0435\u043b\u0430\u044e\u0442 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438:<\/p>\n<pre><code class=\"cpp\">\/\/\u041a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u043c, \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e\u043b\u0435\u0439 \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 template&lt;uint32_t address, size_t size, typename AccessMode,      typename ...Args&gt; class Register { private:   \/\/\u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043c\u0430\u0441\u043a\u0443 \u0434\u043b\u044f    \/\/\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438.   __forceinline template&lt;typename T&gt;   static constexpr auto GetIndividualMask()   {     Type result = T::Mask &lt;&lt; T::Offset ;     return result ;   }      \/\/\u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434, \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043e\u0431\u0449\u0443\u044e \u043c\u0430\u0441\u043a\u0443    \/\/\u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e\u043b\u0435\u0439 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438.   static constexpr auto GetMask()   {     \/\/\u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0431\u043e\u0440 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u0435\u0439 \u0447\u0435\u0440\u0435\u0437 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438     const auto values = {GetMasks&lt;Args&gt;()...} ;       Type result = 0UL;     for (auto const v: values)     {       \/\/\u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0431\u0438\u0442\u043e\u0432\u0443\u044e \u043c\u0430\u0441\u043a\u0443       result |= v ;       }     return result ;   }    \/\/\u0422\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f     __forceinline template&lt;typename T&gt;   static constexpr auto GetIndividualValue()   {     Type result = T::Value &lt;&lt; T::Offset ;     return result ;   }      static constexpr auto GetValue()   {     const auto values = {GetValues&lt;Args&gt;()...};     Type result = 0UL;     for (const auto v: values)     {       result |= v ;     }     return result ;   } }; <\/code><\/pre>\n<p>  \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b <code>Set()<\/code> \u0438 <code>IsSet()<\/code>:<\/p>\n<pre><code class=\"cpp\">\/\/\u041a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u043c, \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e\u043b\u0435\u0439 \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 template&lt;uint32_t address, size_t size, typename AccessMode,  typename ...Args&gt; class Register { public:   using Type = typename RegisterType&lt;size&gt;::Type;    template&lt;typename T = AccessMode,           class = typename std::enable_if_t&lt;std::is_base_of&lt;WriteMode, T&gt;::value&gt;&gt;   static void Set()   {     Type newRegValue = *reinterpret_cast&lt;Type *&gt;(address) ;       \/\/GetMask() \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0442\u0443\u0442 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435     newRegValue &amp;= ~GetMask() ;       \/\/GetValue() \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0442\u0443\u0442 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435     newRegValue |= GetValue() ;       \/\/\u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u043d\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435     *reinterpret_cast&lt;Type *&gt;(address) = newRegValue ;    }      template&lt;typename T = AccessMode,           class = typename std::enable_if_t&lt;std::is_base_of&lt;ReadMode, T&gt;::value&gt;&gt;   static bool IsSet()   {     Type newRegValue = *reinterpret_cast&lt;Type *&gt;(address) ;     return ((newRegValue &amp; GetMask()) == GetValue()) ;   } private: ... <\/code><\/pre>\n<p>  \u041f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435, \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u043e\u0434\u043d\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0433\u043b\u0443\u043f\u043e\u0441\u0442\u044c:<\/p>\n<pre><code class=\"cpp\">int main() {   \/\/\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 \u0431\u0438\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0442 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 TIM1::CR1    TIM1::CR1&lt;TIM2::CR1::Enabled,                  TIM1::CR2::OIS1::OC1OutputIs0&gt;::Set() ; }<\/code><\/pre>\n<p>  \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043a\u0430\u043a-\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0447\u0442\u043e \u043d\u0430\u0448 \u043d\u0430\u0431\u043e\u0440 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443, \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e, \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0442\u0438\u043f, \u043d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0433\u043e <code>FieldValueBaseType<\/code>. \u0422\u0435\u043f\u0435\u0440\u044c \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u0435\u0442\u044c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 <code>FieldValueBaseType<\/code> \u0442\u0438\u043f:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">template&lt;uint32_t address, size_t size, typename AccessMode,          typename FieldValueBaseType,  typename ...Args&gt; class Register { private:     \/\/\u041c\u0435\u0442\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u0435\u0434\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 BaseType \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0438\u043f\u043e\u043c FieldValueBaseType, \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u043c \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430.   __forceinline template&lt;typename T,           class = typename std::enable_if_t&lt;std::is_same&lt;FieldValueBaseType,            typename T::BaseType&gt;::value&gt;&gt;   static constexpr auto GetIndividualMask()   {     Type result = T::Value &lt;&lt; T::Offset ;     return result ;   }      static constexpr auto GetMask()   {     const auto values = {GetIndividualMask&lt;Args&gt;()...} ;       Type result = 0UL;     for (auto const v: values)     {       result |= v ;       }     return result ;   }    \/\/\u041c\u0435\u0442\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0435\u0434\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 BaseType \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0438\u043f\u043e\u043c FieldValueBaseType, \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u043c \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430.      __forceinline template&lt;typename T,           class = typename std::enable_if_t&lt;std::is_same&lt;FieldValueBaseType,         typename T::BaseType&gt;::value&gt;&gt;   static constexpr auto GetIndividualValue()   {     Type result = T::Value &lt;&lt; T::Offset ;     return result ;   }      static constexpr auto GetValue()   {     const auto values = {GetIndividualValue&lt;Args&gt;()...};     Type result = 0UL;     for (const auto v: values)     {       result |= v ;     }     return result ;   } }; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e\u043b\u0435\u0439, \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u043c SFINAE \u0441\u043d\u043e\u0432\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0435\u043c \u0436\u0435 \u0442\u0438\u043f\u043e\u043c, \u0447\u0442\u043e \u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043d\u044b\u0439 \u0442\u0438\u043f \u0434\u043b\u044f \u043f\u043e\u043b\u0435\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430, \u0435\u0441\u043b\u0438 \u0434\u0430, \u0442\u043e \u043c\u0435\u0442\u043e\u0434 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442, \u0442\u043e \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u043e\u0448\u0438\u0431\u043a\u0443.<\/p>\n<p>  \u0417\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 CR1 \u0442\u0430\u0439\u043c\u0435\u0440\u0430 TIM1, \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">struct TIM1 {   struct TIM1CR1Base {} ;    struct CR1 : public RegisterBase&lt;0x40010000, 32, ReadWriteMode&gt;   {     using CKD = TIM_CR_CKD_Values&lt;TIM1::CR1, 8, 2, ReadWriteMode, TIM1CR1Base&gt; ;     using ARPE = TIM_CR_ARPE_Values&lt;TIM1::CR1, 7, 1, ReadWriteMode, TIM1CR1Base&gt; ;     using CMS = TIM_CR_CMS_Values&lt;TIM1::CR1, 5, 2, ReadWriteMode, TIM1CR1Base&gt; ;     using DIR = TIM_CR_DIR_Values&lt;TIM1::CR1, 4, 1, ReadWriteMode, TIM1CR1Base&gt; ;     using OPM = TIM_CR_OPM_Values&lt;TIM1::CR1, 3, 1, ReadWriteMode, TIM1CR1Base&gt; ;     using URS = TIM_CR_URS_Values&lt;TIM1::CR1, 2, 1, ReadWriteMode, TIM1CR1Base&gt; ;     using UDIS = TIM_CR_UDIS_Values&lt;TIM1::CR1, 1, 1, ReadWriteMode, TIM1CR1Base&gt; ;     using CEN = TIM_CR_CEN_Values&lt;TIM1::CR1, 0, 1, ReadWriteMode, TIM1CR1Base&gt; ;   } ; }<\/code><\/pre>\n<p>  \u0418\u0442\u0430\u043a, \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043b\u044e\u0431\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430, \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e\u043b\u0435\u0439. \u041c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f, \u0438\u043b\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u044b\u0442\u044c \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u043c, \u0447\u0442\u043e \u0432\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0435\u0440\u0435\u043f\u0443\u0442\u0430\u0435\u0442\u0435 \u0438 \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e, \u0438\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435 \u0442\u043e\u0442 \u0431\u0438\u0442 \u0432 \u043f\u043e\u043b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430. <br \/>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0443 \u043d\u0430 \u0421\u0438, \u0433\u0434\u0435 \u043c\u044b \u043d\u0430\u0434\u0435\u043b\u0430\u043b\u0438 \u043a\u0443\u0447\u0443 \u0435\u0440\u0443\u043d\u0434\u044b:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">int main(void) {   \/\/ \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u0440\u0442\u0443 GPIOA       \/\/\u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430, \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440 AHB1ENR     RCC-&gt;APB1ENR |= RCC_AHB1ENR_GPIOAEN ;     \/\/\u0425\u043e\u0442\u0435\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0431\u0438\u0442, \u043d\u043e \u043e\u0431\u043d\u0443\u043b\u0438\u043b\u0438 \u0432\u0441\u0435 \u0431\u0438\u0442\u044b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430    RCC-&gt;AHB1ENR = RCC_AHB1ENR_GPIOAEN;     \/\/\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0442\u0430\u0439\u043c\u0435\u0440 TIM1 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043a \u0448\u0438\u043d\u0435 APB2    RCC-&gt;APB1ENR  |=  RCC_APB1ENR_TIM2EN | RCC_APB2ENR_TIM1EN;     \/\/\u0412\u0438\u0434\u0438\u043c\u043e \u043a\u0442\u043e-\u0442\u043e \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u0430 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430.         auto result = GPIOA-&gt;BSRR ;    if (result &amp; GPIO_BSRR_BS1)     {      \/\/do something   }     \/\/\u041a\u043e\u043c\u0443-\u0442\u043e \u043f\u043b\u0430\u0442\u044f\u0442 \u0437\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430. \u0422\u0430\u043a \u0432\u0435\u0434\u044c \u043c\u043e\u0436\u043d\u043e...   GPIOA-&gt;IDR = GPIO_IDR_ID5 ; <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u0418 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0441 \u043d\u043e\u0432\u044b\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">int main(void) {    \/\/ \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u0440\u0442\u0443 GPIOA    \/\/\u041e\u0448\u0438\u0431\u043a\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 APB1ENR \u043d\u0435\u0442 \u043f\u043e\u043b\u044f GPIOAEN    RCC::APB1ENR::GPIOAEN::Enable::Set() ;        \/\/\u0412\u0441\u0435 \u0445\u043e\u0440\u043e\u0448\u043e, \u043f\u043e\u0434\u0430\u043b\u0438 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u0440\u0442 GPIOA    RCC::AHB1ENR::GPIOAEN::Enable::Set() ;      \/\/\u041e\u0448\u0438\u0431\u043a\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, RCC::APB2ENR::TIM1EN::Enable \u043d\u0435     \/\/\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 APB1ENR    RCC::APB1ENRPack&lt;RCC::APB1ENR::TIM2EN::Enable,                     RCC::APB2ENR::TIM1EN::Enable&gt;::Set();     \/\/\u041e\u0448\u0438\u0431\u043a\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0440\u0435\u0433\u0438\u0441\u0442\u0440 BSRR \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438         auto result = GPIOA::BSRR::Get() ;      \/\/\u041e\u0448\u0438\u0431\u043a\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 Reset \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438    if (GPIOA::BSRR::BS1::Reset::IsSet())      {       \/\/do something    }        \/\/\u041e\u0448\u0438\u0431\u043a\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f    GPIOA::IDR::IDR5::On::Set()  } <\/code><\/pre>\n<p>  \u0412 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437 \u044d\u0442\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043e\u0448\u0438\u0431\u043a\u0443 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u044d\u0442\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0442\u043e, \u0447\u0435\u0433\u043e \u043c\u044b \u0438 \u0434\u043e\u0431\u0438\u0432\u0430\u043b\u0438\u0441\u044c. <\/p>\n<p>  \u041e\u0442\u043b\u0438\u0447\u043d\u043e, \u043c\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u043b\u0438 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0439, \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443 \u0438 \u0435\u0433\u043e \u043f\u043e\u043b\u044f\u043c, \u0430 \u0447\u0442\u043e \u0436\u0435 \u0441 \u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043c?<\/p>\n<h3>\u0411\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435<\/h3>\n<p>  \u0414\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0448 \u043f\u043e\u0434\u0445\u043e\u0434 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u0435\u043d, \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u043d\u0430 \u0421\u0438 \u0438 \u0421++, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u043f\u043e\u0434\u0430\u0447\u0443 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u043f\u043e\u0440\u0442 \u0410, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0442\u0440\u0435\u0445 \u043f\u043e\u0440\u0442\u043e\u0432 \u0432 \u0440\u0435\u0436\u0438\u043c \u0432\u044b\u0445\u043e\u0434\u0430 \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0432 \u044d\u0442\u0438\u0445 \u0442\u0440\u0435\u0445 \u043f\u043e\u0440\u0442\u0430\u0445 1 \u043d\u0430 \u0432\u044b\u0432\u043e\u0434\u0430\u0445:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 \u043d\u0430 \u0421\u0438:<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">int main() {     uint32_t res = RCC-&gt;AHB2ENR;   res &amp;=~ RCC_AHB1ENR_GPIOAEN_Msk ;   res |= RCC_AHB1ENR_GPIOAEN ;   RCC-&gt;AHB2ENR = res ;       res = GPIOA-&gt;MODER ;   res &amp;=~ (GPIO_MODER_MODER5 |             GPIO_MODER_MODER4 |             GPIO_MODER_MODER1) ;   res |= (GPIO_MODER_MODER5_0 |            GPIO_MODER_MODER4_0 |           GPIO_MODER_MODER1_0) ;   GPIOA-&gt;MODER = res ;      GPIOA-&gt;BSRR = (GPIO_BSRR_BS5 | GPIO_BSRR_BS4 | GPIO_BSRR_BS1) ;       return 0 ; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 \u043d\u0430 \u0421++:<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">int main() {      RCC::AHB1ENR::GPIOAEN::Enable::Set() ;      GPIOA::MODERPack&lt;          GPIOA::MODER::MODER5::Output,          GPIOA::MODER::MODER4::Output,          GPIOA::MODER::MODER1::Output&gt;::Set() ;       GPIOA::BSRRPack&lt;          GPIOA::BSRR::BS5::Set,          GPIOA::BSRR::BS4::Set,          GPIOA::BSRR::BS1::Set&gt;::Write() ;    return 0 ; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 IAR. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0434\u0432\u0430 \u0440\u0435\u0436\u0438\u043c\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438: \u0411\u0435\u0437 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043d\u0430 \u0441\u0440\u0435\u0434\u043d\u0435\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f:<\/p>\n<p>  \u041a\u043e\u0434 \u043d\u0430 \u0421\u0438 \u0438 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/w-\/wu\/ln\/w-wulnrmu5wg5pdby7qzzkxfdl8.png\" alt=\"image\"><br \/>  \u041a\u043e\u0434 \u043d\u0430 C++ \u0438 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/wz\/da\/sf\/wzdasflo3-fmkqsiq4lbtsbgf6g.png\" alt=\"image\"><br \/>  18 \u0441\u0442\u0440\u043e\u043a \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430 \u0432 \u043e\u0431\u043e\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0438 \u043a\u043e\u0434 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u0439, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0438 \u043d\u0435 \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0438 \u0434\u043e\u0431\u0438\u0432\u0430\u043b\u0438\u0441\u044c.<\/p>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430 \u0441\u0440\u0435\u0434\u043d\u0435\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u043e\u0434 \u043d\u0430 \u0421\u0438:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/xm\/m2\/ac\/xmm2actwv_1w6m_hqnbhsccg6xe.png\" alt=\"image\"><br \/>  \u041a\u0430\u043a \u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u043b\u043e\u0441\u044c \u0443\u0436\u0435 \u0432\u0441\u0435\u0433\u043e 13 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0439 \u0441\u0442\u0440\u043e\u043a. <br \/>  \u0418 \u043a\u043e\u0434 \u043d\u0430 \u0421++ \u043d\u0430 \u0441\u0440\u0435\u0434\u043d\u0435\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/qa\/ic\/a-\/qaica-alj0danc4ffbmhyc2livs.png\" alt=\"image\"><br \/>  \u041e\u043f\u044f\u0442\u044c \u0436\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u0430\u044f: \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0445, \u043f\u0440\u0438 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u043c \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435 \u0432 \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u0434\u0430.<br \/>  \u041d\u0443 \u0447\u0442\u043e \u0436\u0435 \u0432\u0441\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0440\u0435\u0448\u0435\u043d\u044b, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0437\u0430\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441. \u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u0443\u0441\u0438\u043b\u0438\u0439 \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0432 \u0442\u0430\u043a\u043e\u043c \u0432\u0438\u0434\u0435?<\/p>\n<h3>\u041a\u0430\u043a \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b<\/h3>\n<p>  \u041c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438, \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439, \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0438 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c. \u041e\u0441\u0442\u0430\u043b\u0441\u044f \u043e\u0434\u0438\u043d \u0432\u043e\u043f\u0440\u043e\u0441. \u041a\u0430\u043a \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b, \u0438\u0445 \u0436\u0435 \u0442\u0430\u043c \u043f\u043e\u0434 \u0441\u043e\u0442\u043d\u044e \u0434\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430. \u042d\u0442\u043e \u0436\u0435 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430\u0434\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043e\u043f\u0438\u0441\u0430\u0442\u044c, \u0432\u0435\u0434\u044c \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u0443\u0447\u0443 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u0442\u0430\u043a\u043e\u0439 \u0440\u0443\u0442\u0438\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435. \u0414\u0430, \u0432 \u0440\u0443\u0447\u043d\u0443\u044e \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u043d\u0430\u0434\u043e. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u043a\u043e\u0434\u0430 \u0438\u0437 SVD \u0444\u0430\u0439\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u043a\u0430\u043a \u044f \u0443\u043a\u0430\u0437\u0430\u043b \u0432\u044b\u0448\u0435 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0442\u0443 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u043f\u0440\u0438\u043d\u044f\u043b. <\/p>\n<p>  \u042f \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0441\u043a\u0440\u0438\u043f\u0442 \u043a\u043e\u043b\u043b\u0435\u0433\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u044d\u0442\u043e\u0439 \u0438\u0434\u0435\u0438 \u0441\u0434\u0435\u043b\u0430\u043b \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u043d\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0449\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f enum, \u0432\u043c\u0435\u0441\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0434\u043b\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e\u043b\u0435\u0439. \u0421\u043a\u0440\u0438\u043f\u0442 \u0441\u0434\u0435\u043b\u0430\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0430 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438\u0434\u0435\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u0435\u043d, \u043d\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e <a href=\"https:\/\/github.com\/lamer0k\/CortexLib\/tree\/master\/AbstractHardware\/Registers\/STM32F411\">\u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0435.<\/a> <br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/jq\/0h\/kj\/jq0hkj-s5u4jyou1-luv7bhlasy.png\" alt=\"image\"><br \/>  \u041a\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0441\u043a\u0440\u0438\u043f\u0442 \u043b\u0435\u0436\u0438\u0442 <a href=\"https:\/\/github.com\/lamer0k\/CortexLib\/blob\/master\/Tools\/RegistersGenerator\/reg_wrappers_generator.py\">\u0442\u0443\u0442<\/a><\/p>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435, \u0440\u0430\u0431\u043e\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b. \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b, \u0441\u043a\u0430\u0436\u0435\u043c \u043c\u043e\u0434\u0443\u043b\u044f gpioa \u0438\u043b\u0438 rcc, \u0432\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b:<\/p>\n<pre><code class=\"cpp\">#include \"gpioaregisters.hpp\" \/\/for GPIOA #include \"rccregisters.hpp\"   \/\/for RCC  int main() {   RCC::AHB1ENR::GPIOAEN::Enable::Set() ;   GPIOA::MODER::MODER15::Output::Set() ;     GPIOA::MODERPack&lt;           GPIOA::MODER::MODER12::Output,           GPIOA::MODER::MODER14::Analog   &gt;::Set() ; } <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u044f \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b, SVD \u0444\u0430\u0439\u043b \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f, \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c \u0438\u0437 \u0441\u0440\u0435\u0434\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043f\u043e\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u0432\u0445\u043e\u0434 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432\u0441\u0435.<\/p>\n<p>  \u041d\u043e, \u043a\u0430\u043a \u044f \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b \u0432\u044b\u0448\u0435, \u043d\u0435 \u0432\u0441\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0438 \u0437\u0430\u0431\u043e\u0442\u044f\u0442\u0441\u044f \u043e \u0441\u0432\u043e\u0438\u0445 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f\u0445, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u0443 \u0432\u0441\u0435\u0445 \u0432 \u0444\u0430\u0439\u043b\u0435 SVD \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0434\u043b\u044f ST \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u043f\u043e\u0441\u043b\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">template &lt;typename Reg, size_t offset, size_t size, typename AccessMode, typename BaseType&gt;  struct GPIOA_MODER_MODER_Values: public RegisterField&lt;Reg, offset, size, AccessMode&gt;  {   using Value0 = FieldValue&lt;GPIOA_MODER_MODER_Values, BaseType, 0U&gt; ;   using Value1 = FieldValue&lt;GPIOA_MODER_MODER_Values, BaseType, 1U&gt; ;   using Value2 = FieldValue&lt;GPIOA_MODER_MODER_Values, BaseType, 2U&gt; ;   using Value3 = FieldValue&lt;GPIOA_MODER_MODER_Values, BaseType, 3U&gt; ; } ;<\/code><\/pre>\n<p>  \u0412 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0438 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0441\u043b\u043e\u0432\u0430 Value, \u043d\u0430 \u0447\u0442\u043e-\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u0432\u043d\u044f\u0442\u043d\u043e\u0435:<\/p>\n<pre><code class=\"cpp\">template &lt;typename Reg, size_t offset, size_t size, typename AccessMode, typename BaseType&gt;  struct GPIOA_MODER_MODER_Values: public RegisterField&lt;Reg, offset, size, AccessMode&gt;  {   using Input = FieldValue&lt;GPIOA_MODER_MODER_Values, BaseType, 0U&gt; ;   using Output = FieldValue&lt;GPIOA_MODER_MODER_Values, BaseType, 1U&gt; ;   using Alternate = FieldValue&lt;GPIOA_MODER_MODER_Values, BaseType, 2U&gt; ;   using Analog = FieldValue&lt;GPIOA_MODER_MODER_Values, BaseType, 3U&gt; ; } ;<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0443\u0436\u0435 \u0432\u0441\u0435 \u0432\u0430\u0448\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 \u0431\u0443\u0434\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435. <\/p>\n<p>  \u042f \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e ST \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0432\u0441\u0435 \u0442\u0430\u043a\u0438 \u0441\u043e\u0438\u0437\u0432\u043e\u043b\u0438\u0442 \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439, \u0442\u043e\u0433\u0434\u0430 \u0440\u0443\u0447\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435 0.<\/p>\n<p>  \u0421\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e\u0441\u0442\u0438 \u0440\u0430\u0434\u0438, \u0441\u0442\u043e\u0438\u0442 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b \u0438\u0442\u0430\u043a \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f enum \u0440\u0443\u043a\u0430\u043c\u0438.<\/p>\n<p>  \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432\u0441\u0435, \u043b\u044e\u0431\u044b\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442\u0441\u044f.<br \/>  \u041f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e\u0434 IAR 8.40.1 \u043b\u0435\u0436\u0438\u0442 <a href=\"https:\/\/yadi.sk\/d\/xoSyWfqwSGBe5A\">\u0442\u0443\u0442<\/a><br \/>  \u0421\u0430\u043c\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043b\u0435\u0436\u0430\u0442 <a href=\"https:\/\/github.com\/lamer0k\/CortexLib\/tree\/master\/AbstractHardware\/Registers\">\u0442\u0443\u0442<\/a><br \/>  \u041a\u043e\u0434 <a href=\"https:\/\/onlinegdb.com\/B1n7ILWUS\">\u00ab\u043d\u0430 Online GDB\u00bb<\/a><\/p>\n<h3>\u0421\u0441\u044b\u043b\u043a\u0438 \u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435<\/h3>\n<p>  <a href=\"https:\/\/blog.salkinium.com\/typesafe-register-access-in-c++\/\">Typesafe Register Access in C++<\/a><br \/>  <a href=\"http:\/\/www.eld.leidenuniv.nl\/~moene\/Home\/papers\/accu\/overload95-register\/\">One Approach to Using Hardware Registers in C++<\/a><br \/>  <a href=\"https:\/\/www.keil.com\/pack\/doc\/CMSIS\/SVD\/html\/svd_Format_pg.html\">SVD Description (*.svd) Format<\/a><\/div>\n<p>               <script class=\"js-mediator-script\">!function(e){function t(t,n){if(!(n in e)){for(var r,a=e.document,i=a.scripts,o=i.length;o--;)if(-1!==i[o].src.indexOf(t)){r=i[o];break}if(!r){r=a.createElement(\"script\"),r.type=\"text\/javascript\",r.async=!0,r.defer=!0,r.src=t,r.charset=\"UTF-8\";var d=function(){var e=a.getElementsByTagName(\"script\")[0];e.parentNode.insertBefore(r,e)};\"[object Opera]\"==e.opera?a.addEventListener?a.addEventListener(\"DOMContentLoaded\",d,!1):e.attachEvent(\"onload\",d):d()}}}t(\"\/\/mediator.mail.ru\/script\/2820404\/\",\"_mediator\")}(window);<\/script>     <br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/459642\/\"> https:\/\/habr.com\/ru\/post\/459642\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/et\/ni\/fl\/etnifl3hcinjjsqt8skfvv6km5q.png\" alt=\"image\"><br \/>  <sub> \u0420\u0438\u0441. \u0432\u0437\u044f\u0442 \u0441 \u0441\u0430\u0439\u0442\u0430 <a href=\"https:\/\/www.extremetech.com\/wp-content\/uploads\/2016\/07\/MegaProcessor-Feature.jpg\">www.extremetech.com\/wp-content\/uploads\/2016\/07\/MegaProcessor-Feature.jpg<\/a> <\/sub><\/p>\n<p>  \u0412\u0441\u0435\u043c \u0434\u043e\u0431\u0440\u043e\u0433\u043e \u0437\u0434\u0440\u0430\u0432\u0438\u044f!<br \/>  <a href=\"https:\/\/habr.com\/ru\/post\/459204\/\">\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u044f \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u0432\u043e\u043f\u0440\u043e\u0441 \u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0441 \u044f\u0434\u0440\u043e\u043c CortexM \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u0421++ \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c.<\/p>\n<p>  \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u0434\u0435\u044e \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443 \u0438 \u0435\u0433\u043e \u043f\u043e\u043b\u044f\u043c \u0431\u0435\u0437 \u0443\u0449\u0435\u0440\u0431\u0430 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 SVD \u0444\u0430\u0439\u043b\u043e\u0432 \u0421++ \u043a\u043b\u0430\u0441\u0441\u044b. <\/p>\n<p>  \u0412\u0441\u0435\u0445 \u043a\u043e\u0433\u043e \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b, \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u043a\u0430\u0442. \u041a\u043e\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043c\u043d\u043e\u0433\u043e.  <\/p>\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-294390","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/294390","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=294390"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/294390\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=294390"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=294390"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=294390"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}