{"id":366269,"date":"2024-05-21T02:55:39","date_gmt":"2024-05-21T02:55:39","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=366269"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=366269","title":{"rendered":"<span>\u041c\u0438\u043b\u0430\u043d\u0434\u0440 + GCC + VSCode. \u041f\u0440\u043e\u0431\u0443\u0435\u043c \u043c\u0438\u0433\u0430\u0442\u044c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c \u043d\u0430 \u043e\u0442\u0435\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c ARM32 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435<\/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<p>\u0413\u043e\u0434 \u043d\u0430\u0437\u0430\u0434 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b <a href=\"https:\/\/habr.com\/ru\/articles\/713432\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u044e <\/a>\u043e\u0431 \u043e\u0442\u043b\u0430\u0434\u043a\u0435 STM32 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u0438\u0437 \u043f\u043e\u0434 VSCode, \u0441 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0435\u0439 \u0432 GCC \u0438 \u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e CMake. \u0410 \u0432 \u0434\u0435\u043a\u0430\u0431\u0440\u0435 \u043c\u043d\u0435 \u0432 \u0440\u0443\u043a\u0438 \u043f\u043e\u043f\u0430\u043b\u0438 \u0434\u0432\u0435 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u043e\u0442\u0435\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u041a1986\u0412\u041592FI (MDR1211FI1). \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 SPL \u043d\u0430 C, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u043f\u043b\u043e\u0445\u0443\u044e \u0431\u0430\u0437\u0443 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0439 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 \u0432 Keil \u0438 IAR; \u043e\u0434\u043d\u0430\u043a\u043e \u044f, average C++20+ enjoyer , \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0441\u0432\u043e\u0439 \u0442\u0443\u043b\u0447\u0435\u0439\u043d \u043d\u0430 \u043d\u043e\u0432\u043e\u0435 \u0436\u0435\u043b\u0435\u0437\u043e.<\/p>\n<h2>\u041e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430<\/h2>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 &#171;\u0434\u0436\u0435\u043d\u0442\u043b\u044c\u043c\u0435\u043d\u0441\u043a\u0438\u0439 \u043d\u0430\u0431\u043e\u0440&#187; \u2013 \u043f\u043e\u0440\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, USB-C, \u0442\u0440\u0438 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430 (\u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u0438\u0442\u0430\u043d\u0438\u044f, \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440 \u0440\u0435\u0436\u0438\u043c\u0430 STANDBY \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434) \u0438 \u0434\u0432\u0430 \u043a\u0432\u0430\u0440\u0446\u0435\u0432\u044b\u0445 \u0440\u0435\u0437\u043e\u043d\u0430\u0442\u043e\u0440\u0430 \u043f\u043e\u0434 HSE \u0438 LSE.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b10\/157\/82a\/b1015782ae37a8c0a5b3044f8eac06fa.png\" alt=\"P.S.\u0423 \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043f\u0443\u0442\u0430\u043d\u044b 1 \u0438 3 \u0432\u044b\u0432\u043e\u0434\u044b, \u0442\u0430\u043a \u0447\u0442\u043e \u043e\u043d \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043f\u0443\u0437\u043e\u043c \u043a \u043f\u043b\u0430\u0442\u0435P.S.2 \u0411\u0443\u0434\u044c\u0442\u0435 \u043f\u0440\u0438\u043b\u0435\u0436\u043d\u044b \u043f\u0440\u0438 \u043f\u0430\u0439\u043a\u0435 QFN \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c, \u0438\u043d\u0430\u0447\u0435 \u0435\u0441\u0442\u044c \u0440\u0438\u0441\u043a \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u043d\u0435\u0440\u0430\u0431\u043e\u0442\u0443 \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432\u0430\u0448 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0447\u0443\u0442\u044c \u043c\u0435\u043d\u0435\u0435 \u0447\u0435\u043c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0442\u0435\u0440\u043c\u043e\u043f\u0430\u0434, \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b \u043f\u043e \u043f\u0435\u0440\u0438\u043c\u0435\u0442\u0440\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0438\u0441\u044f\u0442 \u0432 \u0432\u043e\u0437\u0434\u0443\u0445\u0435\" title=\"P.S.\u0423 \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043f\u0443\u0442\u0430\u043d\u044b 1 \u0438 3 \u0432\u044b\u0432\u043e\u0434\u044b, \u0442\u0430\u043a \u0447\u0442\u043e \u043e\u043d \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043f\u0443\u0437\u043e\u043c \u043a \u043f\u043b\u0430\u0442\u0435P.S.2 \u0411\u0443\u0434\u044c\u0442\u0435 \u043f\u0440\u0438\u043b\u0435\u0436\u043d\u044b \u043f\u0440\u0438 \u043f\u0430\u0439\u043a\u0435 QFN \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c, \u0438\u043d\u0430\u0447\u0435 \u0435\u0441\u0442\u044c \u0440\u0438\u0441\u043a \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u043d\u0435\u0440\u0430\u0431\u043e\u0442\u0443 \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432\u0430\u0448 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0447\u0443\u0442\u044c \u043c\u0435\u043d\u0435\u0435 \u0447\u0435\u043c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0442\u0435\u0440\u043c\u043e\u043f\u0430\u0434, \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b \u043f\u043e \u043f\u0435\u0440\u0438\u043c\u0435\u0442\u0440\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0438\u0441\u044f\u0442 \u0432 \u0432\u043e\u0437\u0434\u0443\u0445\u0435\" width=\"490\" height=\"340\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b10\/157\/82a\/b1015782ae37a8c0a5b3044f8eac06fa.png\"\/><\/p>\n<div><figcaption>P.S.\u0423 \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043f\u0443\u0442\u0430\u043d\u044b 1 \u0438 3 \u0432\u044b\u0432\u043e\u0434\u044b, \u0442\u0430\u043a \u0447\u0442\u043e \u043e\u043d \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043f\u0443\u0437\u043e\u043c \u043a \u043f\u043b\u0430\u0442\u0435<br \/>P.S.2 \u0411\u0443\u0434\u044c\u0442\u0435 \u043f\u0440\u0438\u043b\u0435\u0436\u043d\u044b \u043f\u0440\u0438 \u043f\u0430\u0439\u043a\u0435 QFN \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c, \u0438\u043d\u0430\u0447\u0435 \u0435\u0441\u0442\u044c \u0440\u0438\u0441\u043a \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u043d\u0435\u0440\u0430\u0431\u043e\u0442\u0443 \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432\u0430\u0448 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0447\u0443\u0442\u044c \u043c\u0435\u043d\u0435\u0435 \u0447\u0435\u043c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0442\u0435\u0440\u043c\u043e\u043f\u0430\u0434, \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b \u043f\u043e \u043f\u0435\u0440\u0438\u043c\u0435\u0442\u0440\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0438\u0441\u044f\u0442 \u0432 \u0432\u043e\u0437\u0434\u0443\u0445\u0435<\/figcaption><\/div>\n<\/figure>\n<h2>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440<\/h2>\n<p>\u0414\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0439 J-Link V9\/V11. \u0414\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u041f\u041e SEGGER <a href=\"https:\/\/support.milandr.ru\/base\/primenenie\/programmirovanie-32-razryadnykh-mk\/nachalo-raboty\/47534\/?sphrase_id=309988&amp;sphrase_id=309988\" rel=\"noopener noreferrer nofollow\">\u043e\u043f\u0438\u0441\u0430\u043d \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u041c\u041a<\/a>. \u041f\u0440\u0438\u0432\u0435\u0434\u0443 \u0437\u0434\u0435\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u043e\u0432, \u0447\u0442\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u043f\u043e \u043f\u0443\u0442\u0438 <code>%APPDATA%\\SEGGER\\JLinkDevices<\/code>.<\/p>\n<details class=\"spoiler\">\n<summary>\u0441\u043f\u043e\u0439\u043b\u0435\u0440<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 JLinkDevices.xml<\/p>\n<pre><code class=\"xml\">&lt;Device>       &lt;ChipInfo Vendor=\"Milandr\"        Name=\"K1986BE1QI\"        WorkRAMAddr=\"0x20100000\"        WorkRAMSize=\"0x4000\"        Core=\"JLINK_CORE_CORTEX_M1\" \/>        &lt;FlashBankInfo Name=\"K1986BE1QI Flash\"        BaseAddr=\"0x0\"        MaxSize=\"0x20000\"        Loader=\"Devices\\Milandr\\MDR32F1QI.FLM\"        LoaderType=\"FLASH_ALGO_TYPE_OPEN\"        AlwaysPresent=\"1\"\/>  &lt;\/Device>  &lt;Device>        &lt;ChipInfo Vendor=\"Milandr\"         Name=\"K1986BE92QI\"         WorkRAMAddr=\"0x20000000\"         WorkRAMSize=\"0x8000\"         Core=\"JLINK_CORE_CORTEX_M3\"\/>         &lt;FlashBankInfo Name=\"K1986BE92QI Flash\"         BaseAddr=\"0x8000000\"         MaxSize=\"0x20000\"         Loader=\"Devices\\Milandr\\MDR32F9Q2I.FLM\"         LoaderType=\"FLASH_ALGO_TYPE_OPEN\"         AlwaysPresent=\"1\" \/>  &lt;\/Device><\/code><\/pre>\n<p>\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 Devices.xml<\/p>\n<pre><code class=\"xml\">&lt;Database> &lt;Device>        &lt;ChipInfo Vendor=\"Milandr\"         Name=\"K1986BE1QI\"         WorkRAMAddr=\"0x20000000\"         WorkRAMSize=\"0x8000\"         Core=\"JLINK_CORE_CORTEX_M3\"\/>         &lt;FlashBankInfo Name=\"K1986BE1QI Flash\"         BaseAddr=\"0x8000000\"         MaxSize=\"0x20000\"  Loader=\"C:\\Users\\Filipp\\AppData\\Roaming\\SEGGER\\JLinkDevices\\Milandr\\MDR32F1QI.FLM\"         LoaderType=\"FLASH_ALGO_TYPE_OPEN\"         AlwaysPresent=\"1\" \/>  &lt;\/Device>  &lt;Device>        &lt;ChipInfo Vendor=\"Milandr\"         Name=\"K1986BE92QI\"         WorkRAMAddr=\"0x20000000\"         WorkRAMSize=\"0x8000\"         Core=\"JLINK_CORE_CORTEX_M3\"\/>         &lt;FlashBankInfo Name=\"K1986BE92QI Flash\"         BaseAddr=\"0x8000000\"         MaxSize=\"0x20000\"  Loader=\"C:\\Users\\Filipp\\AppData\\Roaming\\SEGGER\\JLinkDevices\\Milandr\\MDR32F9Q2I.FLM\"         LoaderType=\"FLASH_ALGO_TYPE_OPEN\"         AlwaysPresent=\"1\" \/>  &lt;\/Device> &lt;\/Database><\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h2>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/h2>\n<p>\u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f VSCode, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0432 <a href=\"https:\/\/habr.com\/ru\/articles\/713432\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a>. \u0422\u0430\u043a\u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0441 <a href=\"https:\/\/support.milandr.ru\/products\/mikrokontrollery_i_protsessory\/32_razryadnye_mikrokontrollery\/1986ve9kh_yadro_arm_cortex_m3\/k1986ve92fi\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0430\u0439\u0442\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f<\/a> Software pack \u0434\u043b\u044f Keil MDK 5 \u0438 Standard Peripherals Library.<\/p>\n<p>\u0412 \u043a\u043e\u0440\u0435\u043d\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0444\u0430\u0439\u043b<code>MDR32F9Q2I.svd<\/code>  (\u0431\u0440\u0430\u0442\u044c \u0438\u0437 \u043f\u0430\u043f\u043a\u0438 <code>Standard Peripherals Library\\SVD\\MDR32FxQI<\/code>), \u0438 \u043f\u0430\u043f\u043a\u0443 <code>Standard Peripherals Library\\Libraries\\SPL\\MDR32FxQI<\/code>, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0435\u043c \u0432 <code>MDR32FxQI_SPL<\/code>. \u0422\u0430\u043a\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u0432\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438: CoreSupport \u0438 DeviceSupport. \u0412 \u043f\u0430\u043f\u043a\u0443 CoreSupport \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b \u0438\u0437 <code>Standard Peripherals Library\\Libraries\\CMSIS\\MDR32FxQI\\CoreSupport\\CM3<\/code>, \u0430 \u0432 DeviceSupport \u2013 \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b \u0438\u0437 <code>Standard Peripherals Library\\Libraries\\CMSIS\\MDR32FxQI\\DeviceSupport\\MDR32F9Q2I\\inc<\/code> \u0438 <code>Standard Peripherals Library\\Libraries\\CMSIS\\MDR32FxQI\\DeviceSupport\\MDR32F9Q2I\\startup<\/code>. <\/p>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code>.\/: MDR32F9Q2I.svd .\/CoreSupport\/: core_cm3.h core_cmFunc.h core_cmInstr.h .\/DeviceSupport\/: MDR32F9Q2I.h system_MDR32F9Q2I.c system_MDR32F9Q2I.h .\/MDR32FxQI_SPL\/: inc\/ src\/ MDR32FxQI_config.h<\/code><\/pre>\n<h2>\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434<\/h2>\n<p>\u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u041c\u041a \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f linker-\u0441\u043a\u0440\u0438\u043f\u0442 \u0438 startup-\u0444\u0430\u0439\u043b, \u043d\u0430\u0437\u043e\u0432\u0451\u043c \u0438\u0445 <code>MDR32F9Q2I.ld<\/code> \u0438 <code>startup_gcc_MDR32F9Q2I.s<\/code> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u0417\u0430 \u043e\u0441\u043d\u043e\u0432\u0443 \u0432\u043e\u0437\u044c\u043c\u0451\u043c \u0444\u0430\u0439\u043b\u044b \u0434\u043b\u044f STM32F103C8. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432 \u043d\u0438\u0445 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0438\u0437 <a href=\"https:\/\/youtu.be\/gdRmETe4QEo?si=1FFz8Nv6afaI4Lr\" rel=\"noopener noreferrer nofollow\"><u>\u0432\u0438\u0434\u0435\u043e1<\/u><\/a> \u0438 <a href=\"https:\/\/youtu.be\/7stymN3eYw0?si=9LArZwVWfc9BKcQT\" rel=\"noopener noreferrer nofollow\"><u>\u0432\u0438\u0434\u0435\u043e2<\/u><\/a>.<\/p>\n<details class=\"spoiler\">\n<summary>MDR32F9Q2I.ld<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lisp\">\/* Abstract: Linker script for MDR32F9Q2I 128 Kb FLASH + 32 Kb RAM  *\/  ENTRY(Reset_handler);  MEMORY { FLASH(rx) : ORIGIN = 0x08000000, LENGTH = 128K RAM(xrw)  : ORIGIN = 0x20000000, LENGTH = 32K }  _estack = ORIGIN(RAM) + LENGTH(RAM);    \/* end of RAM *\/ _Min_Heap_Size = 0x200;      \/* required amount of heap  *\/ _Min_Stack_Size = 0x400; \/* required amount of stack *\/  \/* Define output sections *\/ SECTIONS {   \/* The startup code goes first into FLASH *\/   .isr_vector :   {     . = ALIGN(4);     KEEP(*(.isr_vector)) \/* Startup code *\/     . = ALIGN(4);   } >FLASH    \/* The program code and other data goes into FLASH *\/   .text :   {     . = ALIGN(4);     *(.text)           \/* .text sections (code) *\/     *(.text*)          \/* .text* sections (code) *\/     *(.glue_7)         \/* glue arm to thumb code *\/     *(.glue_7t)        \/* glue thumb to arm code *\/     *(.eh_frame)      KEEP (*(.init))     KEEP (*(.fini))      . = ALIGN(4);     _etext = .;        \/* define a global symbols at end of code *\/   } >FLASH    \/* Constant data goes into FLASH *\/   .rodata :   {     . = ALIGN(4);     *(.rodata)         \/* .rodata sections (constants, strings, etc.) *\/     *(.rodata*)        \/* .rodata* sections (constants, strings, etc.) *\/     . = ALIGN(4);   } >FLASH    .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH   .ARM : {     __exidx_start = .;     *(.ARM.exidx*)     __exidx_end = .;   } >FLASH    .preinit_array     :   {     PROVIDE_HIDDEN (__preinit_array_start = .);     KEEP (*(.preinit_array*))     PROVIDE_HIDDEN (__preinit_array_end = .);   } >FLASH   .init_array :   {     PROVIDE_HIDDEN (__init_array_start = .);     KEEP (*(SORT(.init_array.*)))     KEEP (*(.init_array*))     PROVIDE_HIDDEN (__init_array_end = .);   } >FLASH   .fini_array :   {     PROVIDE_HIDDEN (__fini_array_start = .);     KEEP (*(SORT(.fini_array.*)))     KEEP (*(.fini_array*))     PROVIDE_HIDDEN (__fini_array_end = .);   } >FLASH    \/* used by the startup to initialize data *\/   _sidata = LOADADDR(.data);    \/* Initialized data sections goes into RAM, load LMA copy after code *\/   .data :    {     . = ALIGN(4);     _sdata = .;        \/* create a global symbol at data start *\/     *(.data)           \/* .data sections *\/     *(.data*)          \/* .data* sections *\/      . = ALIGN(4);     _edata = .;        \/* define a global symbol at data end *\/   } >RAM AT> FLASH       \/* Uninitialized data section *\/   . = ALIGN(4);   .bss :   {     \/* This is used by the startup in order to initialize the .bss secion *\/     _sbss = .;         \/* define a global symbol at bss start *\/     __bss_start__ = _sbss;     *(.bss)     *(.bss*)     *(COMMON)      . = ALIGN(4);     _ebss = .;         \/* define a global symbol at bss end *\/     __bss_end__ = _ebss;   } >RAM    \/* User_heap_stack section, used to check that there is enough RAM left *\/   ._user_heap_stack :   {     . = ALIGN(8);     PROVIDE ( end = . );     PROVIDE ( _end = . );     . = . + _Min_Heap_Size;     . = . + _Min_Stack_Size;     . = ALIGN(8);   } >RAM        \/* Remove information from the standard libraries *\/   \/DISCARD\/ :   {     libc.a ( * )     libm.a ( * )     libgcc.a ( * )   }    .ARM.attributes 0 : { *(.ARM.attributes) } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>startup_gcc_MDR32F9Q2I.s<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"assembly\">.syntax unified .cpu cortex-m3 .fpu softvfp .thumb  \/* start address for the initialization values of the .data section. defined in linker script *\/ .word _sidata \/* start address for the .data section. defined in linker script *\/ .word _sdata \/* end address for the .data section. defined in linker script *\/ .word _edata \/* start address for the .bss section. defined in linker script *\/ .word _sbss \/* end address for the .bss section. defined in linker script *\/ .word _ebss  .global __Vectors .global Default_Handler  \/****************************************************************************** * * The minimal vector table for a Cortex M3.  Note that the proper constructs * must be placed on this to ensure that it ends up at physical address * 0x0000.0000. * ******************************************************************************\/   .section .isr_vector,\"a\",%progbits   .type __Vectors, %object   .size __Vectors, .-__Vectors  __Vectors:   .word _estack             \/* Top of Stack *\/   .word Reset_Handler       \/* Reset Handler *\/   .word NMI_Handler         \/* NMI Handler *\/   .word HardFault_Handler   \/* Hard Fault Handler *\/   .word MemManage_Handler   \/* MPU Fault Handler *\/   .word BusFault_Handler    \/* Bus Fault Handler *\/   .word UsageFault_Handler  \/* Usage Fault Handler *\/   .word 0                   \/* Reserved *\/   .word 0                   \/* Reserved *\/   .word 0                   \/* Reserved *\/   .word 0                   \/* Reserved *\/   .word SVC_Handler         \/* SVCall Handler *\/   .word DebugMon_Handler    \/* Debug Monitor Handler *\/   .word 0                   \/* Reserved *\/   .word PendSV_Handler      \/* PendSV Handler *\/   .word SysTick_Handler     \/* SysTick Handler *\/   \/* External Interrupts*\/   .word CAN1_IRQHandler            \/*   0 CAN1 Handler *\/   .word CAN2_IRQHandler            \/*   1 CAN2 Handler *\/   .word USB_IRQHandler             \/*   2 USB Host Handler *\/   .word 0                          \/*     Reserved *\/   .word 0                          \/*     Reserved *\/   .word DMA_IRQHandler             \/*   5 DMA Handler *\/   .word UART1_IRQHandler           \/*   6 UART1 Handler *\/   .word UART2_IRQHandler           \/*   7 UART2 Handler *\/   .word SSP1_IRQHandler            \/*   8 SSP1 Handler *\/   .word 0                          \/*     Reserved *\/   .word I2C_IRQHandler             \/*  10 I2C Handler *\/   .word POWER_IRQHandler           \/*  11 POWER Handler *\/   .word WWDG_IRQHandler            \/*  12 WWDG Handler *\/   .word 0                          \/*     Reserved *\/   .word Timer1_IRQHandler          \/*  14 Timer1 Handler *\/   .word Timer2_IRQHandler          \/*  15 Timer2 Handler *\/   .word Timer3_IRQHandler          \/*  16 Timer3 Handler *\/   .word ADC_IRQHandler             \/*  17 ADC Handler *\/   .word 0                          \/*     Reserved *\/   .word COMPARATOR_IRQHandler      \/*  19 Comparator Handler *\/   .word SSP2_IRQHandler            \/*  20 SSP2 Handler *\/   .word 0                          \/*     Reserved *\/   .word 0                          \/*     Reserved *\/   .word 0                          \/*     Reserved *\/   .word 0                          \/*     Reserved *\/   .word 0                          \/*     Reserved *\/   .word 0                          \/*     Reserved *\/   .word BACKUP_IRQHandler          \/*  27 BKP Handler *\/   .word EXT_INT1_IRQHandler        \/*  28 EXT_INT1 Handler *\/   .word EXT_INT2_IRQHandler        \/*  29 EXT_INT2 Handler *\/   .word EXT_INT3_IRQHandler        \/*  30 EXT_INT3 Handler *\/   .word EXT_INT4_IRQHandler        \/*  31 EXT_INT4 Handler *\/   \/*******************************************************************************  * @brief  This is the code that gets called when the processor first  *          starts execution following a reset event. Only the absolutely  *          necessary set is performed, after which the application  *          supplied main() routine is called.  * @param  None  * @retval : None *******************************************************************************\/    .section .text.Reset_Handler   .weak Reset_Handler   .type Reset_Handler, %function Reset_Handler:  \/* Call the clock system initialization function.*\/     bl  SystemInit  \/* Copy the data segment initializers from flash to SRAM *\/   ldr r0, =_sdata   ldr r1, =_edata   ldr r2, =_sidata   movs r3, #0   b LoopCopyDataInit  CopyDataInit:   ldr r4, [r2, r3]   str r4, [r0, r3]   adds r3, r3, #4  LoopCopyDataInit:   adds r4, r0, r3   cmp r4, r1   bcc CopyDataInit    \/* Zero fill the bss segment. *\/   ldr r2, =_sbss   ldr r4, =_ebss   movs r3, #0   b LoopFillZerobss  FillZerobss:   str  r3, [r2]   adds r2, r2, #4  LoopFillZerobss:   cmp r2, r4   bcc FillZerobss  \/* Call static constructors *\/     bl __libc_init_array \/* Call the application's entry point.*\/   bl main   bx lr .size Reset_Handler, .-Reset_Handler     \/*******************************************************************************  * @brief  This is the code that gets called when the processor receives an  *         unexpected interrupt.  This simply enters an infinite loop, preserving  *         the system state for examination by a debugger.  *  * @param  None  * @retval : None *******************************************************************************\/     .section .text.Default_Handler,\"ax\",%progbits Default_Handler: Infinite_Loop:   b Infinite_Loop   .size Default_Handler, .-Default_Handler   \/******************************************************************************* * * Provide weak aliases for each Exception handler to the Default_Handler. * As they are weak aliases, any function with the same name will override * this definition. * *******************************************************************************\/    .weak NMI_Handler   .thumb_set NMI_Handler,Default_Handler    .weak HardFault_Handler   .thumb_set HardFault_Handler,Default_Handler    .weak MemManage_Handler   .thumb_set MemManage_Handler,Default_Handler    .weak BusFault_Handler   .thumb_set BusFault_Handler,Default_Handler    .weak UsageFault_Handler   .thumb_set UsageFault_Handler,Default_Handler    .weak SVC_Handler   .thumb_set SVC_Handler,Default_Handler    .weak DebugMon_Handler   .thumb_set DebugMon_Handler,Default_Handler    .weak PendSV_Handler   .thumb_set PendSV_Handler,Default_Handler    .weak SysTick_Handler   .thumb_set SysTick_Handler,Default_Handler    .weak CAN1_IRQHandler   .thumb_set CAN1_IRQHandler,Default_Handler      .weak CAN2_IRQHandler   .thumb_set CAN2_IRQHandler,Default_Handler    .weak USB_IRQHandler   .thumb_set USB_IRQHandler,Default_Handler    .weak DMA_IRQHandler   .thumb_set DMA_IRQHandler,Default_Handler    .weak UART1_IRQHandler   .thumb_set UART1_IRQHandler,Default_Handler    .weak UART2_IRQHandler   .thumb_set UART2_IRQHandler,Default_Handler    .weak SSP1_IRQHandler   .thumb_set SSP1_IRQHandler,Default_Handler    .weak I2C_IRQHandler   .thumb_set I2C_IRQHandler,Default_Handler     .weak POWER_IRQHandler   .thumb_set POWER_IRQHandler,Default_Handler    .weak WWDG_IRQHandler   .thumb_set WWDG_IRQHandler,Default_Handler    .weak Timer1_IRQHandler   .thumb_set Timer1_IRQHandler,Default_Handler    .weak Timer2_IRQHandler   .thumb_set Timer2_IRQHandler,Default_Handler    .weak Timer3_IRQHandler   .thumb_set Timer3_IRQHandler,Default_Handler    .weak ADC_IRQHandler   .thumb_set ADC_IRQHandler,Default_Handler    .weak COMPARATOR_IRQHandler   .thumb_set COMPARATOR_IRQHandler,Default_Handler    .weak SSP2_IRQHandler   .thumb_set SSP2_IRQHandler,Default_Handler    .weak BACKUP_IRQHandler   .thumb_set BACKUP_IRQHandler,Default_Handler    .weak EXT_INT1_IRQHandler   .thumb_set EXT_INT1_IRQHandler,Default_Handler    .weak EXT_INT2_IRQHandler   .thumb_set EXT_INT2_IRQHandler,Default_Handler    .weak EXT_INT3_IRQHandler   .thumb_set EXT_INT3_IRQHandler,Default_Handler    .weak EXT_INT4_IRQHandler   .thumb_set EXT_INT4_IRQHandler,Default_Handler<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p><code>main.c<\/code> \u0444\u0430\u0439\u043b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u043c<\/p>\n<pre><code class=\"cpp\">#define __ASM __asm #define __NOP() __ASM volatile(\"nop\")  int main(){   while(1){     __NOP();   } }<\/code><\/pre>\n<h2>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 VSCode<\/h2>\n<p>\u0414\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0442\u0430\u043a\u0436\u0435 \u0441\u043b\u0435\u0433\u043a\u0430 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0444\u0430\u0439\u043b\u044b .vscode\/launch.json \u0438 .vscode\/tasks.json<\/p>\n<details class=\"spoiler\">\n<summary>launch.json<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"json\">{     \"configurations\": [         {             \"name\": \"Cortex Debug\",             \"type\": \"cortex-debug\",             \"request\": \"launch\",             \"servertype\": \"jlink\",             \"cwd\": \"${workspaceRoot}\",             \/\/ \"executable\": \"build\/mdr_test.elf\",             \"executable\": \"${command:cmake.launchTargetPath}\",             \"preLaunchTask\": \"CMake: build\",             \"preRestartCommands\": [                 \"load\",                 \"enable breakpoint\",                 \"monitor reset\"             ],             \"liveWatch\": {                 \"enabled\": true,                 \"samplesPerSecond\": 2             },             \"runToEntryPoint\": \"main\",             \"showDevDebugOutput\": \"raw\",             \"device\": \"K1986BE92QI\",             \"svdFile\": \"${workspaceRoot}\/MDR32F9Q2I.svd\",         }     ] } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>tasks.json<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"json\">{   \"version\": \"2.0.0\",   \"tasks\": [     {       \"type\": \"cmake\",       \"label\": \"CMake: build\",       \"command\": \"build\",       \"targets\": [           \"ALL_BUILD\"       ],       \"problemMatcher\": [],       \"group\": \"build\"     }   ] }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h2>CMake<\/h2>\n<p>\u041d\u0430 GitHub \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <a href=\"https:\/\/gist.github.com\/elmot\/3b4f0e9f8b23864fdf8bb509c329d051\" rel=\"noopener noreferrer nofollow\">\u0448\u0430\u0431\u043b\u043e\u043d <\/a>\u0434\u043b\u044f CMakeLists.txt \u043f\u043e\u0434 ARM GCC \u043f\u0440\u043e\u0435\u043a\u0442\u044b. \u0412\u043e\u0437\u044c\u043c\u0451\u043c \u0435\u0433\u043e \u0437\u0430 \u043e\u0441\u043d\u043e\u0432\u0443 \u0438 \u0441\u043b\u0435\u0433\u043a\u0430 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c.<\/p>\n<details class=\"spoiler\">\n<summary>CMakeLists.txt<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cmake\">cmake_minimum_required(VERSION 3.20) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS ON) set(CMAKE_C_STANDARD 11) set(CMAKE_SYSTEM_NAME Generic) set(CMAKE_SYSTEM_VERSION 1) # specify cross compilers and tools set(CMAKE_C_COMPILER arm-none-eabi-gcc) set(CMAKE_CXX_COMPILER arm-none-eabi-g++) set(CMAKE_ASM_COMPILER arm-none-eabi-gcc) set(CMAKE_AR arm-none-eabi-ar) set(CMAKE_OBJCOPY arm-none-eabi-objcopy) set(CMAKE_OBJDUMP arm-none-eabi-objdump) set(SIZE arm-none-eabi-size) set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) set(CMAKE_CXX_FLAGS \"${CMAKE_CXX_FLAGS} -Wno-register\") # project settings project(mldr_test C CXX ASM)  add_compile_options(-mfloat-abi=soft) add_compile_options(-mcpu=cortex-m3 -mthumb) add_compile_options(-ffunction-sections -fdata-sections -fno-common -fmessage-length=0) add_compile_options($&lt;$&lt;COMPILE_LANGUAGE:CXX>:-fno-exceptions -fno-rtti>)  include_directories(         ${CMAKE_SOURCE_DIR}\/CoreSupport         ${CMAKE_SOURCE_DIR}\/DeviceSupport         ${CMAKE_SOURCE_DIR}\/MDR32FxQI_SPL )   set(SOURCES     startup_gcc_MDR32F9Q2I.s     DeviceSupport\/system_MDR32F9Q2I.c     main.c )  set(LINKER_SCRIPT ${CMAKE_SOURCE_DIR}\/MDR32F9Q2I.ld)  add_link_options(-Wl,-gc-sections,--print-memory-usage,-Map=${PROJECT_BINARY_DIR}\/${PROJECT_NAME}.map) add_link_options(-mcpu=cortex-m3 -mthumb -mthumb-interwork) add_link_options(-T ${LINKER_SCRIPT})  add_executable(${PROJECT_NAME}.elf ${SOURCES} ${LINKER_SCRIPT}) target_compile_definitions(${PROJECT_NAME}.elf PRIVATE     USE_MDR32F9Q2I ) set_target_properties(${PROJECT_NAME}.elf PROPERTIES EXPORT_COMPILE_COMMANDS ON CXX_STANDARD 20  CXX_STANDARD_REQUIRED True ) # Generate .hex and .bin files set(HEX_FILE ${PROJECT_BINARY_DIR}\/${PROJECT_NAME}.hex) set(BIN_FILE ${PROJECT_BINARY_DIR}\/${PROJECT_NAME}.bin) add_custom_command(TARGET ${PROJECT_NAME}.elf POST_BUILD     COMMAND ${CMAKE_OBJCOPY} -Oihex $&lt;TARGET_FILE:${PROJECT_NAME}.elf> ${HEX_FILE}     COMMAND ${CMAKE_OBJCOPY} -Obinary $&lt;TARGET_FILE:${PROJECT_NAME}.elf> ${BIN_FILE}     COMMENT \"Building ${HEX_FILE} Building ${BIN_FILE}\" )<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h2>\u041c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f<\/h2>\n<p>\u0414\u043b\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f gcc \u0432 \u0444\u0430\u0439\u043b <code>system_MDR32F9Q2I.c<\/code>. \u041d\u0430\u0445\u043e\u0434\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"cpp\">\/** @addtogroup __MDR32F9Q2I_System_Private_Defines MDR32F9Q2I System Private Defines   * @{   *\/  #if defined (__ARMCC_VERSION) \/* ARM Compiler *\/     extern uint32_t __Vectors;     #define __VECTOR_TABLE_ADDRESS &amp;__Vectors #elif defined (__ICCARM__) \/* IAR Compiler *\/     extern uint32_t __vector_table;     #define __VECTOR_TABLE_ADDRESS &amp;__vector_table #elif defined (__CMCARM__) \/* Phyton CMC-ARM Compiler *\/     extern uint32_t __Vectors;     #define __VECTOR_TABLE_ADDRESS &amp;__Vectors #endif<\/code><\/pre>\n<p>\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0435\u0440\u0435\u0434 <code>#endif<\/code> <\/p>\n<pre><code class=\"cpp\">#elif defined (__GNUC__) \/* ARM GCC *\/     extern uint32_t __Vectors;     #define __VECTOR_TABLE_ADDRESS &amp;__Vectors<\/code><\/pre>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043d\u0443\u0436\u043d\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b <code>MDR32FxQI_config.h<\/code>, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"cpp\">#if defined (__ICCARM__) \/* IAR Compiler *\/     #define __attribute__(name_section)     #if defined (USE_MDR32F1QI)         #pragma section = \"EXECUTABLE_MEMORY_SECTION\"         #define IAR_SECTION(section) @ section     #elif defined (USE_MDR32F9Q2I)         #define IAR_SECTION(section)     #endif     #define __RAMFUNC __ramfunc #endif #if defined (__CMCARM__) \/* Phyton CMC-ARM Compiler *\/     #define __attribute__(name_section)     #define IAR_SECTION(section)     #define __RAMFUNC __ramfunc #endif #if defined (__ARMCC_VERSION) \/* ARM Compiler *\/     #define IAR_SECTION(section)     #define __RAMFUNC #endif #if defined (__GNUC__) \/* ARM GCC *\/     #define IAR_SECTION(section)     #define __RAMFUNC #endif<\/code><\/pre>\n<p>\u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f<\/p>\n<h2>\u041f\u0440\u043e\u0431\u0443\u0435\u043c \u043c\u0438\u0433\u0430\u0442\u044c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c<\/h2>\n<p>\u0412\u043e\u0437\u044c\u043c\u0451\u043c \u0437\u0430 \u043e\u0441\u043d\u043e\u0432\u0443 \u043f\u0440\u043e\u0435\u043a\u0442 HelloWord \u0438\u0437 <a href=\"https:\/\/support.milandr.ru\/base\/primenenie\/programmirovanie-32-razryadnykh-mk\/nachalo-raboty\/47553\/\" rel=\"noopener noreferrer nofollow\">\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0441 \u0441\u0430\u0439\u0442\u0430 \u041c\u0438\u043b\u0430\u043d\u0434\u0440\u0430<\/a>.<\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0438 \u0444\u0430\u0439\u043b\u044b \u0432 CMakeLists.txt<\/p>\n<pre><code class=\"cmake\">include_directories(         ${CMAKE_SOURCE_DIR}\/CoreSupport         ${CMAKE_SOURCE_DIR}\/DeviceSupport         ${CMAKE_SOURCE_DIR}\/MDR32FxQI_SPL         ${CMAKE_SOURCE_DIR}\/MDR32FxQI_SPL\/inc ) set(SOURCES     startup_gcc_MDR32F9Q2I.s     DeviceSupport\/system_MDR32F9Q2I.c     main.c     MDR32FxQI_SPL\/src\/MDR32FxQI_rst_clk.c     MDR32FxQI_SPL\/src\/MDR32FxQI_port.c )<\/code><\/pre>\n<p>\u0410 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c <code>main.c<\/code> \u043f\u043e\u0434 \u043d\u043e\u0432\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438<\/p>\n<pre><code class=\"cpp\">#include &lt;MDR32FxQI_port.h> #include &lt;MDR32FxQI_rst_clk.h>  void Delay(int waitTicks);  int main() {   \/\/ \u0417\u0430\u0432\u043e\u0434\u0438\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u0432\u043e\u0434\u0430(-\u043e\u0432) \u043f\u043e\u0440\u0442\u0430 GPIO   PORT_InitTypeDef GPIOInitStruct;   \/\/ \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   RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTC, ENABLE);   \/\/ \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u0432\u043e\u0434\u0430(-\u043e\u0432) \u043f\u043e\u0440\u0442\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043f\u043e   \/\/ \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e   PORT_StructInit(&amp;GPIOInitStruct);   \/\/ \u0418\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043d\u0430\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438   GPIOInitStruct.PORT_Pin = PORT_Pin_2;   GPIOInitStruct.PORT_OE = PORT_OE_OUT;   GPIOInitStruct.PORT_SPEED = PORT_SPEED_SLOW;   GPIOInitStruct.PORT_MODE = PORT_MODE_DIGITAL;   \/\/ \u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u0443\u044e \u043d\u0430\u043c\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u043b\u044f PORTC.   PORT_Init(MDR_PORTC, &amp;GPIOInitStruct);   \/\/   while (1) {     if (PORT_ReadInputDataBit (MDR_PORTC, PORT_Pin_2) == 0){       PORT_SetBits(MDR_PORTC, PORT_Pin_2); \/\/ \u0441\u0432\u0435\u0442\u043e\u0438\u0434\u0438\u043e\u0442 \u043d\u0430 \u043d\u0430\u0448\u0435\u0439 \u043f\u043b\u0430\u0442\u0435     }else{       PORT_ResetBits(MDR_PORTC, PORT_Pin_2);     }     \/\/ \u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430     Delay(100000);   } }  \/\/ \u041f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438, \u043f\u043e\u0437\u0434\u043d\u0435\u0435 \u043c\u044b \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u0435\u0435 \u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0447\u0435\u0440\u0435\u0437 \u0442\u0430\u0439\u043c\u0435\u0440 void Delay(int waitTicks) {   int i;   for (i = 0; i &lt; waitTicks; i++) {     __NOP();   } }<\/code><\/pre>\n<p>\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f, \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0435\u043c\u0441\u044f, \u0440\u0430\u0434\u0443\u0435\u043c\u0441\u044f \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0439 \u043c\u0438\u0433\u0430\u043b\u043a\u0435<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5f6\/160\/b51\/5f6160b51483f88a992598516ead7e00.png\" alt=\"\u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0435\" title=\"\u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0435\" width=\"469\" height=\"280\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5f6\/160\/b51\/5f6160b51483f88a992598516ead7e00.png\"\/><\/p>\n<div><figcaption>\u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0435<\/figcaption><\/div>\n<\/figure>\n<h2>\u041f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 C++<\/h2>\n<p>\u041d\u0435 \u043c\u0443\u0434\u0440\u0441\u0442\u0432\u0443\u044f \u043b\u0443\u043a\u0430\u0432\u043e, \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0435\u043c <code>main.c<\/code> \u0432 <code>main.cpp<\/code> \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0442\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442. \u041d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c <code>exit code 1<\/code>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0448\u0438\u0431\u043e\u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u0438\u0434\u0430:<\/p>\n<pre><code>[build] C:\/Users\/Filipp\/scoop\/apps\/gcc-arm-none-eabi\/current\/bin\/..\/lib\/gcc\/arm-none-eabi\/13.2.1\/..\/..\/..\/..\/arm-none-eabi\/bin\/ld.exe: C:\/Users\/Filipp\/scoop\/apps\/gcc-arm-none-eabi\/current\/bin\/..\/lib\/gcc\/arm-none-eabi\/13.2.1\/thumb\/v7-m\/nofp\\libg.a(libc_a-abort.o): in function `abort': [build] abort.c:(.text.abort+0xa): undefined reference to `_exit' [build] C:\/Users\/Filipp\/scoop\/apps\/gcc-arm-none-eabi\/current\/bin\/..\/lib\/gcc\/arm-none-eabi\/13.2.1\/..\/..\/..\/..\/arm-none-eabi\/bin\/ld.exe: C:\/Users\/Filipp\/scoop\/apps\/gcc-arm-none-eabi\/current\/bin\/..\/lib\/gcc\/arm-none-eabi\/13.2.1\/thumb\/v7-m\/nofp\\libg.a(libc_a-signalr.o): in function `_kill_r': [build] signalr.c:(.text._kill_r+0xe): undefined reference to `_kill' [build] C:\/Users\/Filipp\/scoop\/apps\/gcc-arm-none-eabi\/current\/bin\/..\/lib\/gcc\/arm-none-eabi\/13.2.1\/..\/..\/..\/..\/arm-none-eabi\/bin\/ld.exe: C:\/Users\/Filipp\/scoop\/apps\/gcc-arm-none-eabi\/current\/bin\/..\/lib\/gcc\/arm-none-eabi\/13.2.1\/thumb\/v7-m\/nofp\\libg.a(libc_a-signalr.o): in function `_getpid_r':<\/code><\/pre>\n<p>\u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445 arm-none-eabi-gcc \u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u0427\u0442\u043e\u0431\u044b \u0440\u0435\u0448\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 NoSys \u0438 Nano. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 CMakeLists.txt \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 (\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0438\u0445 \u0442\u0430\u043c \u0436\u0435, \u0433\u0434\u0435 \u0443\u0436\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 add_compile_options \u0438 add_link_options):<\/p>\n<pre><code class=\"cmake\">add_compile_options(     $&lt;$&lt;C_COMPILER_ID:GNU>:--specs=nosys.specs>     $&lt;$&lt;C_COMPILER_ID:GNU>:--specs=nano.specs> )  add_link_options(     $&lt;$&lt;C_COMPILER_ID:GNU>:--specs=nosys.specs>     $&lt;$&lt;C_COMPILER_ID:GNU>:--specs=nano.specs> )<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0431\u0443\u0435\u043c. \u0412\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0432\u044b\u0434\u0430\u0451\u0442 \u0432\u0430\u0440\u043d\u0438\u043d\u0433\u0438<\/p>\n<pre><code>[build] C:\/Users\/Filipp\/scoop\/apps\/gcc-arm-none-eabi\/current\/bin\/..\/lib\/gcc\/arm-none-eabi\/13.2.1\/..\/..\/..\/..\/arm-none-eabi\/bin\/ld.exe: C:\/Users\/Filipp\/scoop\/apps\/gcc-arm-none-eabi\/current\/bin\/..\/lib\/gcc\/arm-none-eabi\/13.2.1\/thumb\/v7-m\/nofp\\libg_nano.a(libc_a-readr.o): in function `_read_r': [build] readr.c:(.text._read_r+0x10): warning: _read is not implemented and will always fail<\/code><\/pre>\n<p> \u043e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b54\/197\/08a\/b5419708a3abcd46aedea9f1f812b2b4.png\" width=\"1919\" height=\"1080\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b54\/197\/08a\/b5419708a3abcd46aedea9f1f812b2b4.png\"\/><\/figure>\n<h2>P.S.<\/h2>\n<details class=\"spoiler\">\n<summary>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 clangd \u0432 VSCode<\/summary>\n<div class=\"spoiler__content\">\n<p>Clangd \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 language server \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 Microsoft IntelliSense, \u043e\u0434\u043d\u0430\u043a\u043e \u044f \u043d\u0430\u0445\u043e\u0436\u0443 \u0435\u0433\u043e \u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u044b\u043c \u0432\u0432\u0438\u0434\u0443 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u043f\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 (.clang-format \u0438 .clang-tidy). <br \/>\u0427\u0442\u043e\u0431\u044b \u043e\u043d \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0432 \u0432\u0430\u0448\u0435\u043c vscode \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u0442\u044c \u0440\u044f\u0434 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439<\/p>\n<ol>\n<li>\n<p>\u0412 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 CMake Tools \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 &#171;Copy Compile Commands&#187; \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c <br \/><code>${workspaceRoot}\/compile_commands.json<\/code><\/p>\n<\/li>\n<li>\n<p>\u0412 \u043f\u0430\u043f\u043a\u0443 .vscode \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0444\u0430\u0439\u043b settings.json \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f (\u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430 \u0441\u0432\u043e\u0451)<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"json\">{     \"cortex-debug.variableUseNaturalFormat\": false,     \"clangd.arguments\": [         \"--enable-config\",         \"--log=verbose\",         \"-header-insertion=never\",         \"--query-driver=C:\/Users\/Filipp\/scoop\/apps\/gcc-arm-none-eabi\/current\/bin\/arm-none-eabi-gcc.exe,C:\/Users\/Filipp\/scoop\/apps\/gcc-arm-none-eabi\/current\/bin\/arm-none-eabi-g++.exe\",       ] }<\/code><\/pre>\n<ol start=\"3\">\n<li>\n<p>\u0412 CMakeLists.txt \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"cmake\">set(CMAKE_EXPORT_COMPILE_COMMANDS ON)<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h2>P.P.S<\/h2>\n<details class=\"spoiler\">\n<summary>\u043f\u043e\u0447\u0435\u043c\u0443 C++<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041d\u0430 \u0445\u0430\u0431\u0440\u0435 \u0443\u0436\u0435 \u043d\u0435 \u0440\u0430\u0437 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u043b\u0430\u0441\u044c \u0442\u0435\u043c\u0430 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f C++ \u0432 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u0445 &#8212; \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u0443\u0432\u0430\u0436\u0430\u0435\u043c\u043e\u0433\u043e<a class=\"mention\" href=\"\/users\/lamerok\">@lamerok<\/a>. \u0414\u043b\u044f \u0441\u0435\u0431\u044f \u0436\u0435 \u044f \u0432\u044b\u0434\u0435\u043b\u0438\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430:<\/p>\n<ol>\n<li>\n<p>\u041a\u043b\u0430\u0441\u0441\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e &#171;\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0442&#187; \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0435\u0434\u0438\u043d\u0438\u0446\u0430\u043c\u0438 \u043e\u0434\u043d\u0438\u0445 \u0438 \u0442\u0435\u0445 \u0436\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439<\/p>\n<\/li>\n<li>\n<p>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u043c \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\/\u043a\u043b\u0430\u0441\u0441\u043e\u0432\/\u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0435\u0449\u0451 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u041e\u0434\u0438\u043d \u0438\u0437 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0431\u0443\u0444\u0435\u0440\u0430 \u0432 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0435 UART \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u043f\u0440\u0438\u0442\u043e\u043c \u0447\u0442\u043e \u0441\u0430\u043c \u0431\u0443\u0444\u0435\u0440 \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0430 \u043d\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/p>\n<\/li>\n<li>\n<p>\u0412 C++20 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043a\u043e\u043d\u0446\u0435\u043f\u0442\u044b, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0447\u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0435\u0449\u0451 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432, \u0447\u0442\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e \u0441 \u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043c\u0435\u0442\u0430\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438, \u0442.\u043a. \u0447\u0430\u0441\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0435\u0449\u0451 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0430 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u043b\u0438\u0448\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439<\/p>\n<\/li>\n<\/ol>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/788776\/\"> https:\/\/habr.com\/ru\/articles\/788776\/<\/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<p>\u0413\u043e\u0434 \u043d\u0430\u0437\u0430\u0434 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b <a href=\"https:\/\/habr.com\/ru\/articles\/713432\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u044e <\/a>\u043e\u0431 \u043e\u0442\u043b\u0430\u0434\u043a\u0435 STM32 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u0438\u0437 \u043f\u043e\u0434 VSCode, \u0441 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0435\u0439 \u0432 GCC \u0438 \u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e CMake. \u0410 \u0432 \u0434\u0435\u043a\u0430\u0431\u0440\u0435 \u043c\u043d\u0435 \u0432 \u0440\u0443\u043a\u0438 \u043f\u043e\u043f\u0430\u043b\u0438 \u0434\u0432\u0435 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u043e\u0442\u0435\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u041a1986\u0412\u041592FI (MDR1211FI1). \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 SPL \u043d\u0430 C, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u043f\u043b\u043e\u0445\u0443\u044e \u0431\u0430\u0437\u0443 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0439 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 \u0432 Keil \u0438 IAR; \u043e\u0434\u043d\u0430\u043a\u043e \u044f, average C++20+ enjoyer , \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0441\u0432\u043e\u0439 \u0442\u0443\u043b\u0447\u0435\u0439\u043d \u043d\u0430 \u043d\u043e\u0432\u043e\u0435 \u0436\u0435\u043b\u0435\u0437\u043e.<\/p>\n<h2>\u041e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430<\/h2>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 &#171;\u0434\u0436\u0435\u043d\u0442\u043b\u044c\u043c\u0435\u043d\u0441\u043a\u0438\u0439 \u043d\u0430\u0431\u043e\u0440&#187; \u2013 \u043f\u043e\u0440\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, USB-C, \u0442\u0440\u0438 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430 (\u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u0438\u0442\u0430\u043d\u0438\u044f, \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440 \u0440\u0435\u0436\u0438\u043c\u0430 STANDBY \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434) \u0438 \u0434\u0432\u0430 \u043a\u0432\u0430\u0440\u0446\u0435\u0432\u044b\u0445 \u0440\u0435\u0437\u043e\u043d\u0430\u0442\u043e\u0440\u0430 \u043f\u043e\u0434 HSE \u0438 LSE.<\/p>\n<figure class=\"\">\n<div><figcaption>P.S.\u0423 \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043f\u0443\u0442\u0430\u043d\u044b 1 \u0438 3 \u0432\u044b\u0432\u043e\u0434\u044b, \u0442\u0430\u043a \u0447\u0442\u043e \u043e\u043d \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043f\u0443\u0437\u043e\u043c \u043a \u043f\u043b\u0430\u0442\u0435<br \/>P.S.2 \u0411\u0443\u0434\u044c\u0442\u0435 \u043f\u0440\u0438\u043b\u0435\u0436\u043d\u044b \u043f\u0440\u0438 \u043f\u0430\u0439\u043a\u0435 QFN \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c, \u0438\u043d\u0430\u0447\u0435 \u0435\u0441\u0442\u044c \u0440\u0438\u0441\u043a \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u043d\u0435\u0440\u0430\u0431\u043e\u0442\u0443 \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432\u0430\u0448 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0447\u0443\u0442\u044c \u043c\u0435\u043d\u0435\u0435 \u0447\u0435\u043c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0442\u0435\u0440\u043c\u043e\u043f\u0430\u0434, \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b \u043f\u043e \u043f\u0435\u0440\u0438\u043c\u0435\u0442\u0440\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0438\u0441\u044f\u0442 \u0432 \u0432\u043e\u0437\u0434\u0443\u0445\u0435<\/figcaption><\/div>\n<\/figure>\n<h2>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440<\/h2>\n<p>\u0414\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0439 J-Link V9\/V11. \u0414\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u041f\u041e SEGGER <a href=\"https:\/\/support.milandr.ru\/base\/primenenie\/programmirovanie-32-razryadnykh-mk\/nachalo-raboty\/47534\/?sphrase_id=309988&amp;sphrase_id=309988\" rel=\"noopener noreferrer nofollow\">\u043e\u043f\u0438\u0441\u0430\u043d \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u041c\u041a<\/a>. \u041f\u0440\u0438\u0432\u0435\u0434\u0443 \u0437\u0434\u0435\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u043e\u0432, \u0447\u0442\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u043f\u043e \u043f\u0443\u0442\u0438 <code>%APPDATA%\\SEGGER\\JLinkDevices<\/code>.<\/p>\n<details class=\"spoiler\">\n<summary>\u0441\u043f\u043e\u0439\u043b\u0435\u0440<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 JLinkDevices.xml<\/p>\n<pre><code class=\"xml\">&lt;Device>       &lt;ChipInfo Vendor=\"Milandr\"        Name=\"K1986BE1QI\"        WorkRAMAddr=\"0x20100000\"        WorkRAMSize=\"0x4000\"        Core=\"JLINK_CORE_CORTEX_M1\" \/>        &lt;FlashBankInfo Name=\"K1986BE1QI Flash\"        BaseAddr=\"0x0\"        MaxSize=\"0x20000\"        Loader=\"Devices\\Milandr\\MDR32F1QI.FLM\"        LoaderType=\"FLASH_ALGO_TYPE_OPEN\"        AlwaysPresent=\"1\"\/>  &lt;\/Device>  &lt;Device>        &lt;ChipInfo Vendor=\"Milandr\"         Name=\"K1986BE92QI\"         WorkRAMAddr=\"0x20000000\"         WorkRAMSize=\"0x8000\"         Core=\"JLINK_CORE_CORTEX_M3\"\/>         &lt;FlashBankInfo Name=\"K1986BE92QI Flash\"         BaseAddr=\"0x8000000\"         MaxSize=\"0x20000\"         Loader=\"Devices\\Milandr\\MDR32F9Q2I.FLM\"         LoaderType=\"FLASH_ALGO_TYPE_OPEN\"         AlwaysPresent=\"1\" \/>  &lt;\/Device><\/code><\/pre>\n<p>\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 Devices.xml<\/p>\n<pre><code class=\"xml\">&lt;Database> &lt;Device>        &lt;ChipInfo Vendor=\"Milandr\"         Name=\"K1986BE1QI\"         WorkRAMAddr=\"0x20000000\"         WorkRAMSize=\"0x8000\"         Core=\"JLINK_CORE_CORTEX_M3\"\/>         &lt;FlashBankInfo Name=\"K1986BE1QI Flash\"         BaseAddr=\"0x8000000\"         MaxSize=\"0x20000\"  Loader=\"C:\\Users\\Filipp\\AppData\\Roaming\\SEGGER\\JLinkDevices\\Milandr\\MDR32F1QI.FLM\"         LoaderType=\"FLASH_ALGO_TYPE_OPEN\"         AlwaysPresent=\"1\" \/>  &lt;\/Device>  &lt;Device>        &lt;ChipInfo Vendor=\"Milandr\"         Name=\"K1986BE92QI\"         WorkRAMAddr=\"0x20000000\"         WorkRAMSize=\"0x8000\"         Core=\"JLINK_CORE_CORTEX_M3\"\/>         &lt;FlashBankInfo Name=\"K1986BE92QI Flash\"         BaseAddr=\"0x8000000\"         MaxSize=\"0x20000\"  Loader=\"C:\\Users\\Filipp\\AppData\\Roaming\\SEGGER\\JLinkDevices\\Milandr\\MDR32F9Q2I.FLM\"         LoaderType=\"FLASH_ALGO_TYPE_OPEN\"         AlwaysPresent=\"1\" \/>  &lt;\/Device> &lt;\/Database><\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h2>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/h2>\n<p>\u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f VSCode, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0432 <a href=\"https:\/\/habr.com\/ru\/articles\/713432\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a>. \u0422\u0430\u043a\u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0441 <a href=\"https:\/\/support.milandr.ru\/products\/mikrokontrollery_i_protsessory\/32_razryadnye_mikrokontrollery\/1986ve9kh_yadro_arm_cortex_m3\/k1986ve92fi\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0430\u0439\u0442\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f<\/a> Software pack \u0434\u043b\u044f Keil MDK 5 \u0438 Standard Peripherals Library.<\/p>\n<p>\u0412 \u043a\u043e\u0440\u0435\u043d\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0444\u0430\u0439\u043b<code>MDR32F9Q2I.svd<\/code>  (\u0431\u0440\u0430\u0442\u044c \u0438\u0437 \u043f\u0430\u043f\u043a\u0438 <code>Standard Peripherals Library\\SVD\\MDR32FxQI<\/code>), \u0438 \u043f\u0430\u043f\u043a\u0443 <code>Standard Peripherals Library\\Libraries\\SPL\\MDR32FxQI<\/code>, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0435\u043c \u0432 <code>MDR32FxQI_SPL<\/code>. \u0422\u0430\u043a\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u0432\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438: CoreSupport \u0438 DeviceSupport. \u0412 \u043f\u0430\u043f\u043a\u0443 CoreSupport \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b \u0438\u0437 <code>Standard Peripherals Library\\Libraries\\CMSIS\\MDR32FxQI\\CoreSupport\\CM3<\/code>, \u0430 \u0432 DeviceSupport \u2013 \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b \u0438\u0437 <code>Standard Peripherals Library\\Libraries\\CMSIS\\MDR32FxQI\\DeviceSupport\\MDR32F9Q2I\\inc<\/code> \u0438 <code>Standard Peripherals Library\\Libraries\\CMSIS\\MDR32FxQI\\DeviceSupport\\MDR32F9Q2I\\startup<\/code>. <\/p>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code>.\/: MDR32F9Q2I.svd .\/CoreSupport\/: core_cm3.h core_cmFunc.h core_cmInstr.h .\/DeviceSupport\/: MDR32F9Q2I.h system_MDR32F9Q2I.c system_MDR32F9Q2I.h .\/MDR32FxQI_SPL\/: inc\/ src\/ MDR32FxQI_config.h<\/code><\/pre>\n<h2>\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434<\/h2>\n<p>\u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u041c\u041a \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f linker-\u0441\u043a\u0440\u0438\u043f\u0442 \u0438 startup-\u0444\u0430\u0439\u043b, \u043d\u0430\u0437\u043e\u0432\u0451\u043c \u0438\u0445 <code>MDR32F9Q2I.ld<\/code> \u0438 <code>startup_gcc_MDR32F9Q2I.s<\/code> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u0417\u0430 \u043e\u0441\u043d\u043e\u0432\u0443 \u0432\u043e\u0437\u044c\u043c\u0451\u043c \u0444\u0430\u0439\u043b\u044b \u0434\u043b\u044f STM32F103C8. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432 \u043d\u0438\u0445 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0438\u0437 <a href=\"https:\/\/youtu.be\/gdRmETe4QEo?si=1FFz8Nv6afaI4Lr\" rel=\"noopener noreferrer nofollow\"><u>\u0432\u0438\u0434\u0435\u043e1<\/u><\/a> \u0438 <a href=\"https:\/\/youtu.be\/7stymN3eYw0?si=9LArZwVWfc9BKcQT\" rel=\"noopener noreferrer nofollow\"><u>\u0432\u0438\u0434\u0435\u043e2<\/u><\/a>.<\/p>\n<details class=\"spoiler\">\n<summary>MDR32F9Q2I.ld<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lisp\">\/* Abstract: Linker script for MDR32F9Q2I 128 Kb FLASH + 32 Kb RAM  *\/  ENTRY(Reset_handler);  MEMORY { FLASH(rx) : ORIGIN = 0x08000000, LENGTH = 128K RAM(xrw)  : ORIGIN = 0x20000000, LENGTH = 32K }  _estack = ORIGIN(RAM) + LENGTH(RAM);    \/* end of RAM *\/ _Min_Heap_Size = 0x200;      \/* required amount of heap  *\/ _Min_Stack_Size = 0x400; \/* required amount of stack *\/  \/* Define output sections *\/ SECTIONS {   \/* The startup code goes first into FLASH *\/   .isr_vector :   {     . = ALIGN(4);     KEEP(*(.isr_vector)) \/* Startup code *\/     . = ALIGN(4);   } >FLASH    \/* The program code and other data goes into FLASH *\/   .text :   {     . = ALIGN(4);     *(.text)           \/* .text sections (code) *\/     *(.text*)          \/* .text* sections (code) *\/     *(.glue_7)         \/* glue arm to thumb code *\/     *(.glue_7t)        \/* glue thumb to arm code *\/     *(.eh_frame)      KEEP (*(.init))     KEEP (*(.fini))      . = ALIGN(4);     _etext = .;        \/* define a global symbols at end of code *\/   } >FLASH    \/* Constant data goes into FLASH *\/   .rodata :   {     . = ALIGN(4);     *(.rodata)         \/* .rodata sections (constants, strings, etc.) *\/     *(.rodata*)        \/* .rodata* sections (constants, strings, etc.) *\/     . = ALIGN(4);   } >FLASH    .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH   .ARM : {     __exidx_start = .;     *(.ARM.exidx*)     __exidx_end = .;   } >FLASH    .preinit_array     :   {     PROVIDE_HIDDEN (__preinit_array_start = .);     KEEP (*(.preinit_array*))     PROVIDE_HIDDEN (__preinit_array_end = .);   } >FLASH   .init_array :   {     PROVIDE_HIDDEN (__init_array_start = .);     KEEP (*(SORT(.init_array.*)))     KEEP (*(.init_array*))     PROVIDE_HIDDEN (__init_array_end = .);   } >FLASH   .fini_array :   {     PROVIDE_HIDDEN (__fini_array_start = .);     KEEP (*(SORT(.fini_array.*)))     KEEP (*(.fini_array*))     PROVIDE_HIDDEN (__fini_array_end = .);   } >FLASH    \/* used by the startup to initialize data *\/   _sidata = LOADADDR(.data);    \/* Initialized data sections goes into RAM, load LMA copy after code *\/   .data :    {     . = ALIGN(4);     _sdata = .;        \/* create a global symbol at data start *\/     *(.data)           \/* .data sections *\/     *(.data*)          \/* .data* sections *\/      . = ALIGN(4);     _edata = .;        \/* define a global symbol at data end *\/   } >RAM AT> FLASH       \/* Uninitialized data section *\/   . = ALIGN(4);   .bss :   {     \/* This is used by the startup in order to initialize the .bss secion *\/     _sbss = .;         \/* define a global symbol at bss start *\/     __bss_start__ = _sbss;     *(.bss)     *(.bss*)     *(COMMON)      . = ALIGN(4);     _ebss = .;         \/* define a global symbol at bss end *\/     __bss_end__ = _ebss;   } >RAM    \/* User_heap_stack section, used to check that there is enough RAM left *\/   ._user_heap_stack :   {     . = ALIGN(8);     PROVIDE ( end = . );     PROVIDE ( _end = . );     . = . + _Min_Heap_Size;     . = . + _Min_Stack_Size;     . = ALIGN(8);   } >RAM        \/* Remove information from the standard libraries *\/   \/DISCARD\/ :   {     libc.a ( * )     libm.a ( * )     libgcc.a ( * )   }    .ARM.attributes 0 : { *(.ARM.attributes) } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>startup_gcc_MDR32F9Q2I.s<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"assembly\">.syntax unified .cpu cortex-m3 .fpu softvfp .thumb  \/* start address for the initialization values of the .data section. defined in linker script *\/ .word _sidata \/* start address for the .data section. defined in linker script *\/ .word _sdata \/* end address for the .data section. defined in linker script *\/ .word _edata \/* start address for the .bss section. defined in linker script *\/ .word _sbss \/* end address for the .bss section. defined in linker script *\/ .word _ebss  .global __Vectors .global Default_Handler  \/****************************************************************************** * * The minimal vector table for a Cortex M3.  Note that the proper constructs * must be placed on this to ensure that it ends up at physical address * 0x0000.0000. * ******************************************************************************\/   .section .isr_vector,\"a\",%progbits   .type __Vectors, %object   .size __Vectors, .-__Vectors  __Vectors:   .word _estack             \/* Top of Stack *\/   .word Reset_Handler       \/* Reset Handler *\/   .word NMI_Handler         \/* NMI Handler *\/   .word HardFault_Handler   \/* Hard Fault Handler *\/   .word MemManage_Handler   \/* MPU Fault Handler *\/   .word BusFault_Handler    \/* Bus Fault Handler *\/   .word UsageFault_Handler  \/* Usage Fault Handler *\/   .word 0                   \/* Reserved *\/   .word 0                   \/* Reserved *\/   .word 0                   \/* Reserved *\/   .word 0                   \/* Reserved *\/   .word SVC_Handler         \/* SVCall Handler *\/   .word DebugMon_Handler    \/* Debug Monitor Handler *\/   .word 0                   \/* Reserved *\/   .word PendSV_Handler      \/* PendSV Handler *\/   .word SysTick_Handler     \/* SysTick Handler *\/   \/* External Interrupts*\/   .word CAN1_IRQHandler            \/*   0 CAN1 Handler *\/   .word CAN2_IRQHandler            \/*   1 CAN2 Handler *\/   .word USB_IRQHandler             \/*   2 USB Host Handler *\/   .word 0                          \/*     Reserved *\/   .word 0                          \/*     Reserved *\/   .word DMA_IRQHandler             \/*   5 DMA Handler *\/   .word UART1_IRQHandler           \/*   6 UART1 Handler *\/   .word UART2_IRQHandler           \/*   7 UART2 Handler *\/   .word SSP1_IRQHandler            \/*   8 SSP1 Handler *\/   .word 0                          \/*     Reserved *\/   .word I2C_IRQHandler        <\/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-366269","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/366269","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=366269"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/366269\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=366269"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=366269"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=366269"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}