{"id":268215,"date":"2015-11-14T21:14:02","date_gmt":"2015-11-14T18:14:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=268215"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=268215","title":{"rendered":"\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0441 STM32 \u043d\u0430 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0439 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u041a1986\u0412\u041592QI. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435: \u041e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u043a\u043b\u0430\u0432\u0438\u0448\u0438, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0428\u0418\u041c. \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u043d\u0430 CMSIS \u0438 SPL (PWM+TIM+PORT). \u0427\u0430\u0441\u0442\u044c \u0432\u0442\u043e\u0440\u0430\u044f"},"content":{"rendered":"<br \/>\n<h4>\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435.<\/h4>\n<p>\u0412 <a href=\"http:\/\/habrahabr.ru\/post\/267051\/\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u043c\u044b \u0441 \u0432\u0430\u043c\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u043b\u0438 \u043e\u0431\u0449\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0438 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u0440\u0443\u0447\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0428\u0418\u041c \u043a\u0430\u043d\u0430\u043b\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c CMSIS. \u041d\u043e \u043c\u043d\u043e\u0433\u0438\u043c \u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u00ab\u043a\u043e\u043f\u0430\u0442\u044c\u0441\u044f \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445\u00bb \u0438 \u043e\u043d\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u044e\u0442 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439, \u043a\u0430\u043a \u0438\u043c \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u043f\u044b\u0442\u0430\u044e\u0441\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0430\u043c \u0432\u0441\u0435 \u043f\u043b\u044e\u0441\u044b \u0438 \u043c\u0438\u043d\u0443\u0441\u044b \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430.<a name=\"habracut\"><\/a><\/p>\n<h4>\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432 \u043f\u043e\u0434\u0430\u0447\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430.<\/h4>\n<p>\u0412\u043e \u0432\u0441\u0435\u0445 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b \u0432\u0441\u0435 \u0437\u043d\u0430\u043d\u0438\u044f \u043f\u043e \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0437\u0430\u0434\u0430\u0447\u0435 \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u0435, \u0441\u0442\u0430\u0440\u0430\u044f\u0441\u044c \u043d\u0435 \u0443\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u0441\u0435\u0445 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0435\u0439 \u0438 \u0434\u0435\u0442\u0430\u043b\u0435\u0439, \u043f\u043e\u043b\u0443\u0447\u0430\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0431\u044a\u0435\u043c\u043d\u0443\u044e, \u043d\u043e \u0438\u0441\u0447\u0435\u0440\u043f\u044b\u0432\u0430\u044e\u0449\u0443\u044e \u043b\u044e\u0431\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u0441\u0442\u0430\u0442\u044c\u044e. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435, \u043c\u043d\u0435\u043d\u0438\u044f \u043e \u043c\u043e\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043b\u0438\u0441\u044c. \u041a\u043e\u043c\u0443-\u0442\u043e \u043d\u0440\u0430\u0432\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u043d\u0435\u0442 \u043e\u0442\u0441\u044b\u043b\u043e\u043a \u043a \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0435 \u0438 \u0432\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0441\u0430\u043c\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0438\u043b\u0438 \u0432 \u0435\u0435 \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0438\u043a\u0430\u0445. \u0410 \u043a\u043e\u043c\u0443-\u0442\u043e \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442 \u0431\u044b\u043b\u043e \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0440\u043e \u00ab\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0440\u043d\u044b\u0435 \u0432\u0435\u0449\u0438\u00bb (\u0442\u0430\u043a\u0438\u0435, \u043a\u0430\u043a \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u044f\u0437\u044b\u043a\u0430, \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u043b\u043e\u043a\u043e\u0432, \u0438 \u0442.\u0434.) \u0438 \u043b\u044e\u0434\u0438 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u044e \u043d\u0435 \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u043d\u043e\u0439. \u0422\u0430\u043a \u043a\u0430\u043a \u044f \u043d\u0435 \u043b\u044e\u0431\u043b\u044e \u043e\u0442\u0441\u044b\u043b\u0430\u0442\u044c \u043b\u044e\u0434\u0435\u0439 \u043a \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0435, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0445\u043e\u0447\u0443, \u0447\u0442\u043e\u0431\u044b \u0447\u0442\u043e-\u043b\u0438\u0431\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u044b\u043b\u043e \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0442\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0442\u0435\u043f\u0435\u0440\u044c \u0431\u0443\u0434\u0435\u0442 \u0438\u0437\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c: \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0435\u043a\u0441\u0442 \u2014 \u0442\u0435\u043a\u0441\u0442 \u0434\u043b\u044f \u043b\u044e\u0434\u0435\u0439, \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u0432 \u0442\u043e\u043c, \u043e \u0447\u0435\u043c \u0447\u0438\u0442\u0430\u044e\u0442 \u0438 \u0438\u043c\u0435\u044e\u0449\u0438\u0445 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0435. \u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0447\u0442\u043e-\u043b\u0438\u0431\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u0438\u043b\u0438 \u043d\u0435 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442 \u2014 \u043f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u0430\u043c\u0438 \u0441 \u043f\u043e\u043c\u0435\u0442\u043a\u0430\u043c\u0438 \u00ab\u041f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u043a&#8230;.\u00bb \u2014 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0431\u0440\u0430\u043d\u0430 \u0432\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430\u044f \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f. <\/p>\n<h4>\u0417\u0430\u0434\u0430\u0447\u0430.<\/h4>\n<p>\u041d\u0430\u0448\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0440\u0435\u0448\u0438\u0442\u044c \u0442\u0443 \u0436\u0435 \u0437\u0430\u0434\u0430\u0447\u0443, \u0447\u0442\u043e \u043c\u044b \u0440\u0435\u0448\u0430\u043b\u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u043d\u043e \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u0438\u0448\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 SPL. \u041f\u043e \u0438\u0442\u043e\u0433\u0443 \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u0433\u043b\u044f\u0434\u0435\u043d, \u0431\u044b\u0441\u0442\u0440 \u0438 \u043c\u0435\u043d\u044c\u0448\u0435 \u0432\u0435\u0441\u0438\u0442. \u041a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 \u2014 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u043b\u043e \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u0436\u0435 \u0438\u043c\u0435\u043d\u0430\u043c\u0438, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u00abSPL\u00bb, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0445 \u043e\u0442\u043b\u0438\u0447\u0438\u0442\u044c \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430 \u0432\u0435\u0441 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430 (\u0417\u0430\u043c\u0435\u043d\u044f\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0440\u0443\u0447\u043d\u043e\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 SPL).<\/p>\n<h4>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u043e\u0440\u0442\u043e\u0432 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 SPL (PORT).<\/h4>\n<p>\u041d\u0430\u0447\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e. \u0421 \u043f\u043e\u0440\u0442\u043e\u0432 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 \u0434\u043b\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0433\u043e \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430. \u0420\u0430\u043d\u044c\u0448\u0435 \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0430\u0437\u044b\u0432\u0430\u043b\u0430\u0441\u044c initPinPortCForLed. \u0422\u0435\u043f\u0435\u0440\u044c \u0431\u0443\u0434\u0435\u0442 initPinPortCForLedSPL. \u0418\u043c\u0435\u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0431\u0443\u0434\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f. \u041a\u0430\u043a \u043c\u044b \u043f\u043e\u043c\u043d\u0438\u043c, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0440\u0442 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0441\u044f \u0438 \u043c\u044b \u0441\u043c\u043e\u0433\u043b\u0430 \u0437\u0430\u0436\u0435\u0447\u044c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u2014 \u043d\u0443\u0436\u043d\u043e:<\/p>\n<ol>\n<li>\u041f\u043e\u0434\u0430\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u043f\u043e\u0440\u0442.<\/li>\n<li>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c \u043f\u043e\u0440\u0442.<\/li>\n<li>\u0412\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 RXTX.<\/li>\n<\/ol>\n<p>\u0422\u0430\u043a \u0431\u044b\u043b\u043e, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0441 CMSIS \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e. \u0421 SPL \u0432\u0441\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0430\u0447\u0435. \u0414\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443. \u0418\u043d\u043e\u0433\u0434\u0430 \u2014 \u043d\u0435 \u043e\u0434\u043d\u0443. \u0418 \u043f\u043e\u0442\u043e\u043c \u0435\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0430\u043c\u0430 \u0432\u0441\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u043a \u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c\u0443.<\/b><\/p>\n<div class=\"spoiler_text\">\u041c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u044e \u0441 \u043f\u043e\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 \u0434\u043e\u043c\u0430: \u0432\u044b \u0434\u0435\u043b\u0430\u0435\u0442\u0435 \u0447\u0435\u0440\u0442\u0435\u0436 \u043f\u043e \u0432\u0441\u0435\u043c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435\u043c, \u0430 \u043f\u043e\u0442\u043e\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0435 \u0435\u0433\u043e \u043b\u044e\u0434\u044f\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0430\u043c\u0438 \u0441\u0442\u0440\u043e\u044f\u0442 \u0434\u043e\u043c. \u0412\u0430\u0441 \u043d\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f, \u043a\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u0434\u043e\u043c. \u0412\u044b \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u2014 \u043a\u0430\u043a \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0447\u0435\u0440\u0442\u0435\u0436\u0435. \u0417\u0434\u0435\u0441\u044c \u00ab\u0447\u0435\u0440\u0442\u0435\u0436\u00bb \u2014 \u044d\u0442\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u0432\u0430\u043c\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430. \u0410 \u00ab\u043b\u044e\u0434\u0438, \u0441\u0442\u0440\u043e\u044f\u0449\u0438\u0435 \u0434\u043e\u043c\u00bb \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u044f SPL. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0432\u043e\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430. \u0423\u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a\u0430\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u0432 \u0432 \u0444\u0430\u0439\u043b \u0432 \u043f\u0430\u043f\u043a\u0435 spl (\u0432 \u0434\u0435\u0440\u0435\u0432\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430) \u0441 \u0438\u043c\u0435\u043d\u0435\u043c MDR32F9Qx_\u0438\u043c\u044f_\u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438.<\/div>\n<\/div>\n<p> \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u0430\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u043f\u043e\u0440\u0442. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u0444\u0430\u0439\u043b\u0443 <u>MDR32F9Qx_rst_clk.h<\/u>. \u0412 \u043d\u0435\u043c, \u0432 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0446\u0435, \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043c \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c SPL. \u0418\u0437 \u0432\u0441\u0435\u0433\u043e \u043c\u043d\u043e\u0433\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u043b\u0438\u0448\u044c <b>RST_CLK_PCLKcmd<\/b>. \u0421 \u0435\u0435 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0434\u0430\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0431\u043b\u043e\u043a \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438.<\/p>\n<pre><code class=\"cpp\">void RST_CLK_PCLKcmd(uint32_t RST_CLK_PCLK, FunctionalState NewState);<\/code><\/pre>\n<p>\u0423 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430:  <\/p>\n<ul>\n<li><b>RST_CLK_PCLK<\/b> \u2014 \u0438\u043c\u044f \u0431\u043b\u043e\u043a\u0430 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u0430\u0442\u044c \u0438\u043b\u0438 \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u043d\u044f\u0442\u044c \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b (\u0441\u0438\u0433\u043d\u0430\u043b \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f). \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u043e\u0438\u0441\u043a\u043e\u043c \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u0436\u0435 <b>.h<\/b> \u0444\u0430\u0439\u043b\u0443, \u043d\u0430\u0431\u0440\u0430\u0432 RST_CLK_PCLK \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u0441\u043a\u043e\u043c\u043e\u0433\u043e.\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 RST_CLK_PCLK<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#ifdef USE_MDR1986VE9x \/* For cortex M3 *\/  \t#define RST_CLK_PCLK_CAN1           PCLK_BIT(MDR_CAN1_BASE) \t#define RST_CLK_PCLK_CAN2           PCLK_BIT(MDR_CAN2_BASE) \t#define RST_CLK_PCLK_USB            PCLK_BIT(MDR_USB_BASE) \t#define RST_CLK_PCLK_EEPROM         PCLK_BIT(MDR_EEPROM_BASE) \t#define RST_CLK_PCLK_RST_CLK        PCLK_BIT(MDR_RST_CLK_BASE) \t#define RST_CLK_PCLK_DMA            PCLK_BIT(MDR_DMA_BASE) \t#define RST_CLK_PCLK_UART1          PCLK_BIT(MDR_UART1_BASE) \t#define RST_CLK_PCLK_UART2          PCLK_BIT(MDR_UART2_BASE) \t#define RST_CLK_PCLK_SSP1           PCLK_BIT(MDR_SSP1_BASE) \t#define RST_CLK_PCLK_09             PCLK_BIT(0x40048000) \t#define RST_CLK_PCLK_I2C            PCLK_BIT(MDR_I2C_BASE) \t#define RST_CLK_PCLK_POWER          PCLK_BIT(MDR_POWER_BASE) \t#define RST_CLK_PCLK_WWDG           PCLK_BIT(MDR_WWDG_BASE) \t#define RST_CLK_PCLK_IWDG           PCLK_BIT(MDR_IWDG_BASE) \t#define RST_CLK_PCLK_TIMER1         PCLK_BIT(MDR_TIMER1_BASE) \t#define RST_CLK_PCLK_TIMER2         PCLK_BIT(MDR_TIMER2_BASE) \t#define RST_CLK_PCLK_TIMER3         PCLK_BIT(MDR_TIMER3_BASE) \t#define RST_CLK_PCLK_ADC            PCLK_BIT(MDR_ADC_BASE) \t#define RST_CLK_PCLK_DAC            PCLK_BIT(MDR_DAC_BASE) \t#define RST_CLK_PCLK_COMP           PCLK_BIT(MDR_COMP_BASE) \t#define RST_CLK_PCLK_SSP2           PCLK_BIT(MDR_SSP2_BASE) \t#define RST_CLK_PCLK_PORTA          PCLK_BIT(MDR_PORTA_BASE) \t#define RST_CLK_PCLK_PORTB          PCLK_BIT(MDR_PORTB_BASE) \t#define RST_CLK_PCLK_PORTC          PCLK_BIT(MDR_PORTC_BASE) \t#define RST_CLK_PCLK_PORTD          PCLK_BIT(MDR_PORTD_BASE) \t#define RST_CLK_PCLK_PORTE          PCLK_BIT(MDR_PORTE_BASE) \t#define RST_CLK_PCLK_26             PCLK_BIT(0x400D0000) \t#define RST_CLK_PCLK_BKP            PCLK_BIT(MDR_BKP_BASE) \t#define RST_CLK_PCLK_28             PCLK_BIT(0x400E0000) \t#define RST_CLK_PCLK_PORTF          PCLK_BIT(MDR_PORTF_BASE) \t#define RST_CLK_PCLK_EBC            PCLK_BIT(MDR_EBC_BASE) \t#define RST_CLK_PCLK_31             PCLK_BIT(0x400F8000)  \t#define IS_RST_CLK_PCLK(PCLK)       ((((PCLK) & RST_CLK_PCLK_09) == 0x00) && \\ \t\t\t\t\t\t\t\t\t\t (((PCLK) & RST_CLK_PCLK_26) == 0x00) && \\ \t\t\t\t\t\t\t\t\t\t (((PCLK) & RST_CLK_PCLK_28) == 0x00) && \\ \t\t\t\t\t\t\t\t\t\t (((PCLK) & RST_CLK_PCLK_31) == 0x00)) #endif \/\/ #ifdef USE_MDR1986VE9x \/* For cortex M3 *\/<\/code><\/pre>\n<\/div>\n<\/div>\n<p>\u041f\u0440\u043e\u0448\u0443 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u044d\u0442\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0432\u043e\u0439. \u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u043f\u0443\u043d\u043a\u0442\u043e\u0432 \u0441\u043f\u0438\u0441\u043a\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b, \u043d\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u0441\u044f.<\/li>\n<li><b>NewState<\/b> \u2014 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0441\u0438\u0433\u043d\u0430\u043b \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041b\u0438\u0431\u043e <b>DISABLE<\/b> \u2014 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u043b\u0438\u0431\u043e <b>ENABLE<\/b> \u2014 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435.<\/li>\n<\/ul>\n<p>\u0412\u0441\u043f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e \u043d\u0430\u0448 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043a PC1. \u041d\u0435 \u0441\u043b\u043e\u0436\u043d\u043e \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a.<\/p>\n<pre><code class=\"cpp\">RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTC, ENABLE);\t \/\/ \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u0430 C.<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430 \u043d\u0443\u0436\u043d\u044b\u0439 \u043d\u0430\u043c \u043f\u043e\u0440\u0442 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 \u043f\u043e\u0434\u0430\u043d \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0447\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0439\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0440\u0442. \u041e\u043d\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 <u>MDR32F9Qx_port.h<\/u>. \u041d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <b>PORT_Init<\/b> \u0438 \u0438\u043c\u0435\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0432\u0438\u0434.<\/p>\n<pre><code class=\"cpp\">void PORT_Init(MDR_PORT_TypeDef* PORTx, const PORT_InitTypeDef* PORT_InitStruct);<\/code><\/pre>\n<p>\u041a\u0430\u043a \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u0443 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0442\u0430\u043a \u0436\u0435 2 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430:<\/p>\n<ol>\n<li><b>MDR_PORT_TypeDef<\/b> \u2014 \u0438\u043c\u044f \u043f\u043e\u0440\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c. \u0412 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 MDR_PORTX, \u0433\u0434\u0435 \u0432\u043c\u0435\u0441\u0442\u043e X \u2014 \u0431\u0443\u043a\u0432\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u043e\u0440\u0442\u0430 (A, B, C&#8230;). \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0435\u0442 <b>MDR_PORTC<\/b>.<\/li>\n<li>\u0412\u0442\u043e\u0440\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u2014 \u044d\u0442\u043e <b>\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0432\u0438\u0434\u0430 PORT_InitTypeDef<\/b>. \u0415\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0442\u043e\u043c \u0436\u0435 \u0444\u0430\u0439\u043b\u0435 (<u>MDR32F9Qx_port.h<\/u>). \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 SPL \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c. \u041a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435, \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0443, \u043d\u0435 \u0437\u043d\u0430\u044e\u0449\u0435\u043c\u0443 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u0438 \u043d\u0435\u0437\u043d\u0430\u043a\u043e\u043c\u043e\u043c\u0443 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0442\u044f\u0436\u043a\u043e. \u0414\u0430 \u0438 \u0438\u043d\u043e\u0433\u0434\u0430 \u043e\u0431 \u0438\u0441\u0442\u0438\u043d\u043d\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \u043a \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e \u043d\u0430\u0447\u0430\u043b\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u0430\u0434\u0430\u0442\u044c. \u041f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0438\u0445 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043b\u0438\u0448\u044c \u043f\u043e\u0441\u043b\u0435 \u0442\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043b\u043e\u043a-\u0441\u0445\u0435\u043c\u044b \u0442\u043e\u0433\u043e \u0438\u043b\u0438 \u0438\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f.\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b  PORT_InitTypeDef<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">typedef struct {   uint16_t PORT_Pin;                     \/*!&lt; Specifies PORT pins to be configured.                                               This parameter is a mask of @ref PORT_pins_define values. *\/   PORT_OE_TypeDef PORT_OE;               \/*!&lt; Specifies in\/out mode for the selected pins.                                               This parameter is one of @ref PORT_OE_TypeDef values. *\/   PORT_PULL_UP_TypeDef PORT_PULL_UP;     \/*!&lt; Specifies pull up state for the selected pins.                                               This parameter is one of @ref PORT_PULL_UP_TypeDef values. *\/   PORT_PULL_DOWN_TypeDef PORT_PULL_DOWN; \/*!&lt; Specifies pull down state for the selected pins.                                               This parameter is one of @ref PORT_PULL_DOWN_TypeDef values. *\/   PORT_PD_SHM_TypeDef PORT_PD_SHM;       \/*!&lt; Specifies SHM state for the selected pins.                                               This parameter is one of @ref PORT_PD_SHM_TypeDef values. *\/   PORT_PD_TypeDef PORT_PD;               \/*!&lt; Specifies PD state for the selected pins.                                               This parameter is one of @ref PORT_PD_TypeDef values. *\/   PORT_GFEN_TypeDef PORT_GFEN;           \/*!&lt; Specifies GFEN state for the selected pins.                                               This parameter is one of @ref PORT_GFEN_TypeDef values. *\/   PORT_FUNC_TypeDef PORT_FUNC;           \/*!&lt; Specifies operating function for the selected pins.                                               This parameter is one of @ref PORT_FUNC_TypeDef values. *\/   PORT_SPEED_TypeDef PORT_SPEED;         \/*!&lt; Specifies the speed for the selected pins.                                               This parameter is one of @ref PORT_SPEED_TypeDef values. *\/   PORT_MODE_TypeDef PORT_MODE;           \/*!&lt; Specifies the operating mode for the selected pins.                                               This parameter is one of @ref PORT_MODE_TypeDef values. *\/ }PORT_InitTypeDef;<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0435: \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u043a\u0430\u043a \u0435\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c, \u043e\u0442\u043a\u0443\u0434\u0430 \u0431\u0440\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f?<\/b><\/p>\n<div class=\"spoiler_text\">\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u043f\u043e \u0441\u0443\u0442\u0438, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u043c\u0430\u0441\u0441\u0438\u0432, \u043a\u0430\u0436\u0434\u0430\u044f \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f (\u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435) \u044f\u0447\u0435\u0439\u043a\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0441\u0432\u043e\u0439 \u0442\u0438\u043f. \u041a\u0430\u043a \u0438 \u043c\u0430\u0441\u0441\u0438\u0432, \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c.<\/p>\n<pre><code class=\"cpp\">PORT_InitTypeDef Led0PortC_structInit;\t\t\/\/ \u041d\u0430 \u043f\u043e\u0440\u0442\u0443 C.<\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c PORT_InitTypeDef \u2014 \u044d\u0442\u043e <b>\u0442\u0438\u043f<\/b>. \u0418\u043d\u0430\u0447\u0435 \u0433\u043e\u0432\u043e\u0440\u044f \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0448\u0430\u0431\u043b\u043e\u043d, \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u00ab\u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0430\u00bb \u043f\u0430\u043c\u044f\u0442\u0438. Led0PortC_structInit \u2014 \u0438\u043c\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043d\u043d\u043e\u0435 \u043d\u0430\u043c\u0438. \u041a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0442\u0438\u043f\u0430 uint32_t \u043c\u044b \u0437\u0430\u0434\u0430\u0432\u0430\u043b\u0438 \u0435\u0435 \u0438\u043c\u044f, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 Loop, \u0442\u0430\u043a \u0438 \u0442\u0443\u0442 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0442\u0438\u043f\u0430 PORT_InitTypeDef \u0441 \u0438\u043c\u0435\u043d\u0435\u043c Led0PortC_structInit. \u0412\u0430\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043e \u043f\u0435\u0440\u0432\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u0418\u043d\u0430\u0447\u0435 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0435 \u0441\u043e\u0431\u0435\u0440\u0435\u0442\u0441\u044f. \u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0435\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c. \u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0438\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c.<\/p>\n<pre><code class=\"cpp\">\u0438\u043c\u044f_\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b.\u0435\u0435_\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 = \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435;<\/code><\/pre>\n<p>\u0418 \u0442\u0430\u043a \u2014 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0438\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f. \u0412 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043a \u043a\u0430\u0436\u0434\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0435 \u0435\u0441\u0442\u044c \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0435, \u043a\u0430\u043a\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0432 \u043d\u0435\u0435 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0438\u0437 \u043a\u0430\u043a\u043e\u0433\u043e-\u043b\u0438\u0431\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430, \u0442\u043e \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0435\u0441\u0442\u044c \u0441\u043b\u043e\u0432\u043e <b> <a href=\"http:\/\/habrahabr.ru\/users\/ref\/\" class=\"user_link\">ref<\/a><\/b>. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043b\u043e\u0432\u0430, \u0441\u0442\u043e\u044f\u0449\u0435\u0433\u043e \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0433\u043e, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u0444\u0430\u0439\u043b\u0435 \u0432\u0441\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438. \u0412\u043e\u0437\u044c\u043c\u0435\u043c \u0432 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0435\u0440\u0432\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443.<\/p>\n<pre><code class=\"cpp\">uint16_t PORT_Pin;                     \/*!&lt; Specifies PORT pins to be configured.                                               This parameter is a mask of @ref PORT_pins_define values. *\/<\/code><\/pre>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u043e\u0438\u0441\u043a, \u043d\u0430\u0445\u043e\u0434\u0438\u043c <b>PORT_pins_define<\/b>. <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0412\u0438\u0434\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435.<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#define PORT_Pin_0                  0x0001U  \/*!&lt; Pin 0 selected *\/ #define PORT_Pin_1                  0x0002U  \/*!&lt; Pin 1 selected *\/ #define PORT_Pin_2                  0x0004U  \/*!&lt; Pin 2 selected *\/ #define PORT_Pin_3                  0x0008U  \/*!&lt; Pin 3 selected *\/ #define PORT_Pin_4                  0x0010U  \/*!&lt; Pin 4 selected *\/ #define PORT_Pin_5                  0x0020U  \/*!&lt; Pin 5 selected *\/ #define PORT_Pin_6                  0x0040U  \/*!&lt; Pin 6 selected *\/ #define PORT_Pin_7                  0x0080U  \/*!&lt; Pin 7 selected *\/ #define PORT_Pin_8                  0x0100U  \/*!&lt; Pin 8 selected *\/ #define PORT_Pin_9                  0x0200U  \/*!&lt; Pin 9 selected *\/ #define PORT_Pin_10                 0x0400U  \/*!&lt; Pin 10 selected *\/ #define PORT_Pin_11                 0x0800U  \/*!&lt; Pin 11 selected *\/ #define PORT_Pin_12                 0x1000U  \/*!&lt; Pin 12 selected *\/ #define PORT_Pin_13                 0x2000U  \/*!&lt; Pin 13 selected *\/ #define PORT_Pin_14                 0x4000U  \/*!&lt; Pin 14 selected *\/ #define PORT_Pin_15                 0x8000U  \/*!&lt; Pin 15 selected *\/ #define PORT_Pin_All                0xFFFFU  \/*!&lt; All pins selected *\/<\/code><\/pre>\n<\/div>\n<\/div>\n<p>\u0423 \u043d\u0430\u0441 PORTC \u0432\u044b\u0432\u043e\u0434 1. \u041f\u043e \u0438\u0434\u0435\u0438, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c <\/p>\n<pre><code class=\"cpp\">Led0PortC_structInit.PORT_Pin\t\t\t\t= PORT_Pin_1;<\/code><\/pre>\n<p> \u041d\u043e \u0443 \u043d\u0430\u0441 \u0435\u0449\u0435 \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0442\u0430\u043a\u043e\u0439 define.<\/p>\n<pre><code class=\"cpp\">\/\/ \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432.\t #define LED0\t\t\t\t\t\t(1&lt;&lt;0)\t\t\t\/\/ PORTC. #define LED1\t\t\t\t\t\t(1&lt;&lt;1)\t\t\t\/\/ PORTC.<\/code><\/pre>\n<p>\u042d\u0442\u043e \u0442\u0430\u043a\u0430\u044f \u0436\u0435 \u043c\u0430\u0441\u043a\u0430 \u043f\u043e\u0440\u0442\u0430, \u0447\u0442\u043e \u0438 \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438, \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c. \u041d\u043e \u043e\u043d\u0430 \u0434\u0430\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u044f\u0441\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c, \u0442\u0430\u043a \u0447\u0442\u043e \u044f \u0437\u0430\u043f\u0438\u0448\u0443 \u0435\u0435.<\/p>\n<pre><code class=\"cpp\">Led0PortC_structInit.PORT_Pin\t\t\t\t= LED1;\t\/\/ \u041f\u0438\u043d \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430.<\/code><\/pre>\n<\/div>\n<\/div>\n<\/li>\n<\/ol>\n<p>\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0435\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 SPL <b>PORT_Init<\/b>, \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u044f \u043f\u0440\u043e &quot;&#038;&quot; \u043f\u0435\u0440\u0435\u0434 \u0438\u043c\u0435\u043d\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b (\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443).<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u043b\u0443\u0447\u0438\u043c \u0433\u043e\u0442\u043e\u0432\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432\u0438\u0434\u0430.<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">void initPinPortCForLedSPL (void) { \tPORT_InitTypeDef Led0PortC_structInit; \/\/ \u041d\u0430 \u043f\u043e\u0440\u0442\u0443 C. \tRST_CLK_PCLKcmd(RST_CLK_PCLK_PORTC, ENABLE); \/\/ \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u0430 C. \t \tLed0PortC_structInit.PORT_Pin = LED1; \/\/ \u041f\u0438\u043d \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430. \tLed0PortC_structInit.PORT_FUNC = PORT_FUNC_PORT; \/\/ \u0412\u044b\u0432\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0442\u0430. \tLed0PortC_structInit.PORT_GFEN = PORT_GFEN_OFF; \/\/ \u0412\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d. \tLed0PortC_structInit.PORT_MODE = PORT_MODE_DIGITAL; \/\/ \u0412\u044b\u0432\u043e\u0434 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439. \tLed0PortC_structInit.PORT_OE = PORT_OE_OUT; \/\/ \u0412\u044b\u0432\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434. \tLed0PortC_structInit.PORT_PD = PORT_PD_DRIVER; \/\/ \u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440. \tLed0PortC_structInit.PORT_PD_SHM = PORT_PD_SHM_OFF; \/\/ \u0422\u0440\u0438\u0433\u0433\u0435\u0440 \u0428\u043c\u0438\u0442\u0442\u0430 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d. \tLed0PortC_structInit.PORT_PULL_DOWN = PORT_PULL_DOWN_OFF; \/\/ \u041f\u043e\u0434\u0442\u044f\u0436\u043a\u0430 \u0432 0 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430. \tLed0PortC_structInit.PORT_PULL_UP = PORT_PULL_UP_OFF; \/\/ \u041f\u043e\u0434\u0442\u044f\u0436\u043a\u0430 \u0432 1 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430.  \tLed0PortC_structInit.PORT_SPEED = PORT_SPEED_MAXFAST;\t \/\/ \u0420\u0430\u0431\u043e\u0442\u0430 \u0432\u044b\u0432\u043e\u0434\u0430 \u0441 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e.  \tPORT_Init(MDR_PORTC, &Led0PortC_structInit); \/\/ \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u0440\u0442. }<\/code><\/pre>\n<\/div>\n<\/div>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043b\u0430\u0432\u0438\u0448 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u043b\u0438\u0448\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0440\u0435\u0436\u0438\u043c \u0432\u044b\u0432\u043e\u0434\u0430 \u0432\u043c\u0435\u0441\u0442\u043e \u0432\u044b\u0445\u043e\u0434\u0430 \u2014 \u0432\u0445\u043e\u0434 (<i>PORT_OE_IN<\/i>), \u0430 \u0442\u0430\u043a \u0436\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 (<i>PORT_GFEN_ON<\/i>).<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u044b\u0432\u043e\u0434\u043e\u0432, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u043a \u043a\u043d\u043e\u043f\u043a\u0430\u043c.<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">void initPinForButtonSPL (void) { \t\/\/ \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0440\u0442\u043e\u0432. \tPORT_InitTypeDef buttonPortB_structInit; \/\/ \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u043b\u044f \u0438\u043d\u0438\u0446\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u0445\u043e\u0434\u043e\u0432 \u043a\u043d\u043e\u043f\u043e\u043a\u0438 \u043d\u0430 \u043f\u043e\u0440\u0442\u0443 C. \tPORT_InitTypeDef buttonPortC_structInit; \/\/ \u0412\u044b\u0445\u043e\u0434\u044b \u043d\u0430 \u043f\u043e\u0440\u0442\u0443 C. \tPORT_InitTypeDef buttonPortE_structInit; \/\/ \u041d\u0435 \u043f\u043e\u0440\u0442\u0443 E. \t \t\/\/ \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u043e\u0432. \tRST_CLK_PCLKcmd(RST_CLK_PCLK_PORTB, ENABLE); \/\/ \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u0430 B. \tRST_CLK_PCLKcmd(RST_CLK_PCLK_PORTC, ENABLE); \/\/ \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u0430 C. \tRST_CLK_PCLKcmd(RST_CLK_PCLK_PORTE, ENABLE); \/\/ \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u0430 E. \t \t\/\/ \u0417\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u0442\u0440\u043a\u0443\u0442\u0443\u0440\u044b \u043f\u043e\u0440\u0442\u043e\u0432. \tbuttonPortB_structInit.PORT_FUNC = PORT_FUNC_PORT; \/\/ \u0412\u044b\u0432\u043e\u0434\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0442\u0430. \tbuttonPortB_structInit.PORT_GFEN = PORT_GFEN_ON; \/\/ \u0412\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d \u043d\u0430 \u043e\u0431\u043e\u0438\u0445 \u0432\u044b\u0432\u043e\u0434\u0430\u0445. \tbuttonPortB_structInit.PORT_MODE = PORT_MODE_DIGITAL; \/\/ \u041e\u0431\u0430 \u0432\u044b\u0432\u043e\u0434\u0430 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0435. \tbuttonPortB_structInit.PORT_OE = PORT_OE_IN; \/\/ \u0412\u044b\u0432\u043e\u0434\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434. \tbuttonPortB_structInit.PORT_PD = PORT_PD_DRIVER; \/\/ \u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440. \tbuttonPortB_structInit.PORT_PD_SHM = PORT_PD_SHM_OFF; \/\/ \u0422\u0440\u0438\u0433\u0433\u0435\u0440 \u0428\u043c\u0438\u0442\u0442\u0430 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d. \tbuttonPortB_structInit.PORT_Pin = UP_MSK|RIGHT_MSK; \/\/ \u0412\u0441\u0435 \u0432\u044b\u0448\u0435\u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0434\u0432\u0443\u0445 \u0432\u044b\u0432\u043e\u0434\u043e\u0432. \tbuttonPortB_structInit.PORT_PULL_DOWN = PORT_PULL_DOWN_OFF; \/\/ \u041f\u043e\u0434\u0442\u044f\u0436\u043a\u0430 \u0432 0 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430. \tbuttonPortB_structInit.PORT_PULL_UP = PORT_PULL_UP_OFF; \/\/ \u041f\u043e\u0434\u0442\u044f\u0436\u043a\u0430 \u0432 1 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430.  \tbuttonPortB_structInit.PORT_SPEED = PORT_SPEED_MAXFAST; \/\/ \u0420\u0430\u0431\u043e\u0442\u0430 \u0432\u044b\u0432\u043e\u0434\u043e\u0432 \u0441 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e. \t \tbuttonPortC_structInit.PORT_FUNC = PORT_FUNC_PORT; \/\/ PORTC. \tbuttonPortC_structInit.PORT_GFEN = PORT_GFEN_ON;\t\t\t \tbuttonPortC_structInit.PORT_MODE = PORT_MODE_DIGITAL;\t \tbuttonPortC_structInit.PORT_OE = PORT_OE_IN;\t\t\t\t\t\t \tbuttonPortC_structInit.PORT_PD = PORT_PD_DRIVER;\t\t\t \tbuttonPortC_structInit.PORT_PD_SHM = PORT_PD_SHM_OFF;\t\t \tbuttonPortC_structInit.PORT_Pin = SELECT_MSK;\t\t\t\t\t\t \tbuttonPortC_structInit.PORT_PULL_DOWN = PORT_PULL_DOWN_OFF;\t\t \tbuttonPortC_structInit.PORT_PULL_UP \t= PORT_PULL_UP_OFF;\t\t\t \tbuttonPortC_structInit.PORT_SPEED = PORT_SPEED_MAXFAST;\t\t  \tbuttonPortE_structInit.PORT_FUNC = PORT_FUNC_PORT; \/\/ PORTE. \tbuttonPortE_structInit.PORT_GFEN = PORT_GFEN_ON;\t\t\t\t\t\t\t \tbuttonPortE_structInit.PORT_MODE = PORT_MODE_DIGITAL;\t\t \tbuttonPortE_structInit.PORT_OE = PORT_OE_IN;\t\t\t\t\t \tbuttonPortE_structInit.PORT_PD = PORT_PD_DRIVER;\t\t\t\t \tbuttonPortE_structInit.PORT_PD_SHM = PORT_PD_SHM_OFF;\t\t\t \tbuttonPortE_structInit.PORT_Pin = DOWN_MSK|LEFT_MSK;\t\t\t\t \tbuttonPortE_structInit.PORT_PULL_DOWN = PORT_PULL_DOWN_OFF;\t\t \tbuttonPortE_structInit.PORT_PULL_UP = PORT_PULL_UP_OFF;\t\t\t \tbuttonPortE_structInit.PORT_SPEED = PORT_SPEED_MAXFAST;\t\t  \t\/\/ \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u0440\u0442\u044b. \tPORT_Init(MDR_PORTB, &buttonPortB_structInit); \tPORT_Init(MDR_PORTC, &buttonPortC_structInit); \tPORT_Init(MDR_PORTE, &buttonPortE_structInit); }<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h4>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0428\u0418\u041c (PWM).<\/h4>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0441\u0430\u043c \u0442\u0430\u0439\u043c\u0435\u0440 \u2014 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u0432\u044b\u0432\u043e\u0434 \u043f\u043e\u0440\u0442\u0430 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0428\u0418\u041c \u0432 \u0440\u0435\u0436\u0438\u043c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043f\u043e\u0440\u0442 PORTA \u0438 \u0432\u044b\u0432\u043e\u0434 1.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0412\u044b\u0439\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435.<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTA, ENABLE); \/\/ \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u0430 A. \t \tPWMPortA_structInit.PORT_FUNC = PORT_FUNC_ALTER; \/\/ \u0412\u044b\u0432\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \tPWMPortA_structInit.PORT_GFEN = PORT_GFEN_OFF; \/\/ \u0412\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d. \tPWMPortA_structInit.PORT_MODE = PORT_MODE_DIGITAL; \/\/ \u0412\u044b\u0432\u043e\u0434 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439. \tPWMPortA_structInit.PORT_OE = PORT_OE_OUT; \/\/ \u0412\u044b\u0432\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434. \tPWMPortA_structInit.PORT_PD = PORT_PD_DRIVER; \/\/ \u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440. \tPWMPortA_structInit.PORT_PD_SHM = PORT_PD_SHM_OFF; \/\/ \u0422\u0440\u0438\u0433\u0433\u0435\u0440 \u0428\u043c\u0438\u0442\u0442\u0430 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d. \tPWMPortA_structInit.PORT_Pin = PORT_Pin_1; \/\/ \u041f\u0438\u043d \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430. \tPWMPortA_structInit.PORT_PULL_DOWN = PORT_PULL_DOWN_OFF; \/\/ \u041f\u043e\u0434\u0442\u044f\u0436\u043a\u0430 \u0432 0 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430. \tPWMPortA_structInit.PORT_PULL_UP = PORT_PULL_UP_OFF; \/\/ \u041f\u043e\u0434\u0442\u044f\u0436\u043a\u0430 \u0432 1 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430.  \tPWMPortA_structInit.PORT_SPEED = PORT_SPEED_MAXFAST;\t \/\/ \u0420\u0430\u0431\u043e\u0442\u0430 \u0432\u044b\u0432\u043e\u0434\u0430 \u0441 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e.  \tPORT_Init(MDR_PORTA, &PWMPortA_structInit); \/\/ \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u0440\u0442.<\/code><\/pre>\n<\/div>\n<\/div>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430. \u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u0430\u0442\u044c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 TIMER1. \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a \u0436\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <b>RST_CLK_PCLKcmd<\/b>, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u043d\u0435\u0435.<\/p>\n<pre><code class=\"cpp\">RST_CLK_PCLKcmd(RST_CLK_PCLK_TIMER1, ENABLE); \/\/ \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u0439\u043c\u0435\u0440\u0430 1.<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0441\u0442\u043e\u0438\u0442 \u044f\u0441\u043d\u043e \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e:<\/p>\n<ol>\n<li>\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0430\u0439\u043c\u0435\u0440.<\/li>\n<li>\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u0430\u043d\u0430\u043b \u0442\u0430\u0439\u043c\u0435\u0440\u0430.<\/li>\n<li>\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432\u044b\u0432\u043e\u0434 \u0442\u0430\u0439\u043c\u0435\u0440\u0430.<\/li>\n<li>\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u0430\u043a\u0442\u043e\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0441\u0435\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430.<\/li>\n<li>\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u0430\u0439\u043c\u0435\u0440.<\/li>\n<\/ol>\n<p>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0443\u043d\u043a\u0442\u0430 \u0432 SPL \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0430 \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u044b\u0445 \u0442\u0440\u0435\u0445 \u043f\u0443\u043d\u043a\u0442\u043e\u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0435\u0449\u0435 \u0438 \u0441\u0432\u043e\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u0412\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 <u>MDR32F9Qx_timer.h<\/u>. \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u0443\u043d\u043a\u0442\u0430. \u0414\u043b\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <b>TIMER_CntInit<\/b>.<\/p>\n<pre><code class=\"cpp\">void TIMER_CntInit(MDR_TIMER_TypeDef* TIMERx, const TIMER_CntInitTypeDef* TIMER_CntInitStruct);<\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u0434\u0432\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430.<\/p>\n<ul>\n<li><b>TIMERx<\/b> \u2014 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0434\u043b\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0430\u0439\u043c\u0435\u0440. \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u043d \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 MDR_TIMERX, \u0433\u0434\u0435 X \u2014 \u043d\u043e\u043c\u0435\u0440 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 MDR_TIMER1.<\/li>\n<li><b>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0442\u0438\u043f\u0430 TIMER_CntInitTypeDef<\/b> \u2014 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430.\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0412\u043e\u0442 \u0435\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435.<\/b><\/p>\n<div class=\"spoiler_text\">typedef struct {<\/p>\n<p>  #if defined(USE_MDR1986VE9x) \/* For Cortex M3 *\/<br \/>   uint16_t TIMER_IniCounter; \/*!&lt; Specifies the initial counter value.<br \/>   This parameter can be a number between 0x0000 and 0xFFFF. *\/<br \/>  #elif ((defined (USE_MDR1986VE3)) || (defined (USE_MDR1986VE1T)))<br \/>   uint32_t TIMER_IniCounter; \/*!&lt; Specifies the initial counter value.<br \/>   This parameter can be a number between 0x0000 and 0xFFFFFFFF. *\/<br \/>  #endif \/\/ #elif ((defined (USE_MDR1986VE3)) || (defined (USE_MDR1986VE1T)))<\/p>\n<p>  uint16_t TIMER_Prescaler; \/*!&lt; Specifies the prescaler value used to divide the TIMER clock.<br \/>   This parameter can be a number between 0x0000 and 0xFFFF.<br \/>   CLK = TIMER_CLK\/(TIMER_Prescaler + 1) *\/<\/p>\n<p>  #if defined(USE_MDR1986VE9x) \/* For Cortex M3 *\/<br \/>   uint16_t TIMER_Period; \/*!&lt; Specifies the period value to be loaded into the<br \/>   Auto-Reload Register (ARR) at the next update event.<br \/>   This parameter must be a number between 0x0000 and 0xFFFF. *\/<br \/>  #elif ((defined (USE_MDR1986VE3)) || (defined (USE_MDR1986VE1T))) \/* For Cortex M1 *\/<br \/>   uint32_t TIMER_Period; \/*!&lt; Specifies the period value to be loaded into the<br \/>   Auto-Reload Register (ARR) at the next update event.<br \/>   This parameter must be a number between 0x0000 and 0xFFFFFFFF. *\/<br \/>  #endif \/\/ #elif ((defined (USE_MDR1986VE3)) || (defined (USE_MDR1986VE1T))) \/* For Cortex M1 *\/<\/p>\n<p>  uint16_t TIMER_CounterMode; \/*!&lt; Specifies the counter mode.<br \/>   This parameter can be a value of  <a href=\"http:\/\/habrahabr.ru\/users\/ref\/\" class=\"user_link\">ref<\/a> TIMER_Counter_Mode *\/<\/p>\n<p>  uint16_t TIMER_CounterDirection; \/*!&lt; Specifies the counter direction.<br \/>   This parameter can be a value of  <a href=\"http:\/\/habrahabr.ru\/users\/ref\/\" class=\"user_link\">ref<\/a> TIMER_Counter_Direction *\/<\/p>\n<p>  uint16_t TIMER_EventSource; \/*!&lt; Specifies the Counter Event source.<br \/>   This parameter can be a value of  <a href=\"http:\/\/habrahabr.ru\/users\/ref\/\" class=\"user_link\">ref<\/a> TIMER_Event_Source *\/<\/p>\n<p>  uint16_t TIMER_FilterSampling; \/*!&lt; Specifies the filter sampling clock (FDTS).<br \/>   This parameter can be a value of  <a href=\"http:\/\/habrahabr.ru\/users\/ref\/\" class=\"user_link\">ref<\/a> TIMER_Filter_Sampling *\/<\/p>\n<p>  uint16_t TIMER_ARR_UpdateMode; \/*!&lt; Specifies the Auto-Reload Register (ARR) updating mode.<br \/>   This parameter can be a value of  <a href=\"http:\/\/habrahabr.ru\/users\/ref\/\" class=\"user_link\">ref<\/a> TIMER_ARR_Update_Mode *\/<\/p>\n<p>  uint16_t TIMER_ETR_FilterConf; \/*!&lt; Specifies the ETR Filter configuration.<br \/>   This parameter can be a value of  <a href=\"http:\/\/habrahabr.ru\/users\/ref\/\" class=\"user_link\">ref<\/a> TIMER_FilterConfiguration *\/<\/p>\n<p>  uint16_t TIMER_ETR_Prescaler; \/*!&lt; Specifies the ETR Prescaler configuration.<br \/>   This parameter can be a value of  <a href=\"http:\/\/habrahabr.ru\/users\/ref\/\" class=\"user_link\">ref<\/a> TIMER_ETR_Prescaler *\/<\/p>\n<p>  uint16_t TIMER_ETR_Polarity; \/*!&lt; Specifies the ETR Polarity configuration.<br \/>   This parameter can be a value of  <a href=\"http:\/\/habrahabr.ru\/users\/ref\/\" class=\"user_link\">ref<\/a> TIMER_ETR_Polarity *\/<\/p>\n<p>  uint16_t TIMER_BRK_Polarity; \/*!&lt; Specifies the BRK Polarity configuration.<br \/>   This parameter can be a value of  <a href=\"http:\/\/habrahabr.ru\/users\/ref\/\" class=\"user_link\">ref<\/a> TIMER_BRK_Polarity *\/<br \/>  } TIMER_CntInitTypeDef;<\/div>\n<\/div>\n<\/li>\n<\/ul>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0432 \u0432\u0441\u0435 \u043f\u043e\u043b\u044f \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0432 \u0442\u0430\u0439\u043c\u0435\u0440 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435.<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\"> TIMER_CntInitTypeDef timerPWM_structInit; \/\/ \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430 (\u0431\u0435\u0437 \u043a\u0430\u043d\u0430\u043b\u043e\u0432). \/\/ \u0417\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0442\u0430\u0439\u043c\u0435\u0440\u0430. timerPWM_structInit.TIMER_ARR_UpdateMode = TIMER_ARR_Update_Immediately; \/\/ \u0420\u0435\u0433\u0438\u0441\u0442\u0440 ARR \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. timerPWM_structInit.TIMER_BRK_Polarity = TIMER_BRKPolarity_NonInverted; \/\/ BRK \u0441\u0438\u0433\u043d\u0430\u043b \u043d\u0435 \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f (\u043d\u0430\u0441 \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043d\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f). timerPWM_structInit.TIMER_CounterDirection = TIMER_CntDir_Up; \/\/ \u0421\u0447\u0438\u0442\u0430\u0435\u043c &quot;\u0432\u0432\u0435\u0440\u0445&quot;. CNT \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f (CNT++).  timerPWM_structInit.TIMER_CounterMode = TIMER_CntMode_ClkFixedDir; \/\/ \u0421\u0447\u0438\u0442\u0430\u0435\u043c \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u0443, \u0432\u0432\u0435\u0440\u0445. timerPWM_structInit.TIMER_ETR_FilterConf = TIMER_Filter_1FF_at_TIMER_CLK; \/\/ \u0421\u0438\u0433\u043d\u0430\u043b \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d \u0432 1-\u043c \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0435 \u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 TIM_CLK (\u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e). timerPWM_structInit.TIMER_ETR_Polarity = TIMER_ETRPolarity_NonInverted; \/\/ ETR \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u043d\u0435 \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f (\u043c\u044b \u0435\u0433\u043e \u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c). timerPWM_structInit.TIMER_ETR_Prescaler = TIMER_ETR_Prescaler_None; \/\/ \u0427\u0430\u0441\u0442\u043e\u0442\u0430 ETR \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u043d\u0435 \u0434\u0435\u043b\u0438\u0442\u0441\u044f (ETR \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c.). timerPWM_structInit.TIMER_EventSource = TIMER_EvSrc_None; \/\/ \u0422\u0430\u0439\u043c\u0435\u0440 \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439. timerPWM_structInit.TIMER_FilterSampling = TIMER_FDTS_TIMER_CLK_div_1; \/\/ FDTS = TIMER_CLK. (\u0422\u0430\u043a \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c.). timerPWM_structInit.TIMER_IniCounter = 0; \/\/ \u0421\u0447\u0438\u0442\u0430\u0435\u043c \u0441 0. \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430. (CNT = 0.). timerPWM_structInit.TIMER_Period = PWM_speed; \/\/ \u0421\u0447\u0438\u0442\u0430\u0435\u043c \u0434\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (ARR = PWM_speed). timerPWM_structInit.TIMER_Prescaler = 32000 - 1;\/\/ \u0414\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430. PSG \u0440\u0435\u0433\u0438\u0441\u0442\u0440.  \t TIMER_CntInit(MDR_TIMER1, &timerPWM_structInit); \/\/ \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0430\u0439\u043c\u0435\u0440.<\/code><\/pre>\n<\/div>\n<\/div>\n<p>\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c \u0438\u0437 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \u043a \u043a\u043e\u0434\u0443 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u2014 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043f\u0443\u043d\u043a\u0442\u043e\u0432 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e (\u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c\u0438). \u041d\u043e \u043d\u0435 \u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u044d\u0442\u043e, \u0438\u0437 \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c.<br \/>  \u0414\u0430\u043b\u0435\u0435 \u043d\u0443\u0436\u043d\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043d\u0430\u043b \u0442\u0430\u0439\u043c\u0435\u0440\u0430. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 \u043f\u0435\u0440\u0432\u044b\u0439. \u0417\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0446\u0438\u044e \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <b>TIMER_ChnInit<\/b>.<\/p>\n<pre><code class=\"cpp\">void TIMER_ChnInit(MDR_TIMER_TypeDef* TIMERx, const TIMER_ChnInitTypeDef* TIMER_ChnInitStruct)<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u0438\u0434\u0435\u0442 \u0438\u043c\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430. \u041e\u043d\u043e \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043c \u0436\u0435, \u0447\u0442\u043e \u0438 \u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430. \u0410 \u0432\u043e\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0443\u0436\u0435 \u0442\u0438\u043f\u0430 <b>TIMER_ChnInitTypeDef<\/b>.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0412\u043e\u0442 \u0435\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435.<\/b><\/p>\n<div class=\"spoiler_text\">typedef struct<br \/>  {<br \/>   uint16_t TIMER_CH_Number; \/*!&lt; Specifies the TIMER Channel number to be configured.<br \/>   This parameter can be a value of  <a href=\"http:\/\/habrahabr.ru\/users\/ref\/\" class=\"user_link\">ref<\/a> TIMER_CH_Number *\/<\/p>\n<p>  uint16_t TIMER_CH_Mode; \/*!&lt; Specifies the TIMER Channel mode.<br \/>   This parameter can be a value of  <a href=\"http:\/\/habrahabr.ru\/users\/ref\/\" class=\"user_link\">ref<\/a> TIMER_CH_Mode *\/<\/p>\n<p>  uint16_t TIMER_CH_ETR_Ena; \/*!&lt; Enables or disables ETR.<br \/>   This parameter can be a value of FunctionalState *\/<\/p>\n<p>  uint16_t TIMER_CH_ETR_Reset; \/*!&lt; Enables or disables ETR Reset.<br \/>   This parameter can be a value of  <a href=\"http:\/\/habrahabr.ru\/users\/ref\/\" class=\"user_link\">ref<\/a> TIMER_CH_ETR_Reset *\/<\/p>\n<p>  uint16_t TIMER_CH_BRK_Reset; \/*!&lt; Enables or disables BRK Reset.<br \/>   This parameter can be a value of  <a href=\"http:\/\/habrahabr.ru\/users\/ref\/\" class=\"user_link\">ref<\/a> TIMER_CH_BRK_Reset *\/<\/p>\n<p>  uint16_t TIMER_CH_REF_Format; \/*!&lt; Specifies the REF signal format.<br \/>   This parameter can be a value of  <a href=\"http:\/\/habrahabr.ru\/users\/ref\/\" class=\"user_link\">ref<\/a> TIMER_CH_REF_Format *\/<\/p>\n<p>  uint16_t TIMER_CH_Prescaler; \/*!&lt; Specifies the TIMER Channel Prescaler configuration.<br \/>   This parameter can be a value of  <a href=\"http:\/\/habrahabr.ru\/users\/ref\/\" class=\"user_link\">ref<\/a> TIMER_CH_Prescaler *\/<\/p>\n<p>  uint16_t TIMER_CH_EventSource; \/*!&lt; Specifies the Channel Event source.<br \/>   This parameter can be a value of  <a href=\"http:\/\/habrahabr.ru\/users\/ref\/\" class=\"user_link\">ref<\/a> TIMER_CH_EventSource *\/<\/p>\n<p>  uint16_t TIMER_CH_FilterConf; \/*!&lt; Specifies the TIMER Channel Filter configuration.<br \/>   This parameter can be a value of  <a href=\"http:\/\/habrahabr.ru\/users\/ref\/\" class=\"user_link\">ref<\/a> TIMER_FilterConfiguration *\/<\/p>\n<p>  uint16_t TIMER_CH_CCR_UpdateMode; \/*!&lt; Specifies the TIMER CCR, CCR1 update mode.<br \/>   This parameter can be a value of  <a href=\"http:\/\/habrahabr.ru\/users\/ref\/\" class=\"user_link\">ref<\/a> TIMER_CH_CCR_Update_Mode *\/<\/p>\n<p>  uint16_t TIMER_CH_CCR1_Ena; \/*!&lt; Enables or disables the CCR1 register.<br \/>   This parameter can be a value of FunctionalState *\/<\/p>\n<p>  uint16_t TIMER_CH_CCR1_EventSource; \/*!&lt; Specifies the Channel CCR1 Event source.<br \/>   This parameter can be a value of  <a href=\"http:\/\/habrahabr.ru\/users\/ref\/\" class=\"user_link\">ref<\/a> TIMER_CH_CCR1_EventSource *\/<br \/>  }TIMER_ChnInitTypeDef;<\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0422\u0430\u043a \u0436\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c.<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">TIMER_ChnInitTypeDef timerPWM_channelStructInit; \/\/ \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u0430\u043d\u0430\u043b\u0430 \u0428\u0418\u041c. \/\/ \u0417\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 PWM \u043a\u0430\u043d\u0430\u043b\u0430. timerPWM_channelStructInit.TIMER_CH_BRK_Reset = TIMER_CH_BRK_RESET_Disable; \/\/ \u0421\u0431\u0440\u043e\u0441 \u043a\u0430\u043d\u0430\u043b\u0430 BRK \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f (BRK \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c). timerPWM_channelStructInit.TIMER_CH_CCR1_Ena =\tDISABLE; \/\/ CCR1 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c. timerPWM_channelStructInit.TIMER_CH_CCR1_EventSource =\tTIMER_CH_CCR1EvSrc_PE; \/\/ \u0412\u044b\u0431\u043e\u0440 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u043e \u0432\u0445\u043e\u0434\u043d\u043e\u043c\u0443 \u043a\u0430\u043d\u0430\u043b\u0443 \u0434\u043b\u044f CAP1: \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0440\u043e\u043d\u0442 \u043f\u043e Chi. (\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043c\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c). timerPWM_channelStructInit.TIMER_CH_CCR_UpdateMode = TIMER_CH_CCR_Update_Immediately; \/\/ \u0420\u0435\u0433\u0438\u0441\u0442\u0440 CCR \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u0435 \u0432\u0440\u0435\u043c\u044f (CCR \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c). timerPWM_channelStructInit.TIMER_CH_ETR_Ena = DISABLE; \/\/ ETR \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f. timerPWM_channelStructInit.TIMER_CH_ETR_Reset = TIMER_CH_ETR_RESET_Disable; \/\/ \u0421\u0431\u0440\u043e\u0441 ETR \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f. timerPWM_channelStructInit.TIMER_CH_EventSource = TIMER_CH_EvSrc_PE;\t\t\t\t\t\t\t\t\/\/ \u0412\u044b\u0431\u043e\u0440 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u043e \u0432\u0445\u043e\u0434\u043d\u043e\u043c\u0443 \u043a\u0430\u043d\u0430\u043b\u0443: \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0440\u043e\u043d\u0442. (\u0422\u0430\u043a \u0436\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f). timerPWM_channelStructInit.TIMER_CH_FilterConf = TIMER_Filter_1FF_at_TIMER_CLK; \/\/ \u0412\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u043e\u0442 TIMER_CLK \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u043c. timerPWM_channelStructInit.TIMER_CH_Mode = TIMER_CH_MODE_PWM; \/\/ \u041a\u0430\u043d\u0430\u043b \u0432 \u0428\u0418\u041c \u0440\u0435\u0436\u0438\u043c\u0435. timerPWM_channelStructInit.TIMER_CH_Number = TIMER_CHANNEL1; \/\/ \u041f\u0435\u0440\u0432\u044b\u0439 \u043a\u0430\u043d\u0430\u043b.  timerPWM_channelStructInit.TIMER_CH_Prescaler = TIMER_CH_Prescaler_None; \/\/ \u0412 \u043a\u0430\u043d\u0430\u043b\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043d\u0435 \u0434\u0435\u043b\u0438\u0442\u0441\u044f. timerPWM_channelStructInit.TIMER_CH_REF_Format = TIMER_CH_REF_Format3; \/\/ \u0421\u0438\u0433\u043d\u0430\u043b REF \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 CNT == ARR. \t TIMER_ChnInit(MDR_TIMER1, &timerPWM_channelStructInit); \/\/ \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043a\u0430\u043d\u0430\u043b.<\/code><\/pre>\n<\/div>\n<\/div>\n<p>\u0417\u0430\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u044b \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0441\u0438\u0433\u043d\u0430\u043b \u043d\u0430 REF \u0434\u043b\u044f \u0428\u0418\u041c.<br \/>  \u0414\u0430\u043b\u0435\u0435 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u0430\u043d\u0430\u043b \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f <b>TIMER_ChnOutInit<\/b>.<\/p>\n<pre><code class=\"cpp\">void TIMER_ChnOutInit(MDR_TIMER_TypeDef* TIMERx, const TIMER_ChnOutInitTypeDef* TIMER_ChnOutInitStruct);<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u0442\u0430\u043a \u0436\u0435 \u0438\u0434\u0435\u0442 \u0438\u043c\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430. \u0412\u0442\u043e\u0440\u043e\u0439 \u2014 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 <b>TIMER_ChnOutInitStruct<\/b>.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0415\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435.<\/b><\/p>\n<div class=\"spoiler_text\">typedef struct<br \/>  {<br \/>   uint16_t TIMER_CH_Number; \/*!&lt; Specifies the TIMER Channel number to be configured.<br \/>   This parameter can be a value of  <a href=\"http:\/\/habrahabr.ru\/users\/ref\/\" class=\"user_link\">ref<\/a> TIMER_CH_Number *\/<\/p>\n<p>  uint16_t TIMER_CH_DirOut_Polarity; \/*!&lt; Specifies the TIMER CHx output polarity.<br \/>   This parameter can be a value of  <a href=\"http:\/\/habrahabr.ru\/users\/ref\/\" class=\"user_link\">ref<\/a> TIMER_CH_OUT_Polarity *\/<\/p>\n<p>  uint16_t TIMER_CH_DirOut_Source; \/*!&lt; Specifies the TIMER CHx output source.<br \/>   This parameter can be a value of  <a href=\"http:\/\/habrahabr.ru\/users\/ref\/\" class=\"user_link\">ref<\/a> TIMER_CH_OUT_Source *\/<\/p>\n<p>  uint16_t TIMER_CH_DirOut_Mode; \/*!&lt; Specifies the TIMER CHx output enable source.<br \/>   This parameter can be a value of  <a href=\"http:\/\/habrahabr.ru\/users\/ref\/\" class=\"user_link\">ref<\/a> TIMER_CH_OUT_Mode *\/<\/p>\n<p>  uint16_t TIMER_CH_NegOut_Polarity; \/*!&lt; Enables or disables the TIMER CHxN output inversion.<br \/>   This parameter can be a value of  <a href=\"http:\/\/habrahabr.ru\/users\/ref\/\" class=\"user_link\">ref<\/a> TIMER_CH_OUT_Polarity *\/<\/p>\n<p>  uint16_t TIMER_CH_NegOut_Source; \/*!&lt; Specifies the TIMER CHxN output source.<br \/>   This parameter can be a value of  <a href=\"http:\/\/habrahabr.ru\/users\/ref\/\" class=\"user_link\">ref<\/a> TIMER_CH_OUT_Source *\/<\/p>\n<p>  uint16_t TIMER_CH_NegOut_Mode; \/*!&lt; Specifies the TIMER CHxN output enable source.<br \/>   This parameter can be a value of  <a href=\"http:\/\/habrahabr.ru\/users\/ref\/\" class=\"user_link\">ref<\/a> TIMER_CH_OUT_Mode *\/<\/p>\n<p>  uint16_t TIMER_CH_DTG_MainPrescaler; \/*!&lt; Specifies the main prescaler of TIMER DTG.<br \/>   This parameter can be a number between 0x0000 and 0x00FF.<br \/>   Delay DTGdel = TIMER_CH_DTG_MainPrescaler*(TIMER_CH_DTG_AuxPrescaler + 1) clocks. *\/<\/p>\n<p>  uint16_t TIMER_CH_DTG_AuxPrescaler; \/*!&lt; Specifies the auxiliary prescaler of TIMER DTG.<br \/>   This parameter can be a number between 0x0000 and 0x000F.<br \/>   Delay DTGdel = TIMER_CH_DTG_MainPrescaler*(TIMER_CH_DTG_AuxPrescaler + 1) clocks. *\/<\/p>\n<p>  uint16_t TIMER_CH_DTG_ClockSource; \/*!&lt; Specifies the TIMER DTG clock source.<br \/>   This parameter can be a value of  <a href=\"http:\/\/habrahabr.ru\/users\/ref\/\" class=\"user_link\">ref<\/a> TIMER_CH_DTG_Clock_Source *\/<br \/>  }TIMER_ChnOutInitTypeDef;<\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u043c \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434.<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">TIMER_ChnOutInitTypeDef timerPWM_channelOUTPWMStructInit; \/\/ \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0432\u044b\u0445\u043e\u0434\u0430 \u043a\u0430\u043d\u0430\u043b\u0430 \u0428\u0418\u041c. \/\/ \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u044b\u0445\u043e\u0434\u0430. timerPWM_channelOUTPWMStructInit.TIMER_CH_DirOut_Mode = TIMER_CH_OutMode_Output; \/\/ \u0412\u0441\u0435\u0433\u0434\u0430 \u0432\u044b\u0445\u043e\u0434. timerPWM_channelOUTPWMStructInit.TIMER_CH_DirOut_Polarity = TIMER_CHOPolarity_NonInverted; \/\/ \u041d\u0435\u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439. timerPWM_channelOUTPWMStructInit.TIMER_CH_DirOut_Source = TIMER_CH_OutSrc_REF; \/\/ \u041d\u0430 \u0432\u044b\u0445\u043e\u0434 REF \u0441\u0438\u0433\u043d\u0430\u043b. timerPWM_channelOUTPWMStructInit.TIMER_CH_DTG_AuxPrescaler = 0; \/\/ \u0414\u0435\u043b\u0438\u0442\u0435\u043b\u044f \u043d\u0435 \u0441\u0442\u043e\u0438\u0442. timerPWM_channelOUTPWMStructInit.TIMER_CH_DTG_ClockSource = TIMER_CH_DTG_ClkSrc_TIMER_CLK; \/\/ \u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0434\u043b\u044f DTG - TIMER_CLK. \u041d\u043e DTG \u043c\u044b \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c. timerPWM_channelOUTPWMStructInit.TIMER_CH_DTG_MainPrescaler = 0; \/\/ \u0414\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0430 DTG. timerPWM_channelOUTPWMStructInit.TIMER_CH_NegOut_Mode = TIMER_CH_OutMode_Input; \/\/ \u0418\u043d\u0432\u0435\u0440\u0442\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u043d\u0430 \u0432\u0445\u043e\u0434. \u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0435\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0431\u0435\u0440\u0435\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0442.\u043a. \u043e\u043d\u0438 \u043d\u0435 \u0432\u0430\u0436\u043d\u044b. timerPWM_channelOUTPWMStructInit.TIMER_CH_NegOut_Polarity = TIMER_CHOPolarity_NonInverted; \/\/ \u0411\u0435\u0437 \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u043d\u0430\u043b\u0430. timerPWM_channelOUTPWMStructInit.TIMER_CH_NegOut_Source = TIMER_CH_DTG_ClkSrc_TIMER_CLK; \/\/ \u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0434\u043b\u044f DTG - TIMER_CLK. timerPWM_channelOUTPWMStructInit.TIMER_CH_Number = TIMER_CHANNEL1; \/\/ \u041f\u0435\u0440\u0432\u044b\u0439 \u043a\u0430\u043d\u0430\u043b. \t TIMER_ChnOutInit(MDR_TIMER1, &timerPWM_channelOUTPWMStructInit); \/\/ \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043a\u0430\u043d\u0430\u043b \u043d\u0430 \u0432\u044b\u0445\u043e\u0434.<\/code><\/pre>\n<\/div>\n<\/div>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u0430\u0442\u044c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u0430\u0439\u043c\u0435\u0440 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0433\u043e. \u0414\u043b\u044f \u043f\u043e\u0434\u0430\u0447\u0438 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 (\u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e\u0442, \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440 \u0432\u0435\u0434\u0435\u0442 \u0441\u0447\u0435\u0442) \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f <b>TIMER_BRGInit<\/b>.<\/p>\n<pre><code class=\"cpp\">void TIMER_BRGInit(MDR_TIMER_TypeDef* TIMERx, uint32_t TIMER_BRG);<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u0438\u043c\u044f \u0442\u0430\u0439\u043c\u0435\u0440\u0430, \u0432\u0442\u043e\u0440\u043e\u0439 \u2014 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c. \u0414\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438 \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 PSG \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 (\u043f\u043e \u0441\u0443\u0442\u0438 \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043b\u0438\u0448\u044c \u043f\u0438\u0448\u0435\u0442 \u043d\u0430\u0448 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0432 PSG&#8230;). \u0422\u0430\u043a \u0436\u0435 \u043e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u044d\u0442\u0430 \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u043f\u043e\u0434\u0430\u0447\u0443 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u0442\u0430\u0439\u043c\u0435\u0440 \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u041d\u0443 \u0430 \u0437\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <b>TIMER_Cmd<\/b>.<\/p>\n<pre><code class=\"cpp\">void TIMER_Cmd(MDR_TIMER_TypeDef* TIMERx, FunctionalState NewState)<\/code><\/pre>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u2014 \u0438\u043c\u044f \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0438 \u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <i>ENABLE\/DISABLE<\/i>. <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e \u0438\u0442\u043e\u0433\u0443 \u0432\u0441\u0435\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435.<\/b><\/p>\n<div class=\"spoiler_text\">\/\/ \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0428\u0418\u041c \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 SPL.<br \/>  void initTimerPWMledSPL (uint32_t PWM_speed)<br \/>  {<br \/>   PORT_InitTypeDef PWMPortA_structInit; \/\/ \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u043b\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u044b\u0432\u043e\u0434\u0430 \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0428\u0418\u041c.<br \/>   TIMER_CntInitTypeDef timerPWM_structInit; \/\/ \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430 (\u0431\u0435\u0437 \u043a\u0430\u043d\u0430\u043b\u043e\u0432).<br \/>   TIMER_ChnInitTypeDef timerPWM_channelStructInit; \/\/ \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u0430\u043d\u0430\u043b\u0430 \u0428\u0418\u041c.<br \/>   TIMER_ChnOutInitTypeDef timerPWM_channelOUTPWMStructInit; \/\/ \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0432\u044b\u0445\u043e\u0434\u0430 \u043a\u0430\u043d\u0430\u043b\u0430 \u0428\u0418\u041c.<\/p>\n<p>   RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTA, ENABLE); \/\/ \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u0430 A.<br \/>   RST_CLK_PCLKcmd(RST_CLK_PCLK_TIMER1, ENABLE); \/\/ \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u0439\u043c\u0435\u0440\u0430 1.<\/p>\n<p>   PWMPortA_structInit.PORT_FUNC = PORT_FUNC_ALTER; \/\/ \u0412\u044b\u0432\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<br \/>   PWMPortA_structInit.PORT_GFEN = PORT_GFEN_OFF; \/\/ \u0412\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d.<br \/>   PWMPortA_structInit.PORT_MODE = PORT_MODE_DIGITAL; \/\/ \u0412\u044b\u0432\u043e\u0434 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439.<br \/>   PWMPortA_structInit.PORT_OE = PORT_OE_OUT; \/\/ \u0412\u044b\u0432\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434.<br \/>   PWMPortA_structInit.PORT_PD = PORT_PD_DRIVER; \/\/ \u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440.<br \/>   PWMPortA_structInit.PORT_PD_SHM = PORT_PD_SHM_OFF; \/\/ \u0422\u0440\u0438\u0433\u0433\u0435\u0440 \u0428\u043c\u0438\u0442\u0442\u0430 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d.<br \/>   PWMPortA_structInit.PORT_Pin = PORT_Pin_1; \/\/ \u041f\u0438\u043d \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430.<br \/>   PWMPortA_structInit.PORT_PULL_DOWN = PORT_PULL_DOWN_OFF; \/\/ \u041f\u043e\u0434\u0442\u044f\u0436\u043a\u0430 \u0432 0 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430.<br \/>   PWMPortA_structInit.PORT_PULL_UP = PORT_PULL_UP_OFF; \/\/ \u041f\u043e\u0434\u0442\u044f\u0436\u043a\u0430 \u0432 1 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430. <br \/>   PWMPortA_structInit.PORT_SPEED = PORT_SPEED_MAXFAST; \/\/ \u0420\u0430\u0431\u043e\u0442\u0430 \u0432\u044b\u0432\u043e\u0434\u0430 \u0441 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e.<\/p>\n<p>  PORT_Init(MDR_PORTA, &#038;PWMPortA_structInit); \/\/ \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u0440\u0442.<\/p>\n<p>  \/\/ \u0417\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0442\u0430\u0439\u043c\u0435\u0440\u0430.<br \/>   timerPWM_structInit.TIMER_ARR_UpdateMode = TIMER_ARR_Update_Immediately; \/\/ \u0420\u0435\u0433\u0438\u0441\u0442\u0440 ARR \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u0435 \u0432\u0440\u0435\u043c\u044f.<br \/>   timerPWM_structInit.TIMER_BRK_Polarity = TIMER_BRKPolarity_NonInverted; \/\/ BRK \u0441\u0438\u0433\u043d\u0430\u043b \u043d\u0435 \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f (\u043d\u0430\u0441 \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043d\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f).<br \/>   timerPWM_structInit.TIMER_CounterDirection = TIMER_CntDir_Up; \/\/ \u0421\u0447\u0438\u0442\u0430\u0435\u043c \u00ab\u0432\u0432\u0435\u0440\u0445\u00bb. CNT \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f (CNT++). <br \/>   timerPWM_structInit.TIMER_CounterMode = TIMER_CntMode_ClkFixedDir; \/\/ \u0421\u0447\u0438\u0442\u0430\u0435\u043c \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u0443, \u0432\u0432\u0435\u0440\u0445.<br \/>   timerPWM_structInit.TIMER_ETR_FilterConf = TIMER_Filter_1FF_at_TIMER_CLK; \/\/ \u0421\u0438\u0433\u043d\u0430\u043b \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d \u0432 1-\u043c \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0435 \u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 TIM_CLK (\u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e).<br \/>   timerPWM_structInit.TIMER_ETR_Polarity = TIMER_ETRPolarity_NonInverted; \/\/ ETR \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u043d\u0435 \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f (\u043c\u044b \u0435\u0433\u043e \u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c).<br \/>   timerPWM_structInit.TIMER_ETR_Prescaler = TIMER_ETR_Prescaler_None; \/\/ \u0427\u0430\u0441\u0442\u043e\u0442\u0430 ETR \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u043d\u0435 \u0434\u0435\u043b\u0438\u0442\u0441\u044f (ETR \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c.).<br \/>   timerPWM_structInit.TIMER_EventSource = TIMER_EvSrc_None; \/\/ \u0422\u0430\u0439\u043c\u0435\u0440 \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439.<br \/>   timerPWM_structInit.TIMER_FilterSampling = TIMER_FDTS_TIMER_CLK_div_1; \/\/ FDTS = TIMER_CLK. (\u0422\u0430\u043a \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c.).<br \/>   timerPWM_structInit.TIMER_IniCounter = 0; \/\/ \u0421\u0447\u0438\u0442\u0430\u0435\u043c \u0441 0. \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430. (CNT = 0.).<br \/>   timerPWM_structInit.TIMER_Period = PWM_speed; \/\/ \u0421\u0447\u0438\u0442\u0430\u0435\u043c \u0434\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (ARR = PWM_speed).<br \/>   timerPWM_structInit.TIMER_Prescaler = 32000 \u2014 1; \/\/ \u0414\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430. PSG \u0440\u0435\u0433\u0438\u0441\u0442\u0440. <\/p>\n<p>   TIMER_CntInit(MDR_TIMER1, &#038;timerPWM_structInit); \/\/ \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0430\u0439\u043c\u0435\u0440.<\/p>\n<p>   \/\/ \u0417\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 PWM \u043a\u0430\u043d\u0430\u043b\u0430.<br \/>   timerPWM_channelStructInit.TIMER_CH_BRK_Reset = TIMER_CH_BRK_RESET_Disable; \/\/ \u0421\u0431\u0440\u043e\u0441 \u043a\u0430\u043d\u0430\u043b\u0430 BRK \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f (BRK \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c).<br \/>   timerPWM_channelStructInit.TIMER_CH_CCR1_Ena = DISABLE; \/\/ CCR1 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c.<br \/>   timerPWM_channelStructInit.TIMER_CH_CCR1_EventSource = TIMER_CH_CCR1EvSrc_PE; \/\/ \u0412\u044b\u0431\u043e\u0440 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u043e \u0432\u0445\u043e\u0434\u043d\u043e\u043c\u0443 \u043a\u0430\u043d\u0430\u043b\u0443 \u0434\u043b\u044f CAP1: \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0440\u043e\u043d\u0442 \u043f\u043e Chi. (\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043c\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c).<br \/>   timerPWM_channelStructInit.TIMER_CH_CCR_UpdateMode = TIMER_CH_CCR_Update_Immediately; \/\/ \u0420\u0435\u0433\u0438\u0441\u0442\u0440 CCR \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u0435 \u0432\u0440\u0435\u043c\u044f (CCR \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c).<br \/>   timerPWM_channelStructInit.TIMER_CH_ETR_Ena = DISABLE; \/\/ ETR \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f.<br \/>   timerPWM_channelStructInit.TIMER_CH_ETR_Reset = TIMER_CH_ETR_RESET_Disable; \/\/ \u0421\u0431\u0440\u043e\u0441 ETR \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f.<br \/>   timerPWM_channelStructInit.TIMER_CH_EventSource = TIMER_CH_EvSrc_PE; \/\/ \u0412\u044b\u0431\u043e\u0440 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u043e \u0432\u0445\u043e\u0434\u043d\u043e\u043c\u0443 \u043a\u0430\u043d\u0430\u043b\u0443: \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0440\u043e\u043d\u0442. (\u0422\u0430\u043a \u0436\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f).<br \/>   timerPWM_channelStructInit.TIMER_CH_FilterConf = TIMER_Filter_1FF_at_TIMER_CLK; \/\/ \u0412\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u043e\u0442 TIMER_CLK \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u043c.<br \/>   timerPWM_channelStructInit.TIMER_CH_Mode = TIMER_CH_MODE_PWM; \/\/ \u041a\u0430\u043d\u0430\u043b \u0432 \u0428\u0418\u041c \u0440\u0435\u0436\u0438\u043c\u0435.<br \/>   timerPWM_channelStructInit.TIMER_CH_Number = TIMER_CHANNEL1; \/\/ \u041f\u0435\u0440\u0432\u044b\u0439 \u043a\u0430\u043d\u0430\u043b. <br \/>   timerPWM_channelStructInit.TIMER_CH_Prescaler = TIMER_CH_Prescaler_None; \/\/ \u0412 \u043a\u0430\u043d\u0430\u043b\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043d\u0435 \u0434\u0435\u043b\u0438\u0442\u0441\u044f.<br \/>   timerPWM_channelStructInit.TIMER_CH_REF_Format = TIMER_CH_REF_Format3; \/\/ \u0421\u0438\u0433\u043d\u0430\u043b REF \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 CNT == ARR.<\/p>\n<p>   TIMER_ChnInit(MDR_TIMER1, &#038;timerPWM_channelStructInit); \/\/ \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043a\u0430\u043d\u0430\u043b.<\/p>\n<p>   \/\/ \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u044b\u0445\u043e\u0434\u0430.<br \/>   timerPWM_channelOUTPWMStructInit.TIMER_CH_DirOut_Mode = TIMER_CH_OutMode_Output; \/\/ \u0412\u0441\u0435\u0433\u0434\u0430 \u0432\u044b\u0445\u043e\u0434.<br \/>   timerPWM_channelOUTPWMStructInit.TIMER_CH_DirOut_Polarity = TIMER_CHOPolarity_NonInverted; \/\/ \u041d\u0435 \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439.<br \/>   timerPWM_channelOUTPWMStructInit.TIMER_CH_DirOut_Source = TIMER_CH_OutSrc_REF; \/\/ \u041d\u0430 \u0432\u044b\u0445\u043e\u0434 REF \u0441\u0438\u0433\u043d\u0430\u043b.<br \/>   timerPWM_channelOUTPWMStructInit.TIMER_CH_DTG_AuxPrescaler = 0; \/\/ \u0414\u0435\u043b\u0438\u0442\u0435\u043b\u044f \u043d\u0435 \u0441\u0442\u043e\u0438\u0442.<br \/>   timerPWM_channelOUTPWMStructInit.TIMER_CH_DTG_ClockSource = TIMER_CH_DTG_ClkSrc_TIMER_CLK; \/\/ \u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0434\u043b\u044f DTG \u2014 TIMER_CLK. \u041d\u043e DTG \u043c\u044b \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c.<br \/>   timerPWM_channelOUTPWMStructInit.TIMER_CH_DTG_MainPrescaler = 0; \/\/ \u0414\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0430 DTG.<br \/>   timerPWM_channelOUTPWMStructInit.TIMER_CH_NegOut_Mode = TIMER_CH_OutMode_Input; \/\/ \u0418\u043d\u0432\u0435\u0440\u0442\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u043d\u0430 \u0432\u0445\u043e\u0434. \u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0435\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0431\u0435\u0440\u0435\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0442.\u043a. \u043e\u043d\u0438 \u043d\u0435 \u0432\u0430\u0436\u043d\u044b.<br \/>   timerPWM_channelOUTPWMStructInit.TIMER_CH_NegOut_Polarity = TIMER_CHOPolarity_NonInverted;\/\/ \u0411\u0435\u0437 \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u043d\u0430\u043b\u0430.<br \/>   timerPWM_channelOUTPWMStructInit.TIMER_CH_NegOut_Source = TIMER_CH_DTG_ClkSrc_TIMER_CLK; \/\/ \u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0434\u043b\u044f DTG \u2014 TIMER_CLK.<br \/>   timerPWM_channelOUTPWMStructInit.TIMER_CH_Number = TIMER_CHANNEL1; \/\/ \u041f\u0435\u0440\u0432\u044b\u0439 \u043a\u0430\u043d\u0430\u043b.<\/p>\n<p>   TIMER_ChnOutInit(MDR_TIMER1, &#038;timerPWM_channelOUTPWMStructInit); \/\/ \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043a\u0430\u043d\u0430\u043b \u043d\u0430 \u0432\u044b\u0445\u043e\u0434.<\/p>\n<p>   TIMER_BRGInit(MDR_TIMER1, TIMER_HCLKdiv1); \/\/ \u041f\u043e\u0434\u0430\u0435\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0434\u043b\u044f \u0441\u0447\u0435\u0442\u0430 (\u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0431\u0435\u0437 \u043f\u0440\u0435\u0434\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f). \/\/ \u0412 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u044b\u0431\u043e\u0440 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f (\u0443 \u043d\u0430\u0441 \u00ab1\u00bb) \u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0430\u0447\u0438 \u0442\u0430\u043a\u0442\u0430.<br \/>  TIMER_Cmd(MDR_TIMER1, ENABLE); \/\/ \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u0430\u0439\u043c\u0435\u0440.<br \/>  }<\/div>\n<\/div>\n<p>  <\/p>\n<h4>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 (IRQ)<\/h4>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u0430\u0439\u043c\u0435\u0440, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u043e\u043f\u0440\u043e\u0441\u0430 \u043a\u043b\u0430\u0432\u0438\u0448. \u0417\u0434\u0435\u0441\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u0430\u0439\u043c\u0435\u0440 \u043b\u0438\u0448\u044c \u043f\u043e \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435. \u0422\u0430\u043a \u043a\u0430\u043a \u043a\u0430\u043d\u0430\u043b\u044b \u0438 \u0432\u044b\u0445\u043e\u0434\u044b \u043c\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c. \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0443 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u044f\u0447\u0435\u0439\u043a\u0438 <i>TIMER_EventSource<\/i>. \u0412 \u043d\u0435\u0439 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u043f\u043e \u043a\u0430\u043a\u043e\u043c\u0443 \u0441\u043e\u0431\u044b\u0442\u0438\u044e \u0443 \u043d\u0430\u0441 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435. \u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 CNT == ARR. \u0415\u0433\u043e \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c. <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0410 \u0432\u043e\u043e\u0431\u0449\u0435, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b.<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#define TIMER_EvSrc_None                      (((uint32_t)0x0) &lt;&lt; TIMER_CNTRL_EVENT_SEL_Pos)  \/*!&lt; No events. *\/ #define TIMER_EvSrc_TM1                       (((uint32_t)0x1) &lt;&lt; TIMER_CNTRL_EVENT_SEL_Pos)  \/*!&lt; Selects TIMER1 (CNT == ARR) event. *\/ #define TIMER_EvSrc_TM2                       (((uint32_t)0x2) &lt;&lt; TIMER_CNTRL_EVENT_SEL_Pos)  \/*!&lt; Selects TIMER2 (CNT == ARR) event. *\/ #define TIMER_EvSrc_TM3                       (((uint32_t)0x3) &lt;&lt; TIMER_CNTRL_EVENT_SEL_Pos)  \/*!&lt; Selects TIMER3 (CNT == ARR) event. *\/ #define TIMER_EvSrc_CH1                       (((uint32_t)0x4) &lt;&lt; TIMER_CNTRL_EVENT_SEL_Pos)  \/*!&lt; Selects Channel 1 event. *\/ #define TIMER_EvSrc_CH2                       (((uint32_t)0x5) &lt;&lt; TIMER_CNTRL_EVENT_SEL_Pos)  \/*!&lt; Selects Channel 2 event. *\/ #define TIMER_EvSrc_CH3                       (((uint32_t)0x6) &lt;&lt; TIMER_CNTRL_EVENT_SEL_Pos)  \/*!&lt; Selects Channel 3 event. *\/ #define TIMER_EvSrc_CH4                       (((uint32_t)0x7) &lt;&lt; TIMER_CNTRL_EVENT_SEL_Pos)  \/*!&lt; Selects Channel 4 event. *\/ #define TIMER_EvSrc_ETR                       (((uint32_t)0x8) &lt;&lt; TIMER_CNTRL_EVENT_SEL_Pos)  \/*!&lt; Selects ETR event. *\/<\/code><\/pre>\n<\/div>\n<\/div>\n<p>\u0422\u0430\u043a \u0436\u0435 \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0438 \u043f\u043e\u0434\u0430\u0447\u0443 \u043d\u0430 \u043d\u0435\u0433\u043e \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0434\u043b\u044f \u0441\u0447\u0435\u0442\u0430.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0412\u043e\u0442 \u0442\u0430\u043a \u043c\u044b \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0442\u0430\u0439\u043c\u0435\u0440.<\/b><\/p>\n<div class=\"spoiler_text\">TIMER_CntInitTypeDef timerButtonCheck_structInit; \/\/ \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0432\u044b\u0437\u043e\u0432\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u043e\u043f\u0440\u043e\u0441\u0430 \u043a\u043b\u0430\u0432\u0438\u0448.<br \/>   RST_CLK_PCLKcmd(RST_CLK_PCLK_TIMER2, ENABLE); \/\/ \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u0439\u043c\u0435\u0440\u0430 1.<br \/>   TIMER_BRGInit(MDR_TIMER2, TIMER_HCLKdiv1); \/\/ \u041f\u043e\u0434\u0430\u0435\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0434\u043b\u044f \u0441\u0447\u0435\u0442\u0430 (\u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0431\u0435\u0437 \u043f\u0440\u0435\u0434\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f).<\/p>\n<p>   \/\/ \u0417\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430.<br \/>   timerButtonCheck_structInit.TIMER_ARR_UpdateMode = TIMER_ARR_Update_Immediately; \/\/ \u0420\u0435\u0433\u0438\u0441\u0442\u0440 ARR \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u0435 \u0432\u0440\u0435\u043c\u044f.<br \/>   timerButtonCheck_structInit.TIMER_BRK_Polarity = TIMER_BRKPolarity_NonInverted; \/\/ BRK \u0441\u0438\u0433\u043d\u0430\u043b \u043d\u0435 \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f (\u043d\u0430\u0441 \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043d\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f).<br \/>   timerButtonCheck_structInit.TIMER_CounterDirection = TIMER_CntDir_Up; \/\/ \u0421\u0447\u0438\u0442\u0430\u0435\u043c \u00ab\u0432\u0432\u0435\u0440\u0445\u00bb. CNT \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f (CNT++). <br \/>   timerButtonCheck_structInit.TIMER_CounterMode = TIMER_CntMode_ClkFixedDir; \/\/ \u0421\u0447\u0438\u0442\u0430\u0435\u043c \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u0443, \u0432\u0432\u0435\u0440\u0445.<br \/>   timerButtonCheck_structInit.TIMER_ETR_FilterConf = TIMER_Filter_1FF_at_TIMER_CLK; \/\/ \u0421\u0438\u0433\u043d\u0430\u043b \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d \u0432 1-\u043c \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0435 \u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 TIM_CLK (\u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e).<br \/>   timerButtonCheck_structInit.TIMER_ETR_Polarity = TIMER_ETRPolarity_NonInverted; \/\/ ETR \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u043d\u0435 \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f (\u043c\u044b \u0435\u0433\u043e \u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c).<br \/>   timerButtonCheck_structInit.TIMER_ETR_Prescaler = TIMER_ETR_Prescaler_None; \/\/ \u0427\u0430\u0441\u0442\u043e\u0442\u0430 ETR \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u043d\u0435 \u0434\u0435\u043b\u0438\u0442\u0441\u044f (ETR \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c.).<br \/>   timerButtonCheck_structInit.TIMER_EventSource = TIMER_EvSrc_TM2; \/\/ \u0422\u0430\u0439\u043c\u0435\u0440 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438 CNT = ARR.<br \/>   timerButtonCheck_structInit.TIMER_FilterSampling = TIMER_FDTS_TIMER_CLK_div_1; \/\/ FDTS = TIMER_CLK. (\u0422\u0430\u043a \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c.).<br \/>   timerButtonCheck_structInit.TIMER_IniCounter = 0; \/\/ \u0421\u0447\u0438\u0442\u0430\u0435\u043c \u0441 0. \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430. (CNT = 0.).<br \/>   timerButtonCheck_structInit.TIMER_Period = 250\/25; \/\/ \u0421\u0447\u0438\u0442\u0430\u0435\u043c \u0434\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (ARR = PWM_speed).<br \/>   timerButtonCheck_structInit.TIMER_Prescaler = 32000 \u2014 1; \/\/ \u0414\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430. PSG \u0440\u0435\u0433\u0438\u0441\u0442\u0440. <\/p>\n<p>   TIMER_CntInit(MDR_TIMER2, &#038;timerButtonCheck_structInit); \/\/ \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0430\u0439\u043c\u0435\u0440.<\/p><\/div>\n<\/div>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u0432 CMSIS \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043e\u0442 \u0432\u0441\u0435\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430 (\u0435\u0435 \u043c\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435) \u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u043c \u0442\u0430\u0439\u043c\u0435\u0440.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">\/\/ \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 25 \u0440\u0430\u0437 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 SPL. void initTimerButtonCheckSPL (void)  {   TIMER_CntInitTypeDef timerButtonCheck_structInit; \/\/ \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0432\u044b\u0437\u043e\u0432\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u043e\u043f\u0440\u043e\u0441\u0430 \u043a\u043b\u0430\u0432\u0438\u0448.  RST_CLK_PCLKcmd(RST_CLK_PCLK_TIMER2, ENABLE); \/\/ \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u0439\u043c\u0435\u0440\u0430 1.  TIMER_BRGInit(MDR_TIMER2, TIMER_HCLKdiv1); \/\/ \u041f\u043e\u0434\u0430\u0435\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0434\u043b\u044f \u0441\u0447\u0435\u0442\u0430 (\u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0431\u0435\u0437 \u043f\u0440\u0435\u0434\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f). \t  \/\/ \u0417\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430.  timerButtonCheck_structInit.TIMER_ARR_UpdateMode = TIMER_ARR_Update_Immediately; \/\/ \u0420\u0435\u0433\u0438\u0441\u0442\u0440 ARR \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u0435 \u0432\u0440\u0435\u043c\u044f.  timerButtonCheck_structInit.TIMER_BRK_Polarity = TIMER_BRKPolarity_NonInverted; \/\/ BRK \u0441\u0438\u0433\u043d\u0430\u043b \u043d\u0435 \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f (\u043d\u0430\u0441 \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043d\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f).  timerButtonCheck_structInit.TIMER_CounterDirection = TIMER_CntDir_Up; \/\/ \u0421\u0447\u0438\u0442\u0430\u0435\u043c &quot;\u0432\u0432\u0435\u0440\u0445&quot;. CNT \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f (CNT++).   timerButtonCheck_structInit.TIMER_CounterMode = TIMER_CntMode_ClkFixedDir; \/\/ \u0421\u0447\u0438\u0442\u0430\u0435\u043c \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u0443, \u0432\u0432\u0435\u0440\u0445.  timerButtonCheck_structInit.TIMER_ETR_FilterConf = TIMER_Filter_1FF_at_TIMER_CLK; \/\/ \u0421\u0438\u0433\u043d\u0430\u043b \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d \u0432 1-\u043c \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0435 \u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 TIM_CLK (\u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e).  timerButtonCheck_structInit.TIMER_ETR_Polarity = TIMER_ETRPolarity_NonInverted; \/\/ ETR \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u043d\u0435 \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f (\u043c\u044b \u0435\u0433\u043e \u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c).  timerButtonCheck_structInit.TIMER_ETR_Prescaler = TIMER_ETR_Prescaler_None; \/\/ \u0427\u0430\u0441\u0442\u043e\u0442\u0430 ETR \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u043d\u0435 \u0434\u0435\u043b\u0438\u0442\u0441\u044f (ETR \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c.).  timerButtonCheck_structInit.TIMER_EventSource = TIMER_EvSrc_TM2; \/\/ \u0422\u0430\u0439\u043c\u0435\u0440 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438 CNT = ARR.  timerButtonCheck_structInit.TIMER_FilterSampling = TIMER_FDTS_TIMER_CLK_div_1; \/\/ FDTS = TIMER_CLK. (\u0422\u0430\u043a \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c.).  timerButtonCheck_structInit.TIMER_IniCounter = 0; \/\/ \u0421\u0447\u0438\u0442\u0430\u0435\u043c \u0441 0. \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430. (CNT = 0.).  timerButtonCheck_structInit.TIMER_Period = 250\/25;\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\/\/ \u0421\u0447\u0438\u0442\u0430\u0435\u043c \u0434\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (ARR = PWM_speed).  timerButtonCheck_structInit.TIMER_Prescaler = 32000 - 1; \/\/ \u0414\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430. PSG \u0440\u0435\u0433\u0438\u0441\u0442\u0440.    TIMER_CntInit(MDR_TIMER2, &timerButtonCheck_structInit); \/\/ \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0430\u0439\u043c\u0435\u0440. \t  TIMER_ITConfig(MDR_TIMER2, TIMER_STATUS_CNT_ARR, ENABLE); \/\/ \u0420\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u043c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u043e CNT = ARR.\t  NVIC_EnableIRQ(Timer2_IRQn); \/\/ \u0420\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u043c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043e\u0442 \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0432 \u0446\u0435\u043b\u043e\u043c. \t  TIMER_Cmd(MDR_TIMER2, ENABLE); \/\/ \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u0430\u0439\u043c\u0435\u0440. }<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h4>\u041f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 SPL.<\/h4>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u043d\u0430 SPL \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0438. \u041f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u0438\u043c\u0435\u0435\u0442 \u0432\u0441\u0435 \u0442\u043e \u0436\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 \u0438\u043c\u044f, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u0432 \u0441\u0442\u0430\u0440\u0442\u0430\u043f \u0444\u0430\u0439\u043b\u0435. \u041f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 \u0432\u0445\u043e\u0434\u0435 \u0432 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0444\u043b\u0430\u0433 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0442\u0430\u0439\u043c\u0435\u0440\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0443\u0436\u0438\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <b>TIMER_ClearFlag<\/b>.<\/p>\n<pre><code class=\"cpp\">void TIMER_ClearFlag(MDR_TIMER_TypeDef* TIMERx, uint32_t Flags)<\/code><\/pre>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043c\u044f \u043f\u043e\u0440\u0442\u0430 \u0438 \u0444\u043b\u0430\u0433\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0435\u0442:<\/p>\n<pre><code class=\"cpp\">TIMER_ClearFlag(MDR_TIMER2, TIMER_STATUS_CNT_ARR); \/\/ \u0421\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0444\u043b\u0430\u0433. \u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0432\u043e\u0439 \u043a\u043e\u043c\u043c\u0430\u043d\u0434\u043e\u0439.<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044f, \u0447\u0442\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e. \u0412 SPL \u043d\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0438\u0442\u0430, \u0437\u0430\u0442\u043e \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0445 \u0431\u0438\u0442. \u0418\u043c\u0438 \u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f.<\/p>\n<pre><code class=\"cpp\">uint8_t PORT_ReadInputDataBit(MDR_PORT_TypeDef* PORTx, uint32_t PORT_Pin); void PORT_WriteBit(MDR_PORT_TypeDef* PORTx, uint32_t PORT_Pin, BitAction BitVal);<\/code><\/pre>\n<p>\u0423 \u043e\u0431\u0435\u0438\u0445 \u043f\u0435\u0440\u0432\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u0438\u0434\u0435\u0442 \u0438\u043c\u044f \u043f\u043e\u0440\u0442\u0430, \u0434\u0430\u043b\u0435\u0435 \u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0447\u0442\u0435\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043c\u044f \u043f\u0438\u043d\u0430. \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e <b>\u043c\u0430\u0441\u043a\u0430<\/b>. \u0423 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u0438, \u043f\u043e\u0441\u043b\u0435 \u0438\u043c\u0435\u043d\u0438 \u043f\u043e\u0440\u0442\u0430 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0431\u0438\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f (\u0442\u0430\u043a \u0436\u0435 \u043c\u0430\u0441\u043a\u043e\u0439) \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0438\u0442\u0430 (0 \u0438\u043b\u0438 1). \u0424\u0443\u043d\u043a\u0446\u0438\u044e \u0447\u0442\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u0438. \u0422\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c: <\/p>\n<pre><code class=\"cpp\">PORT_WriteBit(MDR_PORTC, LED1, !PORT_ReadInputDataBit(MDR_PORTC, LED1)); \/\/ \u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0438\u0442\u0430.<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u043a\u043d\u043e\u043f\u043e\u043a. \u041f\u0440\u0438\u0447\u0435\u043c \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <b>PORT_ReadInputDataBit<\/b>, \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u0432\u044b\u0448\u0435.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041e\u043f\u0440\u043e\u0441 \u043a\u043d\u043e\u043f\u043e\u043a \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a.<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">if (PORT_ReadInputDataBit(MDR_PORTB, UP_MSK) == 0) PWM_speed--; \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043d\u0430\u0436\u0430\u0442\u0430 \u043b\u0438 \u043a\u0430\u043a\u0430\u044f-\u043d\u0438\u0431\u0443\u0434\u044c \u043a\u043b\u0430\u0432\u0438\u0448\u0430. \u0415\u0441\u043b\u0438 \u043d\u0430\u0436\u0430\u0442\u0430 - \u0447\u0442\u043e-\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u043c \u0441 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439. \t\telse if (PORT_ReadInputDataBit(MDR_PORTE, DOWN_MSK) == 0) PWM_speed++;\t\t\t \t\telse if (PORT_ReadInputDataBit(MDR_PORTE, LEFT_MSK) == 0) PWM_speed--; \t\telse if (PORT_ReadInputDataBit(MDR_PORTB, RIGHT_MSK)== 0) PWM_speed++;<\/code><\/pre>\n<\/div>\n<\/div>\n<p>\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043c\u0435\u043d\u0438\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u043f\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u043e\u043f\u0440\u043e\u0441\u0430 \u043a\u043d\u043e\u043f\u043e\u043a. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f <b>TIMER_SetCntAutoreload<\/b>.<\/p>\n<pre><code class=\"cpp\">void TIMER_SetCntAutoreload(MDR_TIMER_TypeDef* TIMERx, uint16_t Autoreload)<\/code><\/pre>\n<p>\u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043b\u0438\u0448\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0430\u0439\u043c\u0435\u0440 \u0441 PWM \u0438 \u043d\u043e\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e \u0438\u0442\u043e\u0433\u0443 \u0438\u043c\u0435\u0435\u043c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u0432\u0438\u0434\u0430.<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">void Timer2_IRQHandler (void) { \tTIMER_ClearFlag(MDR_TIMER2, TIMER_STATUS_CNT_ARR); \/\/ \u0421\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0444\u043b\u0430\u0433. \u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0432\u043e\u0439 \u043a\u043e\u043c\u043c\u0430\u043d\u0434\u043e\u0439.\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t \tPORT_WriteBit(MDR_PORTC, LED1, !PORT_ReadInputDataBit(MDR_PORTC, LED1)); \/\/ \u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0438\u0442\u0430.\t\t \tif (PORT_ReadInputDataBit(MDR_PORTB, UP_MSK) == 0) PWM_speed--; \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043d\u0430\u0436\u0430\u0442\u0430 \u043b\u0438 \u043a\u0430\u043a\u0430\u044f-\u043d\u0438\u0431\u0443\u0434\u044c \u043a\u043b\u0430\u0432\u0438\u0448\u0430. \u0415\u0441\u043b\u0438 \u043d\u0430\u0436\u0430\u0442\u0430 - \u0447\u0442\u043e-\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u043c \u0441 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439. \t\telse if (PORT_ReadInputDataBit(MDR_PORTE, DOWN_MSK) == 0) PWM_speed++;\t\t\t \t\telse if (PORT_ReadInputDataBit(MDR_PORTE, LEFT_MSK) == 0) PWM_speed--; \t\telse if (PORT_ReadInputDataBit(MDR_PORTB, RIGHT_MSK)== 0) PWM_speed++; \t \t\/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043d\u0435 \u0432\u044b\u0448\u043b\u0430 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 \u043e\u0442 250 \u0413\u0446 \u0434\u043e 0.5 \u0413\u0446. \tif (PWM_speed &lt; 1) PWM_speed = 1;\t\t\t\t\t\t\t\t\t \t\telse if (PWM_speed &gt; 500) PWM_speed = 500; \t \tTIMER_SetCntAutoreload(MDR_TIMER1, PWM_speed); \/\/ \u041c\u0435\u043d\u044f\u0435\u043c \u0447\u0430\u0441\u0442\u043e\u0442\u0443. \t\t\t\t\t }<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h4>\u041f\u043e\u0434\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0438\u0442\u043e\u0433\u043e\u0432.<\/h4>\n<p>  \u041a\u0430\u043a \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c SPL \u043a\u043e\u0434 \u0441\u0442\u0430\u043b \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u044c\u0451\u043c\u043d\u0435\u0435. \u041d\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0440\u0430\u0432\u043d\u0438\u043c \u0432\u0435\u0441 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u0412 \u043a\u043e\u0434, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043b\u0438\u0448\u044c \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c CMSIS \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0432\u0438\u0434\u0430\u043c\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0442\u043e\u043b\u044c\u043a\u043e.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/e29\/802\/007\/e298020078a549f28e68e86076b4a76c.jpg\"\/><br \/>  \u041d\u0430\u0448 \u0436\u0435 \u043a\u043e\u0434 \u0441 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 -O0 \u0432\u0435\u0441\u0438\u0442 \u0441\u0442\u043e\u043b\u044c\u043a\u043e.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/1d8\/042\/904\/1d80429040164ecc907815a525a90b83.jpg\"\/><br \/>  \u0421 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 -O3.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/25b\/a49\/f1f\/25ba49f1fc55459f80cf3f8d721ef0aa.jpg\"\/><br \/>  \u041a\u043e\u0434 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c SPL \u0432\u0435\u0441\u0438\u0442 \u0432 4-5 \u0440\u0430\u0437 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432\u0440\u0443\u0447\u043d\u0443\u044e. \u041f\u0440\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u044f \u0432\u043e\u043e\u0431\u0449\u0435 \u043c\u043e\u043b\u0447\u0443. \u042d\u0442\u043e \u0442\u0435\u043c\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u043a\u043e\u0438\u0445 \u043d\u0435 \u043c\u0430\u043b\u043e. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u0432\u0435\u0434\u0435\u043c \u0438\u0442\u043e\u0433\u0438.<\/p>\n<h5>\u041f\u043b\u044e\u0441\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f SPL<\/h5>\n<ol>\n<li>\u041d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e SPL \u043a\u043e\u0434 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e, \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a \u0441\u0430\u043c\u043e\u0439 SPL (\u0447\u0435\u0433\u043e \u043f\u043e\u043a\u0430, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0435\u0442).<\/li>\n<li>\u041f\u0440\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u2014 \u0432\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0432\u0435\u0440\u043d\u043e. \u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a. \u041c\u043d\u0435 \u043f\u043e\u043a\u0430 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u043d\u0438 \u0435\u0434\u0438\u043d\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 SPL. \u0414\u0430\u0436\u0435 \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u044d\u0442\u043e B-\u0432\u0435\u0440\u0441\u0438\u044f.<\/li>\n<\/ol>\n<p>  <\/p>\n<h5>\u041c\u0438\u043d\u0443\u0441\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f SPL<\/h5>\n<ol>\n<li>\u0420\u0430\u0437\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u043f\u043e\u0440\u0430\u0436\u0430\u0435\u0442 \u0432\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435.<\/li>\n<li>\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0442\u0430\u043a \u0436\u0435 \u043d\u0438\u0436\u0435.<\/li>\n<li>\u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441 SPL \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u0447\u0435\u043c \u0441 CMSIS.<\/li>\n<li>\u041d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0443\u0433\u0430\u0434\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0438\u0441\u0430\u043b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443. \u041f\u043e\u0440\u043e\u0439 \u043d\u0435\u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b\u0442\u044c \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u2014 \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u043e \u0438\u0437 \u043d\u0435\u0435 \u0432 \u0434\u0440\u0443\u0433\u0443.<\/li>\n<li>\u041e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043c\u0435\u0441\u0442\u0430 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440.<\/li>\n<\/ol>\n<h4>\u0412\u044b\u0432\u043e\u0434<\/h4>\n<p>SPL \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0430\u0432\u043e \u043d\u0430 \u0436\u0438\u0437\u043d\u044c, \u043d\u043e \u043b\u0438\u0448\u044c \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0431\u0443\u0434\u0443\u0442 \u044f\u0441\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432\u0441\u0435 \u0435\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u041f\u0440\u0438\u0447\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043b\u0438\u0448\u044c \u0432 \u0437\u0430\u0434\u0430\u0447\u0430\u0445, \u0433\u0434\u0435 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0438 \u0438 \u043e\u0431\u044a\u0435\u043c\u0430 \u043f\u0430\u043c\u044f\u0442\u0438. \u041b\u0438\u0447\u043d\u043e \u043c\u043d\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c <b>\u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043f\u0440\u043e\u0449\u0435<\/b> \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432\u0441\u044e \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u0443\u044e \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044e, \u0447\u0438\u0442\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u044f \u043d\u0435 \u043d\u0443\u0436\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b.<\/p>\n<p>  <a href=\"https:\/\/cloud.mail.ru\/public\/5RZp\/4iSH5eXQo\">\u0424\u0430\u0439\u043b \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/a><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u0435\u0439.<\/b><\/p>\n<div class=\"spoiler_text\">\n<ul>\n<li>1. <a href=\"http:\/\/habrahabr.ru\/post\/255199\/#first_unread\">\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0441 STM32F103 \u043d\u0430 \u041a1986\u0412\u041592QI. \u0418\u043b\u0438 \u043f\u0435\u0440\u0432\u043e\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e \u0441 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u043c \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c.<\/a><\/li>\n<li>2. <a href=\"http:\/\/habrahabr.ru\/post\/255323\/\">\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0441 STM32 \u043d\u0430 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0439 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u041a1986\u0412\u041592QI. \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 keil \u0438 \u043c\u0438\u0433\u0430\u043d\u0438\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c.<\/a><\/li>\n<li>3. <a href=\"http:\/\/habrahabr.ru\/post\/255415\/\">\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0441 STM32 \u043d\u0430 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0439 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u041a1986\u0412\u041592QI. \u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0442\u0430\u0439\u043c\u0435\u0440 (SysTick).<\/a><\/li>\n<li>4. <a href=\"http:\/\/habrahabr.ru\/post\/255479\/\">\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0441 STM32 \u043d\u0430 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0439 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u041a1986\u0412\u041592QI. \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b.<\/a><\/li>\n<li>5. <a href=\"http:\/\/habrahabr.ru\/post\/255513\/\">\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0441 STM32 \u043d\u0430 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0439 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u041a1986\u0412\u041592QI. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435: \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c \u0437\u0432\u0443\u043a. \u0427\u0430\u0441\u0442\u044c \u043f\u0435\u0440\u0432\u0430\u044f: \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0439 \u0438 \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b. \u041e\u0441\u0432\u043e\u0435\u043d\u0438\u0435 \u0426\u0410\u041f (DAC).<\/a><\/li>\n<li>6. <a href=\"http:\/\/habrahabr.ru\/post\/256091\/\">\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0441 STM32 \u043d\u0430 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0439 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u041a1986\u0412\u041592QI. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435: \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c \u0437\u0432\u0443\u043a. \u0427\u0430\u0441\u0442\u044c \u0432\u0442\u043e\u0440\u0430\u044f: \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b. \u041e\u0441\u0432\u043e\u0435\u043d\u0438\u0435 DMA.<\/a><\/li>\n<li>7. <a href=\"http:\/\/habrahabr.ru\/post\/256577\/\">\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0441 STM32 \u043d\u0430 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0439 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u041a1986\u0412\u041592QI. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435: \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c \u0437\u0432\u0443\u043a. \u0427\u0430\u0441\u0442\u044c \u0442\u0440\u0435\u0442\u044c\u044f: \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b. \u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043d\u0430 DMA + \u043f\u0435\u0440\u0432\u043e\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e \u0441 \u0442\u0430\u0439\u043c\u0435\u0440\u0430\u043c\u0438.<\/a><\/li>\n<li>8. <a href=\"http:\/\/habrahabr.ru\/post\/256621\/\">\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0441 STM32 \u043d\u0430 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0439 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u041a1986\u0412\u041592QI. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435: \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c \u0437\u0432\u0443\u043a. \u0427\u0430\u0441\u0442\u044c \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u0430\u044f: \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0446\u0438\u0444\u0440\u043e\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043e\u0434\u043d\u043e\u0433\u043e\u043b\u043e\u0441\u043d\u043e\u0439 \u0438 \u043c\u043d\u043e\u0433\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0439 \u043c\u0443\u0437\u044b\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0442\u043a\u0440\u044b\u0442\u043a\u0438.<\/a><\/li>\n<li>9, <a href=\"http:\/\/habrahabr.ru\/post\/267051\/\">\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0441 STM32 \u043d\u0430 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0439 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u041a1986\u0412\u041592QI. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435: \u041e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u043a\u043b\u0430\u0432\u0438\u0448\u0438, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0428\u0418\u041c. \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u043d\u0430 CMSIS \u0438 SPL (PWM+TIM+PORT). \u0427\u0430\u0441\u0442\u044c \u043f\u0435\u0440\u0432\u0430\u044f.<\/a><\/li>\n<\/ul>\n<\/div>\n<\/div>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/270863\/\"> http:\/\/habrahabr.ru\/post\/270863\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<br \/>\n<h4>\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435.<\/h4>\n<p>\u0412 <a href=\"http:\/\/habrahabr.ru\/post\/267051\/\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u043c\u044b \u0441 \u0432\u0430\u043c\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u043b\u0438 \u043e\u0431\u0449\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0438 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u0440\u0443\u0447\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0428\u0418\u041c \u043a\u0430\u043d\u0430\u043b\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c CMSIS. \u041d\u043e \u043c\u043d\u043e\u0433\u0438\u043c \u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u00ab\u043a\u043e\u043f\u0430\u0442\u044c\u0441\u044f \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445\u00bb \u0438 \u043e\u043d\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u044e\u0442 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439, \u043a\u0430\u043a \u0438\u043c \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u043f\u044b\u0442\u0430\u044e\u0441\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0430\u043c \u0432\u0441\u0435 \u043f\u043b\u044e\u0441\u044b \u0438 \u043c\u0438\u043d\u0443\u0441\u044b \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430.<\/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-268215","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/268215","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=268215"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/268215\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=268215"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=268215"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=268215"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}