{"id":342483,"date":"2022-12-12T21:00:19","date_gmt":"2022-12-12T21:00:19","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=342483"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=342483","title":{"rendered":"<span>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c QtCreator \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 STM32<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442 \u0432\u0441\u0435\u043c.<\/p>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u043e\u0441\u0432\u0430\u0438\u0432\u0430\u044e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u041f\u041e \u0434\u043b\u044f STM32 \u0438 \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u043c\u043e\u0438\u043c \u043e\u043f\u044b\u0442\u043e\u043c. <\/p>\n<p>\u041a\u0430\u043a \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0434\u043b\u044f STM32 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u043e \u0441\u0440\u0435\u0434 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043e\u0434\u043d\u0430\u043a\u043e \u0447\u0430\u0441\u0442\u044c \u0438\u0437 \u043d\u0438\u0445, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0443\u0434\u043e\u0431\u043d\u043e\u0441\u0442\u044c, \u0438\u043c\u0435\u044e\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0431\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438. \u0422\u0430\u043a, \u0434\u043b\u044f IAR \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f 32 \u043a\u0411, \u0447\u0442\u043e \u0432\u0435\u0441\u044c\u043c\u0430 \u043d\u0435\u043c\u043d\u043e\u0433\u043e.<\/p>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u0441\u043f\u043e\u0441\u043e\u0431 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u041f\u041e \u0434\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 STM32 \u0432 \u0441\u0440\u0435\u0434\u0435 QtCreator.<\/p>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c\u0441\u044f, \u0447\u0442\u043e \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<h2>\u0416\u0435\u043b\u0435\u0437\u043e<\/h2>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043f\u043b\u0430\u0442\u0443 <strong>bluepill<\/strong> \u043d\u0430 \u0431\u0430\u0437\u0435 <strong>STM32F103C8T6<\/strong>. \u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <strong>openocd <\/strong>\u0436\u0430\u043b\u043e\u0432\u0430\u043b\u0441\u044f \u043d\u0430 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 STM32. \u0420\u0435\u0448\u0430\u0435\u0442\u0441\u044f 2 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438: \u0438\u043b\u0438 \u043f\u043e\u0434\u043c\u0435\u043d\u043e\u0439 \u043d\u043e\u043c\u0435\u0440\u0430 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435 <strong>openocd <\/strong>\u0438\u043b\u0438 \u0437\u0430\u043c\u0435\u043d\u043e\u0439 \u041c\u041a \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439. \u042f \u0432\u044b\u0431\u0440\u0430\u043b 2 \u0432\u0430\u0440\u0438\u0430\u043d\u0442. \u0414\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0432 \u041c\u041a \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <strong>ST-Link<\/strong>.   <\/p>\n<h2>\u0421\u043e\u0444\u0442<\/h2>\n<p>\u0421\u0430\u043c\u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u041e\u0421 Windows 10 \u0432 Virtual Box.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u041f\u041e:<\/p>\n<ol>\n<li>\n<p><strong>QtCreator<\/strong>. \u041c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043e\u043d\u043b\u0430\u0439\u043d-\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a \u0441 \u0441\u0430\u0439\u0442\u0430 Qt. \u041d\u043e \u0432 \u043d\u0435\u043c \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0438, \u043a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c QtCreator. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043e\u0431\u044b\u0447\u043d\u043e \u0435\u0433\u043e \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u044e \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441 GitHub. https:\/\/github.com\/qt-creator\/qt-creator\/tags.<\/p>\n<\/li>\n<li>\n<p><strong>gcc-arm-none-eabi<\/strong>.<strong> <\/strong>https:\/\/developer.arm.com\/downloads\/-\/gnu-rm.<\/p>\n<\/li>\n<li>\n<p><strong>Git<\/strong>. https:\/\/git-scm.com\/downloads.<\/p>\n<\/li>\n<li>\n<p><strong>openocd<\/strong>. https:\/\/github.com\/openocd-org\/openocd\/tags. \u042d\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 STM.<\/p>\n<\/li>\n<li>\n<p><strong>make<\/strong>. <a href=\"https:\/\/gnuwin32.sourceforge.net\/packages\/make.htm\" rel=\"noopener noreferrer nofollow\">https:\/\/gnuwin32.sourceforge.net\/packages\/make.htm<\/a><\/p>\n<\/li>\n<li>\n<p><strong>ST-LINK Utility<\/strong>. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 STM32 + \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0433\u043e ST-Link. https:\/\/www.st.com\/en\/development-tools\/stsw-link004.html<\/p>\n<\/li>\n<li>\n<p><strong>Python2.7<\/strong>. https:\/\/www.python.org\/downloads\/release\/python-2718\/<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e, \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0438 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c QtCreator. \u0417\u0430\u0442\u0435\u043c \u0433\u0438\u0442, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, openocd, python, make \u0438 st-link.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/222\/e0b\/526\/222e0b526b0722b539d67684643acb42.PNG\" width=\"499\" height=\"388\"\/><figcaption><\/figcaption><\/figure>\n<p>QtCreator \u0438 openocd \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043b \u0432 C:\\Tools. \u0412\u0441\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043a\u0440\u043e\u043c\u0435 QtCreator, \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0432 <strong>Path<\/strong>.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/286\/9aa\/849\/2869aa8496d4e9b9560382f598cd1993.PNG\" width=\"527\" height=\"501\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0438 openocd \u043f\u043e\u0434\u0442\u044f\u043d\u0443\u043b\u0438\u0441\u044c \u0432 path \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0438\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b2f\/d39\/5cd\/b2fd395cd8f2638653f8e514aea0cc97.PNG\" width=\"979\" height=\"512\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 QtCreator.<\/p>\n<h2>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 QtCreator<\/h2>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c QtCreator. \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043b\u0430\u0433\u0438\u043d\u044b <strong>BareMetal<\/strong> \u0438 <strong>GenericProjectManager<\/strong>. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0434\u0435\u043c \u0432 <strong>Help->About Plugins<\/strong>. \u041f\u043e\u0441\u043b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c QtCreator.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2e4\/d78\/cbb\/2e4d78cbbcb084654c682137f3e80e44.PNG\" width=\"652\" height=\"432\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 <strong>Edit->Preferences<\/strong>. \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c <strong>Kits<\/strong> \u0441\u043b\u0435\u0432\u0430. \u0422\u0443\u0442 \u0432\u0438\u0434\u0438\u043c \u043d\u0430\u0448 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 ARM, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0442\u044f\u043d\u0443\u043b\u0441\u044f \u0438\u0437 Path. \u0418\u0434\u0435\u043c \u0432 \u0440\u0430\u0437\u0434\u0435\u043b <strong>Devices<\/strong> \u043d\u0430 \u0432\u043a\u043b\u0430\u0434\u043a\u0443 <strong>Bare Metal<\/strong> \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c <strong>OpenOCD<\/strong> server. \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <strong>OpenOCD-STM32F103<\/strong>.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3b4\/acb\/460\/3b4acb4608ce36608ee9bc1f25f2ce68.PNG\" width=\"1011\" height=\"657\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u043f\u043e\u043b\u0435 <strong>Executable file<\/strong> \u043f\u0438\u0448\u0435\u043c \u043f\u0443\u0442\u044c \u043a \u043d\u0430\u0448\u0435\u043c\u0443 <strong>openocd <\/strong>(\u043f\u043e-\u0438\u0434\u0435\u0435, \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0438\u0437 path).<\/p>\n<p>\u0412 \u043f\u043e\u043b\u0435 <strong>Root scripts<\/strong> directory \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043d\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0441\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u043c\u0438 \u0432 openocd.<\/p>\n<p>\u0412 \u043f\u043e\u043b\u0435 <strong>Additional arguments<\/strong> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 MK. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u043e\u043d\u0444\u0438\u0433 \u0434\u043b\u044f STLink \u0438 target. \u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u0432\u043a\u043b\u0430\u0434\u043a\u0443 <strong>Devices<\/strong>. \u041d\u0430\u0436\u0438\u043c\u0430\u0435\u043c <strong>Add->Bare Metal Device<\/strong> \u0438 <strong>Start Wizard<\/strong>. \u0412 \u043f\u043e\u044f\u0432\u0438\u0432\u0448\u0435\u043c\u0441\u044f \u043e\u043a\u043d\u0435 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c <strong>Debug server provider<\/strong> \u0440\u0430\u043d\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 <strong>OpenOCD-STM32F103<\/strong>. \u0414\u0430\u043b\u0435\u0435 Finish.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/87a\/83d\/e3b\/87a83de3b67e6a523cce838b3cd6b44c.PNG\" width=\"1011\" height=\"657\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u0432 <strong>Kits<\/strong> \u0438 \u0434\u043e\u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043d\u0430\u0448 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442. \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c <strong>Device type<\/strong> \u0438 <strong>Device \u2013 Bar Metal Device<\/strong>. \u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/207\/5ca\/60f\/2075ca60fd5db01b4377793c31036ae3.PNG\" width=\"1011\" height=\"657\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c QtCreator \u043f\u043e\u043a\u0430 \u043e\u0442\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<h2>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/h2>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 <strong>CMSIS<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043c\u043e\u0440\u0433\u0430\u0442\u044c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430\u043c\u0438.<\/p>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u0442\u044f\u043d\u0443\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432 \u0432\u0438\u0434\u0435 submodules \u0438\u0437 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432 ARM \u0438 ST. \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c bash-\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441 git. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0430\u043f\u043a\u0443 led_blink_cmsis \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u0432 \u043d\u0435\u0435.<\/p>\n<pre><code>mkdir led_blink_cmsis &amp;&amp; cd led_blink_cmsis<\/code><\/pre>\n<p>\u0412\u043d\u0443\u0442\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0430\u043f\u043a\u0438 <strong>build<\/strong>, <strong>lib<\/strong> \u0438 <strong>src<\/strong>.<\/p>\n<pre><code>mkdir build &amp;&amp; mkdir src &amp;&amp; mkdir lib<\/code><\/pre>\n<p>\u0412 \u043f\u0430\u043f\u043a\u0435 <strong>build<\/strong> \u0431\u0443\u0434\u0443\u0442 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b \u0441\u0431\u043e\u0440\u043a\u0438, \u0432 <strong>src<\/strong> \u2013 \u043d\u0430\u0448\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438, \u0430 \u0432 <strong>lib<\/strong> \u2013 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.<\/p>\n<p>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c git.<\/p>\n<pre><code>git init<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 cmsis \u0434\u043b\u044f \u0431\u0438\u043b\u0434\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <strong>git submodules<\/strong>. \u041f\u0435\u0440\u0432\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u2013 \u0444\u043e\u0440\u043a \u043e\u0442 ARM, \u0432\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f STM32 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430 F1. <\/p>\n<pre><code>git submodule add https:\/\/github.com\/STMicroelectronics\/cmsis_core lib\/cmsis_core &amp;&amp; cd lib\/cmsis_core git checkout v5.6.0 &amp;&amp; cd ..\/..<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1de\/9a4\/ec5\/1de9a4ec5563c82837bdc6b740131f2b.PNG\" width=\"868\" height=\"594\"\/><figcaption><\/figcaption><\/figure>\n<pre><code>git submodule add https:\/\/github.com\/STMicroelectronics\/cmsis_device_f1 lib\/cmsis_device_f1 &amp;&amp; cd lib\/cmsis_device_f1 git checkout v4.3.3 &amp;&amp; cd ..\/..<\/code><\/pre>\n<p>Git checkout \u0437\u0434\u0435\u0441\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u043b\u0438\u0437\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 5.6.0 \u0438 4.3.3 \u0434\u043b\u044f cmsis_core \u0438 cmsis_device \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b\u044b <strong>main.c<\/strong>, <strong>init.h<\/strong> \u0438 <strong>init.c<\/strong> \u0432 \u043f\u0430\u043f\u043a\u0435 <strong>src<\/strong>, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434.<\/p>\n<pre><code class=\"bash\">touch src\/main.c src\/init.h src\/init.c<\/code><\/pre>\n<p>\u041d\u0430\u043f\u043e\u043b\u043d\u0438\u043c \u0444\u0430\u0439\u043b\u044b \u043a\u043e\u0434\u043e\u043c. \u0412 \u0444\u0430\u0439\u043b\u0435 <strong>main.c<\/strong> \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>clock_init<\/strong> \u0438 <strong>port_init<\/strong>. \u042d\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u0442\u0430\u043a\u0442\u043e\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u041c\u041a \u0438 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442 \u043a\u0432\u0430\u0440\u0446\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e\u0440\u0442\u0430 C \u043d\u0430 \u0432\u044b\u0445\u043e\u0434 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043f\u0443\u0448-\u043f\u0443\u043b\u043b. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, <strong>init.c<\/strong> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>delay_ms<\/strong>. <\/p>\n<details class=\"spoiler\">\n<summary>main.c<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#include \"init.h\"  int main(void) {     clock_init();                                                \/\/Clock initialisation     port_init();                                                 \/\/Port initialisation     while(1)     {         GPIOC->BSRR = GPIO_BSRR_BR13;                            \/\/Pin 13 of PORT C on         delay_ms(100);         GPIOC->BSRR = GPIO_BSRR_BS13;                            \/\/Pin 13 of PORT C off         delay_ms(100);     }     return 0; } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>init.h<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#ifndef STM32F103xB #define STM32F103xB #endif  #include \"stm32f1xx.h\"  int clock_init(); void port_init(); void delay_ms(uint16_t); <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>init.c<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#include \"init.h\"  volatile uint32_t SysTickDelayMsec = 0;  void SysTick_Handler(void) {     --SysTickDelayMsec; }  \/* OSC - 8 MHz PLLSRC - 8 MHz SYSCLK - 16 MHz  PLL - 2 AHB - 1\/16 *\/ int clock_init() {     RCC->CR |= RCC_CR_HSEON;                                    \/\/Start HSE generator     for(volatile int StartUpCounter = 0; ; ++StartUpCounter)    \/\/Wait for successfull start or timeout     {         if(RCC->CR &amp; RCC_CR_HSERDY)                             \/\/If started successfully, break the cycle         {             break;         }         if(StartUpCounter > 4096)                               \/\/If not started - turn off and return an error         {             RCC->CR &amp;= ~RCC_CR_HSEON;                           \/\/Stop HSE             return 1;         }     }     RCC->CFGR = 0;                                              \/\/PLL mult is equal 2     RCC->CFGR |= RCC_CFGR_PLLSRC;                               \/\/Clock PLL from HSE     RCC->CR |= RCC_CR_PLLON;                                    \/\/Start PLL     for(volatile int StartUpCounter = 0; ; ++StartUpCounter)    \/\/Wait for successfull start or timeout     {         if(RCC->CR &amp; RCC_CR_PLLRDY)                             \/\/If started successfully, break the cycle         {             break;         }         if(StartUpCounter > 4096)                               \/\/If PLL didn't start , turn off everything and return an error         {             RCC->CR &amp;= ~RCC_CR_HSEON;                           \/\/Stop HSE             RCC->CR &amp;= ~RCC_CR_PLLON;                           \/\/Stop PLL             return 2;         }     }     FLASH->ACR |= FLASH_ACR_LATENCY;                            \/\/0 cycles for flash, core clock 16 MHz     RCC->CFGR |= RCC_CFGR_PPRE2;                                \/\/APB2 turned off (0 by default)     RCC->CFGR |= RCC_CFGR_HPRE_3 |                  RCC_CFGR_HPRE_1 |                  RCC_CFGR_HPRE_0;                               \/\/AHB prescaler 16     RCC->CFGR |= RCC_CFGR_SW_1;                                 \/\/Switch to PLL     while((RCC->CFGR &amp; RCC_CFGR_SWS) != RCC_CFGR_SWS_PLL);      \/\/Wait for switch to PLL     RCC->CR &amp;= ~RCC_CR_HSION;                                   \/\/Turn off the internal clock for energy save     SystemCoreClockUpdate();                                    \/\/Apply alterations to generator     SysTick_Config(SystemCoreClock\/1000);                       \/\/Initialisation of interrupt (1 ms)     return 0;                                                   \/\/Return 0 if success }  void port_init() {     RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;                         \/\/Turn on clock for GPIOC     GPIOC->CRH = 0;     GPIOC->CRH |= GPIO_CRH_MODE13;                              \/\/Pin 13 of PORT C in Push-Pull mode     GPIOC->BSRR |= GPIO_BSRR_BR13;                              \/\/Pin 13 of PORT C reset }  void delay_ms(uint16_t msec)                                     \/\/Delay function {     SysTickDelayMsec = msec;     while (SysTickDelayMsec); } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0418, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 <strong>Makefile<\/strong>, \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0448\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430. \u0428\u0430\u0431\u043b\u043e\u043d \u044d\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0432\u0437\u044f\u0442 \u0438\u0437 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u043a\u043e\u0434\u0430 <strong>mxcube<\/strong> \u0438 \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u043f\u043e\u0434 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442. \u0424\u0430\u0439\u043b \u0438\u043c\u0435\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>Makefile<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>###################################### # target ###################################### TARGET = mppt_firmware  ###################################### # building variables ###################################### DEBUG = 1  OPT = -O0  ####################################### # paths ####################################### BUILD_DIR = build  ###################################### # source ###################################### C_SOURCES =  \\ src\/main.c \\ src\/init.c \\ lib\/cmsis_device_f1\/Source\/Templates\/system_stm32f1xx.c  ASM_SOURCES =  \\ lib\/cmsis_device_f1\/Source\/Templates\/gcc\/startup_stm32f103xb.s  ####################################### # binaries ####################################### PREFIX = arm-none-eabi-  ifdef GCC_PATH CC = $(GCC_PATH)\/$(PREFIX)gcc AS = $(GCC_PATH)\/$(PREFIX)gcc -x assembler-with-cpp CP = $(GCC_PATH)\/$(PREFIX)objcopy SZ = $(GCC_PATH)\/$(PREFIX)size else CC = $(PREFIX)gcc AS = $(PREFIX)gcc -x assembler-with-cpp CP = $(PREFIX)objcopy SZ = $(PREFIX)size endif HEX = $(CP) -O ihex BIN = $(CP) -O binary -S   ####################################### # CFLAGS ####################################### CPU = -mcpu=cortex-m3 MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI)  AS_DEFS =   C_DEFS =  \\ -DSTM32F103xB  AS_INCLUDES =   C_INCLUDES =  \\ -Isrc \\ -Ilib\/cmsis_core\/Include \\ -Ilib\/cmsis_device_f1\/Include  ASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections  CFLAGS = $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections  ifeq ($(DEBUG), 1) CFLAGS += -g -gdwarf-2 endif  CFLAGS += -MMD -MP -MF\"$(@:%.o=%.d)\"  ####################################### # LDFLAGS ####################################### LDSCRIPT = lib\/cmsis_device_f1\/Source\/Templates\/gcc\/linker\/STM32F103XB_FLASH.ld  LIBS = -lc -lm -lnosys  LIBDIR =  LDFLAGS = $(MCU) -specs=nano.specs -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)\/$(TARGET).map,--cref -Wl,--gc-sections  ####################################### # build the application ####################################### all: $(BUILD_DIR)\/$(TARGET).elf $(BUILD_DIR)\/$(TARGET).hex $(BUILD_DIR)\/$(TARGET).bin  OBJECTS = $(addprefix $(BUILD_DIR)\/,$(notdir $(C_SOURCES:.c=.o))) vpath %.c $(sort $(dir $(C_SOURCES)))  OBJECTS += $(addprefix $(BUILD_DIR)\/,$(notdir $(ASM_SOURCES:.s=.o))) vpath %.s $(sort $(dir $(ASM_SOURCES)))  $(BUILD_DIR)\/%.o: %.c Makefile | $(BUILD_DIR)  $(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)\/$(notdir $(&lt;:.c=.lst)) $&lt; -o $@  $(BUILD_DIR)\/%.o: %.s Makefile | $(BUILD_DIR) $(AS) -c $(CFLAGS) $&lt; -o $@  $(BUILD_DIR)\/$(TARGET).elf: $(OBJECTS) Makefile $(CC) $(OBJECTS) $(LDFLAGS) -o $@ $(SZ) $@  $(BUILD_DIR)\/%.hex: $(BUILD_DIR)\/%.elf | $(BUILD_DIR) $(BIN) $&lt; $@  $(BUILD_DIR)\/%.bin: $(BUILD_DIR)\/%.elf | $(BUILD_DIR) $(BIN) $&lt; $@  $(BUILD_DIR): mkdir $@  clean_build: $(BUILD_DIR)\/$(TARGET).elf $(BUILD_DIR)\/$(TARGET).bin find $(BUILD_DIR) ! -name '$(TARGET).bin' -type f -exec rm -f {} +  ####################################### # clean up ####################################### clean: rm -fR $(BUILD_DIR)\/* <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<ul>\n<li>\n<p>\u0412 C_INCLUDES \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u0443\u0442\u0438 \u043a \u043d\u0430\u0448\u0438\u043c .h \u0444\u0430\u0439\u043b\u0430\u043c.<\/p>\n<\/li>\n<li>\n<p>\u0412 C_SOURCES \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u0443\u0442\u0438 \u043a \u043d\u0430\u0448\u0438\u043c .c\/.cpp \u0444\u0430\u0439\u043b\u0430\u043c.<\/p>\n<\/li>\n<li>\n<p>DEBUG \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0435\u0431\u0430\u0433-\u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0432 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443. \u0414\u043b\u044f \u0440\u0435\u043b\u0438\u0437\u0430 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0432 0.<\/p>\n<\/li>\n<li>\n<p>OPT \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e. \u0414\u043b\u044f \u0440\u0435\u043b\u0438\u0437\u0430 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Os.<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u0438\u043b\u0434-\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u0443\u044e \u0434\u0440\u0443\u0433\u0443\u044e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <strong>CMake<\/strong> \u0441 \u0442\u0443\u043b\u0447\u0435\u0439\u043d\u043e\u043c \u0434\u043b\u044f STM32.<\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u0430\u043f\u043a\u0443 <strong>build<\/strong> \u0432 <strong>.gitignore<\/strong>, \u0447\u0442\u043e\u0431\u044b \u0433\u0438\u0442 \u0435\u0435 \u043d\u0435 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043b.<\/p>\n<pre><code class=\"bash\">echo build\/* > .gitignore<\/code><\/pre>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430 \u0438 \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 QtCreator.<\/p>\n<h2>\u0418\u043c\u043f\u043e\u0440\u0442 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 QtCreator<\/h2>\n<p>QtCreator \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0434\u0440\u0443\u0436\u0438\u0442 \u0441 Makefiles. \u0415\u0441\u043b\u0438 \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Autotools \u043f\u043b\u0430\u0433\u0438\u043d, \u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u043b\u0438\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e .c \u0438 .cpp \u0444\u0430\u0439\u043b\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u0447\u0435\u0440\u0435\u0437 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 QtCreator. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043f\u043b\u0430\u0433\u0438\u043d <strong>GenericProjectManager<\/strong>.   <\/p>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 <strong>File->New Project<\/strong>. \u0421\u043b\u0435\u0432\u0430 \u0432 <strong>Import Existing Project<\/strong>.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 l<strong>ed_blink_cmsis<\/strong> \u0438 \u043f\u0443\u0442\u044c <strong>C:\\led_blink_cmsis<\/strong>. Next.<\/p>\n<p>\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043a\u0430\u043a\u0438\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0438 \u0444\u0430\u0439\u043b\u044b \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u043e\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0448\u0443 \u043f\u0430\u043f\u043a\u0443 <strong>src<\/strong>. Next.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5b0\/8f6\/8ff\/5b08f68ff53ef83a7ec8903ea329cfe7.PNG\" width=\"653\" height=\"723\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0417\u0430\u0442\u0435\u043c <strong>add to version control \u2013 none<\/strong> \u0438 \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c Finish. \u0424\u0430\u0439\u043b\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u0430\u044f \u0434\u0435\u0442\u0430\u043b\u044c \u2013 \u043d\u0430\u0434\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 <strong>led_blink_cmsis.config<\/strong> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, <strong>#define STM32F103xB<\/strong>. \u0411\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u0434\u0435\u0444\u0430\u0439\u043d\u0430 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0442.\u043a. \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 cmsis \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0438\u043f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0438\u043c.   <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1ce\/c5c\/cb2\/1cec5ccb2ba11dfaa958abbf8789747d.PNG\" width=\"1025\" height=\"730\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 ide \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438. \u041d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u044d\u0442\u043e.<\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u0430\u0448\u0438 <strong>.c<\/strong> \u0444\u0430\u0439\u043b\u044b \u0432 <strong>led_blink_cmsis.files<\/strong><\/p>\n<pre><code>src\/init.c src\/main.c<\/code><\/pre>\n<p>\u0410 \u0432 <strong>led_blink_cmsis.inludes<\/strong> \u043f\u0443\u0442\u0438 \u043a \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u0430\u043c.<\/p>\n<pre><code>src\/ lib\/cmsis_core\/Include lib\/cmsis_device_f1\/Include<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u0441\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/41b\/83a\/d32\/41b83ad326a7cf1ce8ab614e3bd05a8a.PNG\" width=\"1024\" height=\"729\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442, \u043d\u0430\u0436\u0430\u0432 \u043a\u043d\u043e\u043f\u043a\u0443 <strong>build<\/strong>. \u041f\u0440\u043e\u0435\u043a\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u0430 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u043d\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/42b\/44e\/e12\/42b44ee12d37049ef9d39396a15c42e9.PNG\" width=\"1024\" height=\"729\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0430\u0432\u0442\u043e\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043d\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043d\u0430 \u041c\u041a \u043f\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044e \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 <strong>Run<\/strong>. \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 <strong>Projects<\/strong> \u0441\u043b\u0435\u0432\u0430, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u0430\u0448 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442 <strong>arm-baremetal-generic-elf-32bit<\/strong>, \u0437\u0430\u0442\u0435\u043c \u0441\u043d\u0438\u0437\u0443 <strong>Run<\/strong>. \u0421\u043f\u0440\u0430\u0432\u0430, \u0433\u0434\u0435 deployment, <strong>Add Deploy Step->Make<\/strong>. \u0417\u0430\u0442\u0435\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c, \u0432\u044b\u0431\u0440\u0430\u0432 <strong>Custom Process Step<\/strong> \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u0443\u0434\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0434\u043b\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 <strong>ST_link CLI<\/strong>.<\/p>\n<pre><code>C:\\Program Files (x86)\\STMicroelectronics\\STM32 ST-LINK Utility\\ST-LINK Utility\\ST-LINK_CLI.exe -P \".\\build\\led_blink_cmsis.bin\" 0x08000000 \u2013Rst <\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u0434 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u043e\u0439 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043d\u0430\u0448 ST-Link c \u041c\u041a. \u041c\u044b \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0435\u043c \u041c\u041a, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0430\u0434\u0440\u0435\u0441\u0430 0x08000000, \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u041c\u041a \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0a9\/752\/9ce\/0a97529ce596575a1e225c862cda6980.PNG\" width=\"1024\" height=\"728\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0432 \u041c\u041a \u0447\u0435\u0440\u0435\u0437 ST-Link \u0438 \u043d\u0430\u0436\u0430\u0432 \u043a\u043d\u043e\u043f\u043a\u0443 <strong>Run<\/strong>, \u0432\u0441\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0442\u044c\u0441\u044f, \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f, \u0430 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u043d\u0430\u0447\u0430\u0442\u044c \u043c\u043e\u0440\u0433\u0430\u0442\u044c. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c \u043f\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f\u043c \u043e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u0444\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043a PC13.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/402\/c9e\/0a9\/402c9e0a9360087a29538e625bf461ff.jpg\" width=\"4624\" height=\"2604\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/402\/c9e\/0a9\/402c9e0a9360087a29538e625bf461ff.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u043a\u0430\u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0434\u043b\u044f STM32, \u0435\u0433\u043e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0432 \u041c\u041a. \u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u0434\u043b\u044f \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u043e\u0439 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 STM32.<\/p>\n<h2>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043e\u0442\u043b\u0430\u0434\u043a\u0438<\/h2>\n<p>\u0420\u0430\u043d\u0435\u0435 \u043c\u044b \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0439 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u0447\u0435\u0440\u0435\u0437 openocd, \u0438 \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ce9\/dea\/6c8\/ce9dea6c8a12d1ae0597f3d5cf39a309.PNG\" width=\"491\" height=\"254\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0431\u044b\u043b\u043e \u0432\u0435\u0441\u044c\u043c\u0430 \u0437\u0434\u043e\u0440\u043e\u0432\u043e \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u0438\u0434\u0435\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u041c\u041a. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0442\u0430\u043a\u0443\u044e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f <strong>.svd<\/strong> \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u041c\u041a, \u0442.\u0435. <strong>STM32F103<\/strong>. \u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f:<\/p>\n<blockquote>\n<p><a href=\"https:\/\/github.com\/fduignan\/stm32f103c8t6\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/fduignan\/stm32f103c8t6<\/a>   <\/p>\n<\/blockquote>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u0432 <strong>QtCreator Edit->Preferences->Devices<\/strong>, \u043d\u0430 \u0432\u043a\u043b\u0430\u0434\u043a\u0443 <strong>Bar Metal<\/strong> \u0438 \u0432\u044b\u0431\u0435\u0440\u0435\u043c <strong>OpenOCD<\/strong>. \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0432 <strong>Peripherial description file<\/strong> \u043d\u0430\u0448 \u043f\u0443\u0442\u044c <strong>.svd<\/strong> \u0444\u0430\u0439\u043b\u0443.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u0432 <strong>View->Views->Peripheral<br \/>Registers<\/strong>, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432. \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0432<br \/>\u043e\u043a\u043d\u043e \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0438, \u043a\u043b\u0438\u043a\u043d\u0443\u0432 \u043f\u0440\u0430\u0432\u043e\u0439 \u043a\u043b\u0430\u0432\u0438\u0448\u0435\u0439 \u043c\u044b\u0448\u0438 \u043d\u0430 \u043e\u043a\u043d\u0435 <strong>Peripheral registers<\/strong>,<br \/>\u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 <strong>View Groups->GPIOC<\/strong>.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/eb0\/f70\/cb6\/eb0f70cb655da09656aebf2fd61b1fc0.PNG\" width=\"1024\" height=\"729\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0432\u0441\u0435 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043d\u0430 STM32 \u0432 IDE QtCreator.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 QtCreator \u0432 \u0441\u0432\u044f\u0437\u043a\u0435 \u0441 GNU \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430\u043c\u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u041f\u041e \u0434\u043b\u044f \u041c\u041a STM32. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u044b\u043b\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u0430.<\/p>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435!<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p> <!----> <!----><\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/705062\/\"> https:\/\/habr.com\/ru\/post\/705062\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442 \u0432\u0441\u0435\u043c.<\/p>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u043e\u0441\u0432\u0430\u0438\u0432\u0430\u044e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u041f\u041e \u0434\u043b\u044f STM32 \u0438 \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u043c\u043e\u0438\u043c \u043e\u043f\u044b\u0442\u043e\u043c. <\/p>\n<p>\u041a\u0430\u043a \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0434\u043b\u044f STM32 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u043e \u0441\u0440\u0435\u0434 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043e\u0434\u043d\u0430\u043a\u043e \u0447\u0430\u0441\u0442\u044c \u0438\u0437 \u043d\u0438\u0445, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0443\u0434\u043e\u0431\u043d\u043e\u0441\u0442\u044c, \u0438\u043c\u0435\u044e\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0431\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438. \u0422\u0430\u043a, \u0434\u043b\u044f IAR \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f 32 \u043a\u0411, \u0447\u0442\u043e \u0432\u0435\u0441\u044c\u043c\u0430 \u043d\u0435\u043c\u043d\u043e\u0433\u043e.<\/p>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u0441\u043f\u043e\u0441\u043e\u0431 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u041f\u041e \u0434\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 STM32 \u0432 \u0441\u0440\u0435\u0434\u0435 QtCreator.<\/p>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c\u0441\u044f, \u0447\u0442\u043e \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<h2>\u0416\u0435\u043b\u0435\u0437\u043e<\/h2>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043f\u043b\u0430\u0442\u0443 <strong>bluepill<\/strong> \u043d\u0430 \u0431\u0430\u0437\u0435 <strong>STM32F103C8T6<\/strong>. \u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <strong>openocd <\/strong>\u0436\u0430\u043b\u043e\u0432\u0430\u043b\u0441\u044f \u043d\u0430 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 STM32. \u0420\u0435\u0448\u0430\u0435\u0442\u0441\u044f 2 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438: \u0438\u043b\u0438 \u043f\u043e\u0434\u043c\u0435\u043d\u043e\u0439 \u043d\u043e\u043c\u0435\u0440\u0430 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435 <strong>openocd <\/strong>\u0438\u043b\u0438 \u0437\u0430\u043c\u0435\u043d\u043e\u0439 \u041c\u041a \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439. \u042f \u0432\u044b\u0431\u0440\u0430\u043b 2 \u0432\u0430\u0440\u0438\u0430\u043d\u0442. \u0414\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0432 \u041c\u041a \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <strong>ST-Link<\/strong>.   <\/p>\n<h2>\u0421\u043e\u0444\u0442<\/h2>\n<p>\u0421\u0430\u043c\u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u041e\u0421 Windows 10 \u0432 Virtual Box.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u041f\u041e:<\/p>\n<ol>\n<li>\n<p><strong>QtCreator<\/strong>. \u041c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043e\u043d\u043b\u0430\u0439\u043d-\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a \u0441 \u0441\u0430\u0439\u0442\u0430 Qt. \u041d\u043e \u0432 \u043d\u0435\u043c \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0438, \u043a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c QtCreator. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043e\u0431\u044b\u0447\u043d\u043e \u0435\u0433\u043e \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u044e \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441 GitHub. https:\/\/github.com\/qt-creator\/qt-creator\/tags.<\/p>\n<\/li>\n<li>\n<p><strong>gcc-arm-none-eabi<\/strong>.<strong> <\/strong>https:\/\/developer.arm.com\/downloads\/-\/gnu-rm.<\/p>\n<\/li>\n<li>\n<p><strong>Git<\/strong>. https:\/\/git-scm.com\/downloads.<\/p>\n<\/li>\n<li>\n<p><strong>openocd<\/strong>. https:\/\/github.com\/openocd-org\/openocd\/tags. \u042d\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 STM.<\/p>\n<\/li>\n<li>\n<p><strong>make<\/strong>. <a href=\"https:\/\/gnuwin32.sourceforge.net\/packages\/make.htm\" rel=\"noopener noreferrer nofollow\">https:\/\/gnuwin32.sourceforge.net\/packages\/make.htm<\/a><\/p>\n<\/li>\n<li>\n<p><strong>ST-LINK Utility<\/strong>. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 STM32 + \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0433\u043e ST-Link. https:\/\/www.st.com\/en\/development-tools\/stsw-link004.html<\/p>\n<\/li>\n<li>\n<p><strong>Python2.7<\/strong>. https:\/\/www.python.org\/downloads\/release\/python-2718\/<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e, \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0438 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c QtCreator. \u0417\u0430\u0442\u0435\u043c \u0433\u0438\u0442, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, openocd, python, make \u0438 st-link.<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>QtCreator \u0438 openocd \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043b \u0432 C:\\Tools. \u0412\u0441\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043a\u0440\u043e\u043c\u0435 QtCreator, \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0432 <strong>Path<\/strong>.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0438 openocd \u043f\u043e\u0434\u0442\u044f\u043d\u0443\u043b\u0438\u0441\u044c \u0432 path \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0438\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 QtCreator.<\/p>\n<h2>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 QtCreator<\/h2>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c QtCreator. \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043b\u0430\u0433\u0438\u043d\u044b <strong>BareMetal<\/strong> \u0438 <strong>GenericProjectManager<\/strong>. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0434\u0435\u043c \u0432 <strong>Help->About Plugins<\/strong>. \u041f\u043e\u0441\u043b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c QtCreator.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 <strong>Edit->Preferences<\/strong>. \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c <strong>Kits<\/strong> \u0441\u043b\u0435\u0432\u0430. \u0422\u0443\u0442 \u0432\u0438\u0434\u0438\u043c \u043d\u0430\u0448 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 ARM, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0442\u044f\u043d\u0443\u043b\u0441\u044f \u0438\u0437 Path. \u0418\u0434\u0435\u043c \u0432 \u0440\u0430\u0437\u0434\u0435\u043b <strong>Devices<\/strong> \u043d\u0430 \u0432\u043a\u043b\u0430\u0434\u043a\u0443 <strong>Bare Metal<\/strong> \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c <strong>OpenOCD<\/strong> server. \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <strong>OpenOCD-STM32F103<\/strong>.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u043f\u043e\u043b\u0435 <strong>Executable file<\/strong> \u043f\u0438\u0448\u0435\u043c \u043f\u0443\u0442\u044c \u043a \u043d\u0430\u0448\u0435\u043c\u0443 <strong>openocd <\/strong>(\u043f\u043e-\u0438\u0434\u0435\u0435, \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0438\u0437 path).<\/p>\n<p>\u0412 \u043f\u043e\u043b\u0435 <strong>Root scripts<\/strong> directory \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043d\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0441\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u043c\u0438 \u0432 openocd.<\/p>\n<p>\u0412 \u043f\u043e\u043b\u0435 <strong>Additional arguments<\/strong> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 MK. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u043e\u043d\u0444\u0438\u0433 \u0434\u043b\u044f STLink \u0438 target. \u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u0432\u043a\u043b\u0430\u0434\u043a\u0443 <strong>Devices<\/strong>. \u041d\u0430\u0436\u0438\u043c\u0430\u0435\u043c <strong>Add->Bare Metal Device<\/strong> \u0438 <strong>Start Wizard<\/strong>. \u0412 \u043f\u043e\u044f\u0432\u0438\u0432\u0448\u0435\u043c\u0441\u044f \u043e\u043a\u043d\u0435 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c <strong>Debug server provider<\/strong> \u0440\u0430\u043d\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 <strong>OpenOCD-STM32F103<\/strong>. \u0414\u0430\u043b\u0435\u0435 Finish.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u0432 <strong>Kits<\/strong> \u0438 \u0434\u043e\u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043d\u0430\u0448 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442. \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c <strong>Device type<\/strong> \u0438 <strong>Device \u2013 Bar Metal Device<\/strong>. \u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c QtCreator \u043f\u043e\u043a\u0430 \u043e\u0442\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<h2>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/h2>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 <strong>CMSIS<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043c\u043e\u0440\u0433\u0430\u0442\u044c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430\u043c\u0438.<\/p>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u0442\u044f\u043d\u0443\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432 \u0432\u0438\u0434\u0435 submodules \u0438\u0437 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432 ARM \u0438 ST. \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c bash-\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441 git. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0430\u043f\u043a\u0443 led_blink_cmsis \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u0432 \u043d\u0435\u0435.<\/p>\n<pre><code>mkdir led_blink_cmsis &amp;&amp; cd led_blink_cmsis<\/code><\/pre>\n<p>\u0412\u043d\u0443\u0442\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0430\u043f\u043a\u0438 <strong>build<\/strong>, <strong>lib<\/strong> \u0438 <strong>src<\/strong>.<\/p>\n<pre><code>mkdir build &amp;&amp; mkdir src &amp;&amp; mkdir lib<\/code><\/pre>\n<p>\u0412 \u043f\u0430\u043f\u043a\u0435 <strong>build<\/strong> \u0431\u0443\u0434\u0443\u0442 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b \u0441\u0431\u043e\u0440\u043a\u0438, \u0432 <strong>src<\/strong> \u2013 \u043d\u0430\u0448\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438, \u0430 \u0432 <strong>lib<\/strong> \u2013 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.<\/p>\n<p>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c git.<\/p>\n<pre><code>git init<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 cmsis \u0434\u043b\u044f \u0431\u0438\u043b\u0434\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <strong>git submodules<\/strong>. \u041f\u0435\u0440\u0432\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u2013 \u0444\u043e\u0440\u043a \u043e\u0442 ARM, \u0432\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f STM32 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430 F1. <\/p>\n<pre><code>git submodule add https:\/\/github.com\/STMicroelectronics\/cmsis_core lib\/cmsis_core &amp;&amp; cd lib\/cmsis_core git checkout v5.6.0 &amp;&amp; cd ..\/..<\/code><\/pre>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<pre><code>git submodule add https:\/\/github.com\/STMicroelectronics\/cmsis_device_f1 lib\/cmsis_device_f1 &amp;&amp; cd lib\/cmsis_device_f1 git checkout v4.3.3 &amp;&amp; cd ..\/..<\/code><\/pre>\n<p>Git checkout \u0437\u0434\u0435\u0441\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u043b\u0438\u0437\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 5.6.0 \u0438 4.3.3 \u0434\u043b\u044f cmsis_core \u0438 cmsis_device \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b\u044b <strong>main.c<\/strong>, <strong>init.h<\/strong> \u0438 <strong>init.c<\/strong> \u0432 \u043f\u0430\u043f\u043a\u0435 <strong>src<\/strong>, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434.<\/p>\n<pre><code class=\"bash\">touch src\/main.c src\/init.h src\/init.c<\/code><\/pre>\n<p>\u041d\u0430\u043f\u043e\u043b\u043d\u0438\u043c \u0444\u0430\u0439\u043b\u044b \u043a\u043e\u0434\u043e\u043c. \u0412 \u0444\u0430\u0439\u043b\u0435 <strong>main.c<\/strong> \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>clock_init<\/strong> \u0438 <strong>port_init<\/strong>. \u042d\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u0442\u0430\u043a\u0442\u043e\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u041c\u041a \u0438 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442 \u043a\u0432\u0430\u0440\u0446\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e\u0440\u0442\u0430 C \u043d\u0430 \u0432\u044b\u0445\u043e\u0434 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043f\u0443\u0448-\u043f\u0443\u043b\u043b. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, <strong>init.c<\/strong> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>delay_ms<\/strong>. <\/p>\n<details class=\"spoiler\">\n<summary>main.c<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#include \"init.h\"  int main(void) {     clock_init();                                                \/\/Clock initialisation     port_init();                                                 \/\/Port initialisation     while(1)     {         GPIOC->BSRR = GPIO_BSRR_BR13;                            \/\/Pin 13 of PORT C on         delay_ms(100);         GPIOC->BSRR = GPIO_BSRR_BS13;                            \/\/Pin 13 of PORT C off         delay_ms(100);     }     return 0; } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>init.h<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#ifndef STM32F103xB #define STM32F103xB #endif  #include \"stm32f1xx.h\"  int clock_init(); void port_init(); void delay_ms(uint16_t); <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>init.c<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#include \"init.h\"  volatile uint32_t SysTickDelayMsec = 0;  void SysTick_Handler(void) {     --SysTickDelayMsec; }  \/* OSC - 8 MHz PLLSRC - 8 MHz SYSCLK - 16 MHz  PLL - 2 AHB - 1\/16 *\/ int clock_init() {     RCC->CR |= RCC_CR_HSEON;                                    \/\/Start HSE generator     for(volatile int StartUpCounter = 0; ; ++StartUpCounter)    \/\/Wait for successfull start or timeout     {         if(RCC->CR &amp; RCC_CR_HSERDY)                             \/\/If started successfully, break the cycle         {             break;         }         if(StartUpCounter > 4096)                               \/\/If not started - turn off and return an error         {             RCC->CR &amp;= ~RCC_CR_HSEON;                           \/\/Stop HSE             return 1;         }     }     RCC->CFGR = 0;                                              \/\/PLL mult is equal 2     RCC->CFGR |= RCC_CFGR_PLLSRC;                               \/\/Clock PLL from HSE     RCC->CR |= RCC_CR_PLLON;                                    \/\/Start PLL     for(volatile int StartUpCounter = 0; ; ++StartUpCounter)    \/\/Wait for successfull start or timeout     {         if(RCC->CR &amp; RCC_CR_PLLRDY)                             \/\/If started successfully, break the cycle         {             break;         }         if(StartUpCounter > 4096)                               \/\/If PLL didn't start , turn off everything and return an error         {             RCC->CR &amp;= ~RCC_CR_HSEON;                           \/\/Stop HSE             RCC->CR &amp;= ~RCC_CR_PLLON;                           \/\/Stop PLL             return 2;         }     }     FLASH->ACR |= FLASH_ACR_LATENCY;                            \/\/0 cycles for flash, core clock 16 MHz     RCC->CFGR |= RCC_CFGR_PPRE2;                                \/\/APB2 turned off (0 by default)     RCC->CFGR |= RCC_CFGR_HPRE_3 |                  RCC_CFGR_HPRE_1 |                  RCC_CFGR_HPRE_0;                               \/\/AHB prescaler 16     RCC->CFGR |= RCC_CFGR_SW_1;                                 \/\/Switch to PLL     while((RCC->CFGR &amp; RCC_CFGR_SWS) != RCC_CFGR_SWS_PLL);      \/\/Wait for switch to PLL     RCC->CR &amp;= ~RCC_CR_HSION;                                   \/\/Turn off the internal clock for energy save     SystemCoreClockUpdate();                                    \/\/Apply alterations to generator     SysTick_Config(SystemCoreClock\/1000);                       \/\/Initialisation of interrupt (1 ms)     return 0;                                                   \/\/Return 0 if success }  void port_init() {     RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;                         \/\/Turn on clock for GPIOC     GPIOC->CRH = 0;     GPIOC->CRH |= GPIO_CRH_MODE13;                              \/\/Pin 13 of PORT C in Push-Pull mode     GPIOC->BSRR |= GPIO_BSRR_BR13;                              \/\/Pin 13 of PORT C reset }  void delay_ms(uint16_t msec)                                     \/\/Delay function {     SysTickDelayMsec = msec;     while (SysTickDelayMsec); } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0418, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 <strong>Makefile<\/strong>, \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0448\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430. \u0428\u0430\u0431\u043b\u043e\u043d \u044d\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0432\u0437\u044f\u0442 \u0438\u0437 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u043a\u043e\u0434\u0430 <strong>mxcube<\/strong> \u0438 \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u043f\u043e\u0434 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442. \u0424\u0430\u0439\u043b \u0438\u043c\u0435\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>Makefile<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>###################################### # target ###################################### TARGET = mppt_firmware  ###################################### # building variables ###################################### DEBUG = 1  OPT = -O0  ####################################### # paths ####################################### BUILD_DIR = build  ###################################### # source ###################################### C_SOURCES =  \\ src\/main.c \\ src\/init.c \\ lib\/cmsis_device_f1\/Source\/Templates\/system_stm32f1xx.c  ASM_SOURCES =  \\ lib\/cmsis_device_f1\/Source\/Templates\/gcc\/startup_stm32f103xb.s  ####################################### # binaries ####################################### PREFIX = arm-none-eabi-  ifdef GCC_PATH CC = $(GCC_PATH)\/$(PREFIX)gcc AS = $(GCC_PATH)\/$(PREFIX)gcc -x assembler-with-cpp CP = $(GCC_PATH)\/$(PREFIX)objcopy SZ = $(GCC_PATH)\/$(PREFIX)size else CC = $(PREFIX)gcc AS = $(PREFIX)gcc -x assembler-with-cpp CP = $(PREFIX)objcopy SZ = $(PREFIX)size endif HEX = $(CP) -O ihex BIN = $(CP) -O binary -S   ####################################### # CFLAGS ####################################### CPU = -mcpu=cortex-m3 MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI)  AS_DEFS =   C_DEFS =  \\ -DSTM32F103xB  AS_INCLUDES =   C_INCLUDES =  \\ -Isrc \\ -Ilib\/cmsis_core\/Include \\<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-342483","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/342483","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=342483"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/342483\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=342483"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=342483"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=342483"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}