{"id":348967,"date":"2023-06-18T15:01:22","date_gmt":"2023-06-18T15:01:22","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=348967"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2023-06-18T15:01:22","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=348967","title":{"rendered":"<span>\u041a\u043e\u043d\u0441\u043f\u0435\u043a\u0442. STM32. CMSIS. LTDC<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/884\/b6e\/d67\/884b6ed6750d316709aef3c2c2a9d8d2.png\" width=\"768\" height=\"768\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/884\/b6e\/d67\/884b6ed6750d316709aef3c2c2a9d8d2.png\"\/><\/figure>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0441\u043f\u0435\u043a\u0442 (\u0433\u0430\u0439\u0434) \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u043b\u0438\u0446, \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 LTDC \u043c\u043e\u0434\u0443\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 STM \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 STM32F429ZIT6 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c\u0443 \u043f\u043e 16-\u0431\u0438\u0442\u043d\u043e\u043c\u0443 RGB565 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u043a \u0434\u0438\u0441\u043f\u043b\u0435\u044e TM043NBH02 \u0441 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c 480&#215;272 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u044f \u0431\u0435\u0437 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u0432\u0438\u0434\u0435\u043e\u0431\u0443\u0444\u0435\u0440\u0430.<\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f:<br \/>MCU Reference manual: RM0090;<br \/>MCU Datasheet: DocID024030 Rev 10;<br \/>Display Datasheet: DS TM043NBH02-40 Ver 1.0.<\/p>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f LTDC \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0438\u0441\u043f\u043b\u0435\u044f\u043c\u0438 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0442\u0440\u0438 \u044d\u0442\u0430\u043f\u0430:<\/p>\n<p><strong>1. \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/strong><\/p>\n<p>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 LCD-TFT \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 3 \u0434\u043e\u043c\u0435\u043d\u0430 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f:<br \/>&#8212; AHB clock domain (HCLK), \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Layer FIFO \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0431\u0443\u0444\u0435\u0440\u0430 \u043a\u0430\u0434\u0440\u0430.<br \/>&#8212; APB2 clock domain (PCLK2), \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439.<br \/>&#8212; Pixel Clock domain (LCD_CLK), \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 LCD-TFT, \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0441\u043b\u043e\u044f. \u0412\u044b\u0445\u043e\u0434 LCD_CLK \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u0438. LCD_CLK \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 PLLSAI.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0448\u0438\u043d AHB\\APB \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044b\u0434\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e, \u0438\u0437-\u0437\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0445 \u0432\u0441\u0435\u0439 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0435\u0439, \u0442\u043e \u043e\u043f\u0438\u0448\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Pixel Clock.<br \/>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0431\u043b\u043e\u043a \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f PLLSAI:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1b4\/61f\/a9f\/1b461fa9f8986bf822a244495f5d2903.png\" width=\"974\" height=\"492\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1b4\/61f\/a9f\/1b461fa9f8986bf822a244495f5d2903.png\"\/><\/figure>\n<p>\u0422\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0448\u0438\u043d\u044b LCD_CLK \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0431\u043b\u043e\u043a PLLSAI, \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043e\u0442 \u0442\u0430\u043a\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u0440\u0435\u0437\u043e\u043d\u0430\u0442\u043e\u0440\u0430 (\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430) \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0442 HSI, \u0447\u0435\u0440\u0435\u0437 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c M, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0430 \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u044c N \u0438 \u0434\u043e\u0432\u0435\u0434\u0435\u043d\u0430 \u0434\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f\u043c\u0438 R \u0438 PLL_LCD_CLK_DIV.<\/p>\n<p>\u0414\u043b\u044f \u0434\u0438\u0441\u043f\u043b\u0435\u044f TM043NBH02 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Pixel Clock \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043e\u0442 8 \u0434\u043e 12 \u041c\u0413\u0446: <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f49\/94b\/889\/f4994b889e9d64e86591fc27d1e750f8.png\" width=\"881\" height=\"394\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f49\/94b\/889\/f4994b889e9d64e86591fc27d1e750f8.png\"\/><\/figure>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0412\u0432\u043e\u0434\u043d\u044b\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435: \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u043e\u043d\u0430\u0442\u043e\u0440\u0430 HSI = 16 \u041c\u0413\u0446, \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c M = 16, \u043d\u0430 \u0432\u0445\u043e\u0434 VCO \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0432 1 \u041c\u0413\u0446, \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u0447\u0430\u0441\u0442\u043e\u0442\u0443 DCLK(Pixel Clock) = 9 \u041c\u0413\u0446.<\/p>\n<p>\u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u043a\u043e\u043d\u0446\u0430, \u043f\u043e\u0434\u0431\u0435\u0440\u0451\u043c \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c PLL_LCD_CLK_DIV. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043b\u0435\u0437\u0435\u043c \u0432 RM \u0438 \u0438\u0449\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e RCC_DCKCFG, \u0432 \u043d\u0451\u043c \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u0431\u0438\u0442\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435 PLLSAIDIVR:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2e1\/3ae\/498\/2e13ae4988b9b9315e1d1415f518ec2e.png\" width=\"974\" height=\"778\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2e1\/3ae\/498\/2e13ae4988b9b9315e1d1415f518ec2e.png\"\/><\/figure>\n<p>\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c 2, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u043e\u0439 \u0431\u0438\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f, \u0435\u0433\u043e \u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c:<\/p>\n<pre><code class=\"cpp\">RCC->DCKCFGR &amp;= ~RCC_DCLCFGR_PLLSAIDIVR;<\/code><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0432 18 \u041c\u0413\u0446 \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f DIV. \u0414\u0430\u043b\u0435\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u0430\u0442\u044c \u043d\u0430 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c R. \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 RCC_PLLSAICFGR:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1b6\/ec8\/662\/1b6ec8662c846b43464995fba88a59ef.png\" width=\"974\" height=\"1451\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1b6\/ec8\/662\/1b6ec8662c846b43464995fba88a59ef.png\"\/><\/figure>\n<p>\u0418\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c R \u043c\u0435\u043d\u0435\u0435 2, \u00abwrong configuration\u00bb, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043b\u044e\u0431\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u00ab0\u00bb \u0438 \u00ab1\u00bb. \u041e\u0434\u043d\u0430\u043a\u043e, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0438\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u044f N, \u043e\u043d \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c 50. \u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f R, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0435\u0435 \u043d\u0430\u0448\u0438\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c 3:   <\/p>\n<pre><code class=\"cpp\">RCC->PLLSAICFGR |= 0x3 &lt;&lt; RCC_PLLSAICFGR_PLLSAIR_Pos;<\/code><\/pre>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f R \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c 18 \u041c\u0413\u0426 * 3 = 54 \u041c\u0413\u0446, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u044c N \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0432\u043d\u043e\u0435 54 \u0432 \u0442\u043e\u043c \u0436\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435:<\/p>\n<pre><code class=\"cpp\">RCC->PLLSAICFGR |= 0x54 &lt;&lt; RCC_PLLSAICFGR_PLLSAIN_Pos;<\/code><\/pre>\n<p>\u041e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0434\u0435\u043b\u043e \u0437\u0430 \u043c\u0430\u043b\u044b\u043c, \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 LCD_CLK \u0438 \u0440\u0430\u0431\u043e\u0442\u0443 \u0431\u043b\u043e\u043a\u0430 PLLSAI, \u0447\u0442\u043e \u043c\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043d\u0451\u043c, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b RCC->APB2ENR, \u0433\u0434\u0435 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0431\u0438\u0442 LTDCEN \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 RCC->CR, \u0432 \u043d\u0451\u043c \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0431\u0438\u0442 PLLSAION:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4e9\/e13\/70a\/4e9e1370a943b16c909d6f9b7ecf7383.png\" width=\"974\" height=\"538\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4e9\/e13\/70a\/4e9e1370a943b16c909d6f9b7ecf7383.png\"\/><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/16d\/3fa\/b72\/16d3fab72832aa2998b7ac28049b41c5.png\" width=\"974\" height=\"656\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/16d\/3fa\/b72\/16d3fab72832aa2998b7ac28049b41c5.png\"\/><\/figure>\n<pre><code class=\"cpp\">RCC->APB2ENR |= RCC_APB2ENR_LTDCEN; RCC->CR |= RCC_CR_PLLSAION;<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0438\u0442\u0430 RCC_CR_PLLSAION, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0431\u0438\u0442\u0430 RCC_CR_PLLSAIRDY \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u043e \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438:<\/p>\n<pre><code class=\"cpp\">while(!(RCC->CR &amp; RCC_CR_PLLSAIRDY)){  __NOP(); };<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u044d\u0442\u0430\u043f\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">__attribute__((optimize(BL_OPTIMIZATION_LVL))) void BL_MCU_LTDC_CLOCKS_Init(void){          RCC->DCKCFGR &amp;= ~RCC_DCLCFGR_PLLSAIDIVR;     RCC->PLLSAICFGR |= 0x3 &lt;&lt; RCC_PLLSAICFGR_PLLSAIR_Pos;     RCC->PLLSAICFGR |= 0x54 &lt;&lt; RCC_PLLSAICFGR_PLLSAIN_Pos;     \/\/VCOxN = HSIclk \/ PLLM * PLLN = 16 \/ 16 * 54 = 54 MHz \/\/PLLLCD = VCOxN \/ PLLR = 54 \/ 3 = 18 MHz \/\/LCDCLK = PLLLCD \/ PLLSAIDIVR = 18 \/ 2 = 9 MHz  RCC->APB2ENR |= RCC_APB2ENR_LTDCEN;     RCC->CR |= RCC_CR_PLLSAION;     while(!(RCC->CR &amp; RCC_CR_PLLSAIRDY)){      __NOP();     }; }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p><strong>2. \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043f\u043e\u0440\u0442\u043e\u0432 \u0432\u0432\u043e\u0434\u0430 \u0432\u044b\u0432\u043e\u0434\u0430.<\/strong><\/p>\n<p>\u0412 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 LTDC \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043b\u0438\u043d\u0438\u0438:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7f1\/b8e\/bc1\/7f1b8ebc1540d0c8374cf412995caaa0.png\" width=\"866\" height=\"352\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7f1\/b8e\/bc1\/7f1b8ebc1540d0c8374cf412995caaa0.png\"\/><\/figure>\n<p>\u0412\u044b\u0432\u043e\u0434\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 LTDC \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c. \u041d\u0435\u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u0432\u043e\u0434\u044b \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043b\u044e\u0431\u044b\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u0446\u0435\u043b\u0435\u0439.<\/p>\n<p>\u0414\u043b\u044f \u0432\u044b\u0445\u043e\u0434\u043e\u0432 LTDC \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0434\u043e 24 \u0431\u0438\u0442 (RGB888), \u0435\u0441\u043b\u0438 \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u0435\u043d\u044c\u0448\u0435 \u0447\u0435\u043c 8 \u0431\u0438\u0442 \u043d\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u044c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 RGB565 \u0438\u043b\u0438 RGB666 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0441 16-\u0431\u0438\u0442\u043d\u044b\u043c\u0438 \u0438\u043b\u0438 18-\u0431\u0438\u0442\u043d\u044b\u043c\u0438 \u0434\u0438\u0441\u043f\u043b\u0435\u044f\u043c\u0438), \u0442\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0434\u0430\u043d\u043d\u044b\u0445 RGB \u0434\u0438\u0441\u043f\u043b\u0435\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043a MSB \u0440\u0430\u0437\u0440\u044f\u0434\u0430\u043c \u0434\u0430\u043d\u043d\u044b\u0445 RGB \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 LCD\u0421. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 LTD\u0421 \u043a \u0434\u0438\u0441\u043f\u043b\u0435\u044e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e 16-\u0431\u0438\u0442\u043d\u043e\u043c\u0443 RGB565 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443, \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0434\u0430\u043d\u043d\u044b\u0445 LCD R[4:0], G[5:0] \u0438 B[4:0] \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u043a \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443 LTDC \u0447\u0435\u0440\u0435\u0437 LCD_R[7:3], LCD_G[7:2] \u0438 LCD_B[7:3].<\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0437\u043d\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435 \u0432\u044b\u0432\u043e\u0434\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043c\u043e\u0434\u0443\u043b\u0435\u043c LTDC, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438\u0437 Datasheet:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/50b\/394\/7a5\/50b3947a53eaa7f65664a687e419e188.png\" alt=\"\" title=\"\" width=\"974\" height=\"689\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/50b\/394\/7a5\/50b3947a53eaa7f65664a687e419e188.png\"\/><\/figure>\n<p>\u0412 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 STM32F429, \u043a \u043c\u043e\u0434\u0443\u043b\u044e LTDC \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 AF9 \u0438 AF14. \u0411\u0443\u0434\u0435\u043c \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0432\u044b\u0432\u043e\u0434\u044b:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"center\">\u0412\u044b\u0432\u043e\u0434<\/p>\n<\/td>\n<td>\n<p align=\"center\">\u0424\u0443\u043d\u043a\u0446\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"center\">\u0412\u044b\u0431\u043e\u0440 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PA3<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_B5<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PA4<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_VSYNC<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PA6<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_G2<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PA11<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_R4<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PA12<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_R5<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PB0<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_R3<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF9<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PB1<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_R6<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF9<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PB8<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_B6<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PB9<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_B7<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PB10<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_G4<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PB11<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_G5<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PC6<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_HSYNC<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PC7<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_G6<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PD3<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_G7<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PF10<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_DE<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PG6<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_R7<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PG7<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_DTCLK<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PG10<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_G3<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF9<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PG11<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_B3<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PG12<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_B4<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF9<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043e\u0434\u043d\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430 PF10, \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438.   <\/p>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438:<br \/>&#8212; \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u0430 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 RCC_AHB1ENR;<\/p>\n<pre><code class=\"cpp\">RCC->AHB1ENR |= RCC_AHB1ENR_GPIOFEN;<\/code><\/pre>\n<p>&#8212; \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u044b\u0432\u043e\u0434\u0430 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 GPIOx_MODER (Alternative function);<\/p>\n<pre><code class=\"cpp\">GPIOF->MODER |= GPIO_MODER_MODE10_1;<\/code><\/pre>\n<p>&#8212; \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0442\u0438\u043f \u0432\u044b\u0445\u043e\u0434\u0430 \u0432 GPIOx_OTYPER (Output push-pull);<\/p>\n<pre><code class=\"cpp\">GPIOF->OTYPER &amp;=  GPIO_OTYPER_OT10;<\/code><\/pre>\n<p>&#8212; \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u043e\u0434\u0442\u044f\u0436\u043a\u0443 \u0432\u044b\u0432\u043e\u0434\u0430 GPIO_PUPDR (No pull-up\/pull-down);<\/p>\n<pre><code class=\"cpp\">GPIOF->PUPDR &amp;= GPIO_PUPDR_PUPDR10;<\/code><\/pre>\n<p>&#8212; \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0442\u0438\u043f \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 GPIOx_AFRH (AF14);<\/p>\n<pre><code class=\"cpp\">GPIOF->AFR[1] |= GPIO_AFRH_AFSEL10_3 | GPIO_AFRH_AFSEL10_2 | GPIO_AFRH_AFSEL10_1;<\/code><\/pre>\n<p>&#8212; \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u044b\u0432\u043e\u0434\u0430 \u0432 GPIOx_OSPEEDR (Very high speed).<\/p>\n<pre><code class=\"cpp\">GPIOF->OSPEEDR |= GPIO_OSPEEDR_OSPEED10_1 |  GPIO_OSPEEDR_OSPEED10_0;<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u044d\u0442\u0430\u043f\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u0440\u0442\u043e\u0432 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">__attribute__((optimize(BL_OPTIMIZATION_LVL))) void BL_MCU_LTDC_GPIO_Init(void){   \/\/Backlight SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN); \/\/ PORT D CLOCKS are ENABLED MODIFY_REG(GPIOD->MODER, GPIO_MODER_MODER12, GPIO_MODER_MODE12_0); \/\/ PD12 output  \/*PB0 R3 PB1 R6 PB10 G4 PB11 G5 PB8 B6 PB9 B7*\/ \/\/---PORT---B--- SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOBEN); \/\/ PORT B CLOCKS are ENABLED  MODIFY_REG(GPIOB->MODER, GPIO_MODER_MODER0, GPIO_MODER_MODE0_1); \/\/ PB0 Alternative func MODIFY_REG(GPIOB->MODER, GPIO_MODER_MODER1, GPIO_MODER_MODE1_1); \/\/ PB1 Alternative func MODIFY_REG(GPIOB->MODER, GPIO_MODER_MODER8, GPIO_MODER_MODE8_1); \/\/ PB8 Alternative func MODIFY_REG(GPIOB->MODER, GPIO_MODER_MODER9, GPIO_MODER_MODE9_1); \/\/ PB9 Alternative func MODIFY_REG(GPIOB->MODER, GPIO_MODER_MODER10, GPIO_MODER_MODE10_1); \/\/ PB10 Alternative func MODIFY_REG(GPIOB->MODER, GPIO_MODER_MODER11, GPIO_MODER_MODE11_1); \/\/ PB11 Alternative func  CLEAR_BIT(GPIOB->OTYPER, GPIO_OTYPER_OT0 | GPIO_OTYPER_OT1 | GPIO_OTYPER_OT8 | GPIO_OTYPER_OT9 | GPIO_OTYPER_OT10 | GPIO_OTYPER_OT11); \/\/ PB0 PB1 PB8 PB9 PB10 PB11 Output push-pull  MODIFY_REG(GPIOB->AFR[0], GPIO_AFRL_AFRL0, GPIO_AFRL_AFRL0_3 | GPIO_AFRL_AFRL0_0); \/\/ PB0 AF9 MODIFY_REG(GPIOB->AFR[0], GPIO_AFRL_AFRL1, GPIO_AFRL_AFRL1_3 | GPIO_AFRL_AFRL1_0); \/\/ PB1 AF9 MODIFY_REG(GPIOB->AFR[1], GPIO_AFRH_AFSEL8, GPIO_AFRH_AFSEL8_3 | GPIO_AFRH_AFSEL8_2 | GPIO_AFRH_AFSEL8_1); \/\/ PB8 AF14 MODIFY_REG(GPIOB->AFR[1], GPIO_AFRH_AFSEL9, GPIO_AFRH_AFSEL9_3 | GPIO_AFRH_AFSEL9_2 | GPIO_AFRH_AFSEL9_1); \/\/ PB9 AF14 MODIFY_REG(GPIOB->AFR[1], GPIO_AFRH_AFSEL10, GPIO_AFRH_AFSEL10_3 | GPIO_AFRH_AFSEL10_2 | GPIO_AFRH_AFSEL10_1); \/\/ PB10 AF14 MODIFY_REG(GPIOB->AFR[1], GPIO_AFRH_AFSEL11, GPIO_AFRH_AFSEL11_3 | GPIO_AFRH_AFSEL11_2 | GPIO_AFRH_AFSEL11_1); \/\/ PB11 AF14  MODIFY_REG(GPIOB->OSPEEDR, GPIO_OSPEEDR_OSPEED0_Msk, GPIO_OSPEEDR_OSPEED0_1 |  GPIO_OSPEEDR_OSPEED0_0); \/\/PB0 Very high speed MODIFY_REG(GPIOB->OSPEEDR, GPIO_OSPEEDR_OSPEED1_Msk, GPIO_OSPEEDR_OSPEED1_1 | GPIO_OSPEEDR_OSPEED1_0); \/\/PB1 Very high speed MODIFY_REG(GPIOB->OSPEEDR, GPIO_OSPEEDR_OSPEED8_Msk, GPIO_OSPEEDR_OSPEED8_1 | GPIO_OSPEEDR_OSPEED8_0); \/\/PB8 Very high speed MODIFY_REG(GPIOB->OSPEEDR, GPIO_OSPEEDR_OSPEED9_Msk, GPIO_OSPEEDR_OSPEED9_1 | GPIO_OSPEEDR_OSPEED9_0); \/\/PB9 Very high speed MODIFY_REG(GPIOB->OSPEEDR, GPIO_OSPEEDR_OSPEED10_Msk, GPIO_OSPEEDR_OSPEED10_1 | GPIO_OSPEEDR_OSPEED10_0); \/\/PB10 Very high speed MODIFY_REG(GPIOB->OSPEEDR, GPIO_OSPEEDR_OSPEED11_Msk, GPIO_OSPEEDR_OSPEED11_1 | GPIO_OSPEEDR_OSPEED11_0); \/\/PB11 Very high speed  CLEAR_BIT(GPIOB->PUPDR, GPIO_PUPDR_PUPDR0 | GPIO_PUPDR_PUPDR1 | GPIO_PUPDR_PUPDR8 | GPIO_PUPDR_PUPDR9 | GPIO_PUPDR_PUPDR10 | GPIO_PUPDR_PUPDR11); \/\/ PB0 PB1 PB8 PB9 PB10 PB11 No pull-up\/pull-down  \/*PC6 HSYNC PC7 G6*\/ \/\/---PORT---C--- SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN); \/\/ PORT B CLOCKS are ENABLED  MODIFY_REG(GPIOC->MODER, GPIO_MODER_MODER6, GPIO_MODER_MODE6_1); \/\/ PC6 Alternative func MODIFY_REG(GPIOC->MODER, GPIO_MODER_MODER7, GPIO_MODER_MODE7_1); \/\/ PC7 Alternative func  CLEAR_BIT(GPIOC->OTYPER, GPIO_OTYPER_OT6 | GPIO_OTYPER_OT7); \/\/ PC6 PC7 Output push-pull  MODIFY_REG(GPIOC->AFR[0], GPIO_AFRL_AFRL6, GPIO_AFRL_AFRL6_3 | GPIO_AFRL_AFRL6_2 | GPIO_AFRL_AFRL6_1); \/\/ PC6 AF14 MODIFY_REG(GPIOC->AFR[0], GPIO_AFRL_AFRL7, GPIO_AFRL_AFRL7_3 | GPIO_AFRL_AFRL7_2 | GPIO_AFRL_AFRL7_1); \/\/ PC7 AF14  MODIFY_REG(GPIOC->OSPEEDR, GPIO_OSPEEDR_OSPEED6_Msk, GPIO_OSPEEDR_OSPEED6_1 |  GPIO_OSPEEDR_OSPEED6_0); \/\/PC6 Very high speed MODIFY_REG(GPIOC->OSPEEDR, GPIO_OSPEEDR_OSPEED7_Msk, GPIO_OSPEEDR_OSPEED7_1 | GPIO_OSPEEDR_OSPEED7_0); \/\/PC7 Very high speed  CLEAR_BIT(GPIOC->PUPDR, GPIO_PUPDR_PUPDR6 | GPIO_PUPDR_PUPDR7); \/\/ PC6 PC7 No pull-up\/pull-down   \/*PD3 G7*\/ \/\/---PORT---D--- SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN); \/\/ PORT D CLOCKS are ENABLED  MODIFY_REG(GPIOD->MODER, GPIO_MODER_MODER3, GPIO_MODER_MODE3_1); \/\/ PD3 Alternative func  CLEAR_BIT(GPIOD->OTYPER, GPIO_OTYPER_OT3); \/\/ PD3 Output push-pull  MODIFY_REG(GPIOD->AFR[0], GPIO_AFRL_AFRL3, GPIO_AFRL_AFRL3_3 | GPIO_AFRL_AFRL3_2 | GPIO_AFRL_AFRL3_1); \/\/ PD3 AF14 MODIFY_REG(GPIOD->OSPEEDR, GPIO_OSPEEDR_OSPEED3_Msk, GPIO_OSPEEDR_OSPEED3_1 |  GPIO_OSPEEDR_OSPEED3_0); \/\/PD3 Very high speed CLEAR_BIT(GPIOD->PUPDR, GPIO_PUPDR_PUPDR3);  \/\/ PD3 No pull-up\/pull-down   \/*PA11 R4 PA12 R5 PA6  G2 PA3 B5 PA4 VSYNC*\/  \/\/---PORT---A--- SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOAEN); \/\/ PORT A CLOCKS are ENABLED  \/\/ PA3 PA4 PA6 PA11 PA12 Alternative func MODIFY_REG(GPIOA->MODER, GPIO_MODER_MODER3 | GPIO_MODER_MODER4 | GPIO_MODER_MODER6, GPIO_MODER_MODE6_1 | GPIO_MODER_MODE4_1 | GPIO_MODER_MODE3_1); MODIFY_REG(GPIOA->MODER, GPIO_MODER_MODER11 | GPIO_MODER_MODER12, GPIO_MODER_MODE11_1 | GPIO_MODER_MODE12_1);  CLEAR_BIT(GPIOA->OTYPER, GPIO_OTYPER_OT12 | GPIO_OTYPER_OT11 | GPIO_OTYPER_OT6 | GPIO_OTYPER_OT4 | GPIO_OTYPER_OT3); \/\/ PCD Output push-pull  MODIFY_REG(GPIOA->AFR[0], GPIO_AFRL_AFRL3, GPIO_AFRL_AFRL3_3 | GPIO_AFRL_AFRL3_2 | GPIO_AFRL_AFRL3_1); \/\/ PA3 AF14 MODIFY_REG(GPIOA->AFR[0], GPIO_AFRL_AFRL4, GPIO_AFRL_AFRL4_3 | GPIO_AFRL_AFRL4_2 | GPIO_AFRL_AFRL4_1); \/\/ PA4 AF14 MODIFY_REG(GPIOA->AFR[0], GPIO_AFRL_AFRL6, GPIO_AFRL_AFRL6_3 | GPIO_AFRL_AFRL6_2 | GPIO_AFRL_AFRL6_1); \/\/ PA6 AF14 MODIFY_REG(GPIOA->AFR[1], GPIO_AFRH_AFSEL11, GPIO_AFRH_AFSEL11_3 | GPIO_AFRH_AFSEL11_2 | GPIO_AFRH_AFSEL11_1); \/\/ PA11 AF14 MODIFY_REG(GPIOA->AFR[1], GPIO_AFRH_AFSEL12, GPIO_AFRH_AFSEL12_3 | GPIO_AFRH_AFSEL12_2 | GPIO_AFRH_AFSEL12_1); \/\/ PA12 AF14  MODIFY_REG(GPIOA->OSPEEDR, GPIO_OSPEEDR_OSPEED3_Msk, GPIO_OSPEEDR_OSPEED3_1 |  GPIO_OSPEEDR_OSPEED3_0); \/\/PA3 Very high speed MODIFY_REG(GPIOA->OSPEEDR, GPIO_OSPEEDR_OSPEED4_Msk, GPIO_OSPEEDR_OSPEED4_1 |  GPIO_OSPEEDR_OSPEED4_0); \/\/PA4 Very high speed MODIFY_REG(GPIOA->OSPEEDR, GPIO_OSPEEDR_OSPEED6_Msk, GPIO_OSPEEDR_OSPEED6_1 |  GPIO_OSPEEDR_OSPEED6_0); \/\/PA6 Very high speed MODIFY_REG(GPIOA->OSPEEDR, GPIO_OSPEEDR_OSPEED11_Msk, GPIO_OSPEEDR_OSPEED11_1 |  GPIO_OSPEEDR_OSPEED11_0); \/\/PA11 Very high speed MODIFY_REG(GPIOA->OSPEEDR, GPIO_OSPEEDR_OSPEED12_Msk, GPIO_OSPEEDR_OSPEED12_1 |  GPIO_OSPEEDR_OSPEED12_0); \/\/PA12 Very high speed  \/\/ PA3 PA4 PA6 PA11 PA12 No pull-up\/pull-down CLEAR_BIT(GPIOA->PUPDR, GPIO_PUPDR_PUPDR3 | GPIO_PUPDR_PUPDR4 | GPIO_PUPDR_PUPDR6 | GPIO_PUPDR_PUPDR11 | GPIO_PUPDR_PUPDR12);  \/*PF10 DE*\/ \/\/---PORT---F--- SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOFEN); \/\/ PORT F CLOCKS are ENABLED  MODIFY_REG(GPIOF->MODER, GPIO_MODER_MODER10, GPIO_MODER_MODE10_1); \/\/ PF10 Alternative func  CLEAR_BIT(GPIOF->OTYPER, GPIO_OTYPER_OT10); \/\/ PF10 Output push-pull  MODIFY_REG(GPIOF->AFR[1], GPIO_AFRH_AFSEL10, GPIO_AFRH_AFSEL10_3 | GPIO_AFRH_AFSEL10_2 | GPIO_AFRH_AFSEL10_1); \/\/ PF10 AF14 MODIFY_REG(GPIOF->OSPEEDR, GPIO_OSPEEDR_OSPEED10_Msk, GPIO_OSPEEDR_OSPEED10_1 |  GPIO_OSPEEDR_OSPEED10_0); \/\/PF10 Very high speed CLEAR_BIT(GPIOF->PUPDR, GPIO_PUPDR_PUPDR10);  \/\/ PF10 No pull-up\/pull-down  \/*PG7 DOTCLK PG6 R7 PG10 G3 PG11 B3 PG12 B4*\/ \/\/---PORT---G--- SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOGEN); \/\/ PORT G CLOCKS are ENABLED  \/\/ PG6 PG7 PG10 PG11 PG12 Alternative func MODIFY_REG(GPIOG->MODER, GPIO_MODER_MODER6 | GPIO_MODER_MODER7 , GPIO_MODER_MODE6_1 | GPIO_MODER_MODE7_1); MODIFY_REG(GPIOG->MODER, GPIO_MODER_MODER10 | GPIO_MODER_MODER11 | GPIO_MODER_MODER12, GPIO_MODER_MODE10_1 | GPIO_MODER_MODE11_1 | GPIO_MODER_MODE12_1);  CLEAR_BIT(GPIOG->OTYPER, GPIO_OTYPER_OT12 | GPIO_OTYPER_OT11 | GPIO_OTYPER_OT10 | GPIO_OTYPER_OT7 | GPIO_OTYPER_OT6); \/\/ PG6 PG7 PG10 PG11 PG12 Output push-pull  MODIFY_REG(GPIOG->AFR[0], GPIO_AFRL_AFRL6, GPIO_AFRL_AFRL6_3 | GPIO_AFRL_AFRL6_2 | GPIO_AFRL_AFRL6_1); \/\/ PG6 AF14 MODIFY_REG(GPIOG->AFR[0], GPIO_AFRL_AFRL7, GPIO_AFRL_AFRL7_3 | GPIO_AFRL_AFRL7_2 | GPIO_AFRL_AFRL7_1); \/\/ PG7 AF14 MODIFY_REG(GPIOG->AFR[1], GPIO_AFRH_AFSEL10, GPIO_AFRH_AFSEL10_3 |  GPIO_AFRH_AFSEL10_0); \/\/ PG10 AF9 MODIFY_REG(GPIOG->AFR[1], GPIO_AFRH_AFSEL11, GPIO_AFRH_AFSEL11_3 | GPIO_AFRH_AFSEL11_2 | GPIO_AFRH_AFSEL11_1); \/\/ PG11 AF14 MODIFY_REG(GPIOG->AFR[1], GPIO_AFRH_AFSEL12, GPIO_AFRH_AFSEL12_3 |  GPIO_AFRH_AFSEL12_0); \/\/ PG12 AF9  MODIFY_REG(GPIOG->OSPEEDR, GPIO_OSPEEDR_OSPEED6_Msk, GPIO_OSPEEDR_OSPEED6_1 |  GPIO_OSPEEDR_OSPEED6_0); \/\/PG6 Very high speed MODIFY_REG(GPIOG->OSPEEDR, GPIO_OSPEEDR_OSPEED7_Msk, GPIO_OSPEEDR_OSPEED7_1 |  GPIO_OSPEEDR_OSPEED7_0); \/\/PG7 Very high speed MODIFY_REG(GPIOG->OSPEEDR, GPIO_OSPEEDR_OSPEED10_Msk, GPIO_OSPEEDR_OSPEED10_1 |  GPIO_OSPEEDR_OSPEED10_0); \/\/PG10 Very high speed MODIFY_REG(GPIOG->OSPEEDR, GPIO_OSPEEDR_OSPEED11_Msk, GPIO_OSPEEDR_OSPEED11_1 |  GPIO_OSPEEDR_OSPEED11_0); \/\/PG11 Very high speed MODIFY_REG(GPIOG->OSPEEDR, GPIO_OSPEEDR_OSPEED12_Msk, GPIO_OSPEEDR_OSPEED12_1 |  GPIO_OSPEEDR_OSPEED12_0); \/\/PG12 Very high speed  CLEAR_BIT(GPIOG->PUPDR, GPIO_PUPDR_PUPDR6 | GPIO_PUPDR_PUPDR7 | GPIO_PUPDR_PUPDR10 | GPIO_PUPDR_PUPDR11 | GPIO_PUPDR_PUPDR12);  \/\/  No pull-up\/pull-down }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p><strong>3. \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043c\u043e\u0434\u0443\u043b\u044f.<\/strong><\/p>\n<p>\u0410) \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439. \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u043c \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439 (HSYNC) \u0438 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0439 (VSYNC), \u0448\u0438\u0440\u0438\u043d\u0443 \u043f\u0435\u0440\u0435\u0434\u043d\u0435\u0433\u043e \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0445\u043e\u0434\u043e\u0432 (front\/back porch), \u0430\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u0431 \u0434\u0438\u0441\u043f\u043b\u0435\u044f (active display area).<\/p>\n<p><em>\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f (HSYNC) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u0431\u0440\u043e\u0441\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u044f \u043d\u0430 \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u043b\u0435\u0432\u044b\u0439 \u0443\u0433\u043e\u043b.<br \/>\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f (VSYNC) \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043d\u0430 \u043d\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443.<br \/>\u0428\u0438\u0440\u0438\u043d\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0445\u043e\u0434\u0430 (back porch) \u2013 \u0432\u0440\u0435\u043c\u044f \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043d\u0446\u043e\u043c \u0441\u0438\u043d\u0445\u0440\u043e\u0438\u043c\u043f\u0443\u043b\u044c\u0441\u0430 \u0438 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<br \/>\u0428\u0438\u0440\u0438\u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u043d\u0435\u0433\u043e \u0445\u043e\u0434\u0430 (fronf porch) \u2013 \u0432\u0440\u0435\u043c\u044f \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043d\u0446\u043e\u043c \u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0441\u0438\u043d\u0445\u0440\u043e\u0438\u043c\u043f\u0443\u043b\u044c\u0441\u0430.<br \/>\u0410\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0434\u0438\u0441\u043f\u043b\u0435\u044f (active dispaly area) \u2013 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445.<\/em><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/954\/f9a\/031\/954f9a03162a04cb8aff838e854ad41d.png\" width=\"923\" height=\"625\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/954\/f9a\/031\/954f9a03162a04cb8aff838e854ad41d.png\"\/><\/figure>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0438\u0441\u043f\u043b\u0435\u044f. \u0414\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u0434\u0438\u0441\u043f\u043b\u0435\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0438 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u043d\u0438\u0436\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/994\/c76\/a8d\/994c76a8d5d112401bd138a1c42f19aa.png\" width=\"974\" height=\"442\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/994\/c76\/a8d\/994c76a8d5d112401bd138a1c42f19aa.png\"\/><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/39d\/fb0\/90c\/39dfb090ca9bcd09e502206c1a999edf.png\" width=\"974\" height=\"683\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/39d\/fb0\/90c\/39dfb090ca9bcd09e502206c1a999edf.png\"\/><\/figure>\n<p>\u0412 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0442\u0430\u0439\u043c\u0438\u043d\u0433\u043e\u0432 \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u0432\u0440\u0435\u043c\u044f Tvw (\u0448\u0438\u0440\u0438\u043d\u0430 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438) \u0438 Thw (\u0448\u0438\u0440\u0438\u043d\u0430 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438). \u041f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0435 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0448\u0438\u0440\u0438\u043d\u0430 Tvw \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 2 \u0442\u0430\u043a\u0442\u0430 HSYNC, \u0432 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0448\u0438\u0440\u0438\u043d\u0430 Thw \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 2 \u0442\u0430\u043a\u0442\u0430 DCLK (Pixel Clock). \u041c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0430\u0439\u043c\u0438\u043d\u0433\u0438 \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u043e\u0434\u043d\u0430\u043a\u043e, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 (TYP) \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u0442\u0430\u043a\u0442\u043e\u0432 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 \u0447\u0438\u0441\u043b\u0430 \u0442\u0430\u043a\u0442\u043e\u0432 \u0448\u0438\u0440\u0438\u043d\u044b \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0445\u043e\u0434\u0430 (back porch).<\/p>\n<p>\u0418\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443 back \u0438 front porch \u0434\u043b\u044f HSYNC \u0438 VSYNC. \u0422\u0430\u043a \u0436\u0435 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0438\u0437 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 TYP. \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f \u0438 \u0443\u0431\u0435\u0436\u0434\u0430\u0435\u043c\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u0443\u043c\u043c\u0430 \u0432\u0435\u043b\u0438\u0447\u0438\u043d back \u0438 front porch \u0434\u043b\u044f HSYNC \u0438 VSYNC 20 \u0438 51 \u0435\u0434\u0438\u043d\u0438\u0446\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"Tvbp + Tvfp = 12 + 8 =20\" alt=\"Tvbp + Tvfp = 12 + 8 =20\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7ea\/b6a\/5d4\/7eab6a5d40c5e47bcf65d455318b4dee.svg\" width=\"231\" height=\"20\"\/><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"Thbp + Tbfp = 43 + 8 =51\" alt=\"Thbp + Tbfp = 43 + 8 =51\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cee\/8bd\/c6e\/cee8bdc6efd7d3ea5b3039a3687bd8f9.svg\" width=\"232\" height=\"20\"\/><\/p>\n<p>\u0410\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0434\u0438\u0441\u043f\u043b\u0435\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 480\u0445272 \u043f\u0438\u043a\u0441\u0435\u043b\u044f.<\/p>\n<p>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0443\u0440\u043e\u0432\u043d\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432.<\/p>\n<p>\u041f\u0440\u0438 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u043f\u0430\u0434 \u0443\u0440\u043e\u0432\u043d\u044f, Active Low:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/616\/f69\/c55\/616f69c550fd76c9f248b80e8d0f4f2d.png\" width=\"974\" height=\"103\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/616\/f69\/c55\/616f69c550fd76c9f248b80e8d0f4f2d.png\"\/><\/figure>\n<p>\u041f\u0440\u0438 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u0430 \u0436\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f, Active Low:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/55c\/7fd\/362\/55c7fd36248ad15cb0098b749bd91f6e.png\" width=\"974\" height=\"88\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/55c\/7fd\/362\/55c7fd36248ad15cb0098b749bd91f6e.png\"\/><\/figure>\n<p>\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 (data enable) \u0441\u0438\u0433\u043d\u0430\u043b \u043d\u0430\u0440\u0430\u0441\u0442\u0430\u0435\u0442, Active High: <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8d7\/7f0\/f97\/8d77f0f972a6abd3fe8608b1e8d693bf.png\" width=\"974\" height=\"310\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8d7\/7f0\/f97\/8d77f0f972a6abd3fe8608b1e8d693bf.png\"\/><\/figure>\n<p>\u0417\u0430\u043f\u0438\u0441\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u0446\u0432\u0435\u0442\u0435 \u0442\u043e\u0433\u043e \u0438\u043b\u0438 \u0438\u043d\u043e\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f, \u0432\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u043d\u0438\u0435 \u0433\u043e\u043d\u043a\u0438 \u0444\u0440\u043e\u043d\u0442\u043e\u0432, \u0431\u0443\u0434\u0435\u043c \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c \u043f\u043e \u0441\u043f\u0430\u0434\u0430\u044e\u0449\u0435\u043c\u0443 \u0444\u0440\u043e\u043d\u0442\u0443 (\u043f\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0443 \u0441 \u00ab1\u00bb \u0432 \u00ab0\u00bb) DCLK (Pixel clocks):<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2f3\/19c\/c5b\/2f319cc5b81f40dc05c0ee38bffbfd57.png\" width=\"974\" height=\"317\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2f3\/19c\/c5b\/2f319cc5b81f40dc05c0ee38bffbfd57.png\"\/><\/figure>\n<p>\u0417\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b. \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0439 \u0438 \u043e\u0442\u043d\u0438\u043c\u0430\u0435\u043c \u043e\u0442 \u043d\u0435\u0433\u043e \u0435\u0434\u0438\u043d\u0438\u0446\u0443. \u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0438 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0441\u0432\u043e\u0438 \u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044f \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 LTDC_SSCR (\u0442\u043e\u0442 \u0436\u0435 \u043f\u043e\u0434\u0445\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0438 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043c\u043e\u0434\u0443\u043b\u044f):<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/783\/df4\/cd7\/783df4cd7f02fd386e6029b85b68e257.png\" width=\"693\" height=\"500\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/783\/df4\/cd7\/783df4cd7f02fd386e6029b85b68e257.png\"\/><\/figure>\n<details class=\"spoiler\">\n<summary>\u0414\u0435\u0444\u0430\u0439\u043d\u044b<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#define ACTIVE_LOW 0 #define ACTIVE_HIGH 1 #define NORMAL_INPUT 0 #define INVERTED_INPUT 1  #define V_SYNC_WIDTH4 #define V_SYNC_POL ACTIVE_LOW #define V_BACK_PORCH12 #define V_FRONT_PORCH8 #define DISP_ACTIVE_HEIGHT272  #define H_SYNC_WIDTH4 #define H_SYNC_POLACTIVE_LOW #define H_BACK_PORCH43 #define H_FRONT_PORCH8 #define DISP_ACTIVE_WIDTH480  #define DE_POL ACTIVE_HIGH #define PIXEL_CLOCK_POL INVERTED_INPUT  #define PAINTING_ZONE_H_SIZE 100 #define PAINTING_ZONE_V_SIZE 100 #define PAINTING_ZONE_H_OFFSET 190 #define PAINTING_ZONE_V_OFFSET 86  #define DISPLAY_PIXEL_FORMAT 0x02  #define MEMORY_SIZE (PAINTING_ZONE_H_SIZE * PAINTING_ZONE_V_SIZE)<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<pre><code class=\"cpp\">LTDC->SSCR = ((H_SYNC_WIDTH - 1) &lt;&lt; LTDC_SSCR_HSW_Pos) | (V_SYNC_WIDTH - 1);<\/code><\/pre>\n<\/p>\n<p>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 back porch \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 LTDC_BPCR. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u0443\u043c\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 back porch \u0438 \u0443\u0436\u0435 \u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0437\u0430\u0431\u044b\u0432 \u043e\u0442\u043d\u044f\u0442\u044c 1:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/cbc\/065\/d75\/cbc065d75ce3f4be20ed113d6c1aadd9.png\" width=\"693\" height=\"500\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cbc\/065\/d75\/cbc065d75ce3f4be20ed113d6c1aadd9.png\"\/><\/figure>\n<pre><code class=\"cpp\">LTDC->BPCR = ((H_BACK_PORCH - 1) &lt;&lt; LTDC_BPCR_AHBP_Pos) | (V_BACK_PORCH - 1);<\/code><\/pre>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0438 \u0434\u043b\u044f \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0434\u0438\u0441\u043f\u043b\u0435\u044f. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0443\u043c\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438, back porch \u0438 \u043a \u043d\u0438\u043c \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 LTDC_AWCR:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9ed\/3a9\/b5e\/9ed3a9b5e171f1c1b11b09ee54ebf65e.png\" width=\"775\" height=\"659\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9ed\/3a9\/b5e\/9ed3a9b5e171f1c1b11b09ee54ebf65e.png\"\/><\/figure>\n<pre><code class=\"cpp\">LTDC->AWCR = ((H_SYNC_WIDTH + H_BACK_PORCH + DISP_ACTIVE_WIDTH - 1)                &lt;&lt; LTDC_AWCR_AAW_Pos) | (V_SYNC_WIDTH + V_BACK_PORCH + DISP_ACTIVE_HEIGHT - 1);<\/code><\/pre>\n<p>\u0412 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 LTDC_TWCR \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u0430\u044f \u0448\u0438\u0440\u0438\u043d\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 \u0434\u0438\u0441\u043f\u043b\u0435\u044f \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0432\u0441\u0435\u0445 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u0433\u0434\u0435, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438 front porch. \u041e\u043f\u044f\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0441\u0443\u043c\u043c\u0443 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438, back porch, \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0438 front porch, \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u043e\u0442\u043d\u044f\u0442\u044c \u0435\u0434\u0438\u043d\u0438\u0446\u0443:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/723\/579\/b23\/723579b2327dd570fd33ac5b36074569.png\" width=\"736\" height=\"781\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/723\/579\/b23\/723579b2327dd570fd33ac5b36074569.png\"\/><\/figure>\n<pre><code class=\"cpp\">LTDC->TWCR = ((H_SYNC_WIDTH + H_BACK_PORCH + DISP_ACTIVE_WIDTH + H_FRONT_PORCH - 1) &lt;&lt; LTDC_TWCR_TOTALW_Pos)               | (V_SYNC_WIDTH + V_BACK_PORCH + DISP_ACTIVE_HEIGHT + V_FRONT_PORCH - 1);<\/code><\/pre>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u043f\u043e\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 HSYNC, VSYNC \u0438 DE. \u041a\u0430\u043a \u043c\u044b \u0440\u0430\u043d\u0435\u0435 \u0443\u0437\u043d\u0430\u043b\u0438 \u0438\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043d\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u043f\u043e\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f:<\/p>\n<p>HSYNC \u2013 Active Low;<br \/>VSYNC \u2013 Active High;<br \/>DE \u2013 Active Low;<br \/>PCP (Pixel Clock Polarity) \u2013 inverted input.<\/p>\n<p>\u0417\u0430\u043f\u0438\u0448\u0435\u043c \u044d\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 LTDC_GCR:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/610\/0fc\/103\/6100fc103ddc10ad578a87c892f0067b.png\" width=\"726\" height=\"1066\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/610\/0fc\/103\/6100fc103ddc10ad578a87c892f0067b.png\"\/><\/figure>\n<pre><code class=\"cpp\">LTDC->GCR = LTDC_GCR_DEPOL | LTDC_GCR_PCPOL;<\/code><\/pre>\n<p>\u0412 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0446\u0435, \u0434\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0431\u0443\u0434\u0435\u043c \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0438 \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u0431\u0438\u0442\u0430 LTDCEN.   <\/p>\n<p>\u0411) \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0441\u043b\u043e\u0451\u0432. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441 \u043e\u0434\u043d\u0438\u043c(\u043f\u0435\u0440\u0432\u044b\u043c) \u0441\u043b\u043e\u0435\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u043b\u043e\u044f \u043d\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u0435. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0432\u044b\u0441\u043e\u0442\u0443 \u0438 \u0434\u043b\u0438\u043d\u0443 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u0445 100&#215;100 \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u0434\u0438\u0441\u043f\u043b\u0435\u044f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 LTDC_LxWHPCR \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u0438 \u0441\u0442\u043e\u043f\u043e\u0432\u044b\u0439 \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u043d\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u0435:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ace\/799\/046\/ace799046cb5f5dfd178cfb7d23b7c33.png\" width=\"483\" height=\"515\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ace\/799\/046\/ace799046cb5f5dfd178cfb7d23b7c33.png\"\/><\/figure>\n<p>\u041f\u0440\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0434\u0438\u0441\u043f\u043b\u0435\u044f, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0447\u0435\u0441\u0442\u044c \u0435\u0449\u0451 \u0438 \u0448\u0438\u0440\u0438\u043d\u0443 back porch:  <\/p>\n<pre><code class=\"cpp\">LTDC_Layer1->WHPCR = ((H_SYNC_WIDTH + H_BACK_PORCH + PAINTING_ZONE_H_OFFSET) )                        | ((H_SYNC_WIDTH + H_BACK_PORCH + PAINTING_ZONE_H_OFFSET + PAINTING_ZONE_H_SIZE - 1) &lt;&lt; LTDC_LxWHPCR_WHSPPOS_Pos);<\/code><\/pre>\n<p><em>P.S. \u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432 RM \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u0447\u0442\u0435\u043d\u0430 \u0432 HAL, \u043d\u043e \u0442\u0430\u043a \u0438 \u043d\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438. \u041e\u0448\u0438\u0431\u043a\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0430\u0432\u0442\u043e\u0440\u044b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u0432 \u0431\u0438\u0442\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435 \u00abWSHPPOS\u00bb \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0431\u0435\u0437 \u0443\u0447\u0451\u0442\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u00ab\u043d\u0443\u043b\u0435\u0432\u043e\u0439\u00bb\/\u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u0442\u0430\u043a \u043a\u0430\u043a, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0448\u0438\u0440\u0438\u043d\u0443 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u0442\u043e \u0448\u0438\u0440\u0438\u043d\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043d\u0430 1 \u0431\u043e\u043b\u044c\u0448\u0435. \u0412 \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0438 \u0447\u0435\u0433\u043e, \u043c\u043e\u0434\u0443\u043b\u044c LTDC, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0432\u0438\u0434\u0435\u043e\u0431\u0443\u0444\u0435\u0440\u0430 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043e \u043f\u043e\u0434 \u043d\u0430\u043a\u043b\u043e\u043d\u043e\u043c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0432\u044b\u0447\u0435\u0441\u0442\u044c \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u043f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438.<\/em><\/p>\n<p>\u0422\u043e\u0442 \u0436\u0435 \u043f\u043e\u0434\u0445\u043e\u0434 \u0438 \u0434\u043b\u044f \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/996\/540\/12d\/99654012d803ede7284d6481ffe90063.png\" width=\"440\" height=\"485\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/996\/540\/12d\/99654012d803ede7284d6481ffe90063.png\"\/><\/figure>\n<pre><code class=\"cpp\">LTDC_Layer1->WVPCR = ((V_SYNC_WIDTH + V_BACK_PORCH + PAINTING_ZONE_V_OFFSET) )                        | ((V_SYNC_WIDTH + V_BACK_PORCH + PAINTING_ZONE_V_OFFSET + PAINTING_ZONE_V_SIZE - 1) &lt;&lt; LTDC_LxWVPCR_WVSPPOS_Pos);<\/code><\/pre>\n<p>\u0412\u044b\u0431\u0435\u0440\u0435\u043c \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u043f\u0438\u043a\u0441\u0435\u043b (Pixel Format), \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u0446\u0432\u0435\u0442\u043e\u0432\u0443\u044e \u043f\u0430\u043b\u0438\u0442\u0440\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440 LTDC_LxPFCR.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c8c\/49d\/697\/c8c49d697720201cf037407bf37b4ea3.png\" width=\"497\" height=\"392\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c8c\/49d\/697\/c8c49d697720201cf037407bf37b4ea3.png\"\/><\/figure>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e 1 \u0441\u043b\u043e\u0439 \u0438 \u044d\u0442\u043e \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u0442\u043e \u043d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u0438 \u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0433\u043b\u0443\u0431\u0438\u043d\u044b \u0446\u0432\u0435\u0442\u043e\u0432. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c\u0441\u044f, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c RGB565 (\u0447\u0435\u0433\u043e, \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432\/\u0434\u0430 \u0438 \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0430 \u0442\u0430\u043a\u0430\u044f \u0440\u0430\u0437\u0432\u043e\u0434\u043a\u0430):<\/p>\n<pre><code class=\"cpp\">LTDC_Layer1->PFCR = DISPLAY_PIXEL_FORMAT;<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043a\u0430\u0434\u0440\u0430 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u043a\u0430\u043a \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f RAM, \u0442\u0430\u043a \u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 SDRAM, \u0438 \u0434\u0430\u0436\u0435 FLASH. \u00a0\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043a\u0430\u043a \u043c\u043d\u043e\u0433\u043e \u043d\u0430\u0448 \u0431\u0443\u0444\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438:<\/p>\n<p>PAINTING_ZONE_H_SIZE * PAINTING_ZONE_V_SIZE * PIXEL_FORMAT = MEMORY_SIZE<\/p>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"100 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 * 100 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 * 2 \u0431\u0430\u0439\u0442\u0430 = 20000 \u0431\u0430\u0439\u0442\" alt=\"100 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 * 100 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 * 2 \u0431\u0430\u0439\u0442\u0430 = 20000 \u0431\u0430\u0439\u0442\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9bc\/359\/2f1\/9bc3592f124889834009df03e0fec049.svg\" width=\"399\" height=\"23\"\/><\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0432 \u043d\u0430\u0448\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e RAM \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u0438\u0434\u0435\u043e\u0431\u0443\u0444\u0435\u0440\u0430, \u0442\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0435\u0433\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043a\u0430\u0434\u0440\u0430 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 LTDC_LxCFBAR:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f06\/c39\/544\/f06c3954407736ace0da90da26293446.png\" width=\"819\" height=\"425\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f06\/c39\/544\/f06c3954407736ace0da90da26293446.png\"\/><\/figure>\n<pre><code class=\"cpp\">LTDC_Layer1->CFBAR = &amp;frameBuffer;<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435, \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 LTDC_LxCFBLR, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043c\u043e\u0434\u0443\u043b\u044e \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 (\u0432 \u0431\u0430\u0439\u0442\u0430\u0445) \u043e\u0434\u043d\u043e\u0439 \u043b\u0438\u043d\u0438\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c (Color Frame Buffer Pitch in bytes) \u0438 \u043a\u0430\u043a\u0430\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0434\u043b\u0438\u043d\u0430 \u043b\u0438\u043d\u0438\u0438 \u043a\u0430\u0434\u0440\u0430 (\u0432 \u0431\u0430\u0439\u0442\u0430\u0445):<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/709\/2a4\/7ef\/7092a47ef7b0b6bc58093cdaa5869185.png\" width=\"974\" height=\"931\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/709\/2a4\/7ef\/7092a47ef7b0b6bc58093cdaa5869185.png\"\/><\/figure>\n<pre><code class=\"cpp\">LTDC_Layer1->CFBLR = ((PAINTING_ZONE_H_SIZE * 2) &lt;&lt; LTDC_LxCFBLR_CFBLL_Pos) | (PAINTING_ZONE_H_SIZE * 2 + 3);<\/code><\/pre>\n<p>\u0421\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043a \u0434\u043b\u0438\u043d\u0435 \u043b\u0438\u043d\u0438\u0438 \u043a\u0430\u0434\u0440\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443, \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 3. \u0414\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u0434\u0430\u043d\u043d\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f H7 \u0441\u0435\u0440\u0438\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u043e\u043d\u0430 \u0440\u0430\u0432\u043d\u044f\u0435\u0442\u0441\u044f 7. \u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043d\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043e.<\/p>\n<p>\u0423\u043a\u0430\u0436\u0435\u043c, \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 LTDC_LxCFBLNR, \u043c\u043e\u0434\u0443\u043b\u044e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a \u0432 \u043a\u0430\u0434\u0440\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ebb\/365\/680\/ebb36568018f917c4f34663f9969d0af.png\" width=\"974\" height=\"732\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ebb\/365\/680\/ebb36568018f917c4f34663f9969d0af.png\"\/><\/figure>\n<pre><code class=\"cpp\">LTDC_Layer1->CFBLNR = PAINTING_ZONE_V_SIZE;<\/code><\/pre>\n<p>\u0412) \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u043f\u0443\u043d\u043a\u0442\u043e\u043c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u0441\u043b\u043e\u044f, \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0442\u0435\u043d\u0435\u0432\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u0430\u043c\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f LTDC.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u043b\u043e\u044e \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0431\u0438\u0442\u0430 LEN \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 LTDC_LxCR:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bc2\/cbf\/445\/bc2cbf445dc98edc8485f2fb6f154bc1.png\" width=\"782\" height=\"685\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bc2\/cbf\/445\/bc2cbf445dc98edc8485f2fb6f154bc1.png\"\/><\/figure>\n<pre><code class=\"cpp\">LTDC_Layer1->CR = LTDC_LxCR_LEN;<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0442\u0435\u043d\u0435\u0432\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0432 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 LTDC_SRCR. \u041f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u044c \u0434\u0432\u0443\u043c\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438: \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 \u0438 \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432. \u041d\u043e \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043c\u043e\u0434\u0443\u043b\u044f LTDC \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u0434\u043b\u044f \u0438\u0437\u0431\u0435\u0433\u0430\u043d\u0438\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0441 \u00ab\u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0430\u043c\u0438\u00bb. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/16e\/7f7\/b87\/16e7f7b879ec1b66e3daf452e3fa2a1b.png\" width=\"974\" height=\"839\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/16e\/7f7\/b87\/16e7f7b879ec1b66e3daf452e3fa2a1b.png\"\/><\/figure>\n<p>\u0418 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u2013 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u043c\u043e\u0434\u0443\u043b\u044f LTDC, \u0432 \u0440\u0430\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 LTDC_GCR \u043f\u0443\u0442\u0451\u043c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0431\u0438\u0442\u0430 LTDCEN:<\/p>\n<pre><code class=\"cpp\">LTDC->GCR |= LTDC_GCR_LTDCEN;<\/code><\/pre>\n<p><em>P.S. \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0435\u0449\u0451 \u0438 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0443 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c, \u0431\u0435\u0437 \u043d\u0435\u0451 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u0438\u0434\u043d\u043e.<\/em><\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0432\u0441\u0451 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0442\u043e \u0443 \u0432\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ccf\/430\/69e\/ccf43069eaea58191e569a605be3d13f.png\" width=\"863\" height=\"551\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ccf\/430\/69e\/ccf43069eaea58191e569a605be3d13f.png\"\/><\/figure>\n<p>\u0425\u0430\u043e\u0442\u0438\u0447\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0446\u0432\u0435\u0442\u043e\u0432 \u0432 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043d\u0435\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435\u043e\u0431\u0443\u0444\u0435\u0440\u0435.<\/p>\n<p>\u0410 \u0442\u0430\u043a \u0435\u0441\u043b\u0438 \u0432 \u0431\u0443\u0444\u0435\u0440 \u043d\u0430\u0447\u0430\u0442\u044c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u0438\u0441\u0430\u0442\u044c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3f2\/082\/eb2\/3f2082eb21c2ebfefde4d6084c2f7ef9.png\" width=\"824\" height=\"618\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3f2\/082\/eb2\/3f2082eb21c2ebfefde4d6084c2f7ef9.png\"\/><\/figure>\n<details class=\"spoiler\">\n<summary>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u044d\u0442\u0430\u043f\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043e\u0434\u0443\u043b\u044f LTDC<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">__attribute__((optimize(BL_OPTIMIZATION_LVL))) void BL_MCU_LTDC_MODULE_Init(void){  \/*The First step: configure HSYNC, VSYNC, V&amp;H back porch active data area &amp; front porch timings following the panel datasheet*\/  LTDC->SSCR = ((H_SYNC_WIDTH - 1) &lt;&lt; LTDC_SSCR_HSW_Pos) | (V_SYNC_WIDTH - 1);  LTDC->BPCR = ((H_SYNC_WIDTH + H_BACK_PORCH - 1) &lt;&lt; LTDC_BPCR_AHBP_Pos) | (V_SYNC_WIDTH + V_BACK_PORCH - 1); LTDC->AWCR = ((H_SYNC_WIDTH + H_BACK_PORCH + DISP_ACTIVE_WIDTH - 1) &lt;&lt; LTDC_AWCR_AAW_Pos) | (V_SYNC_WIDTH + V_BACK_PORCH + DISP_ACTIVE_HEIGHT - 1); LTDC->TWCR = ((H_SYNC_WIDTH + H_BACK_PORCH + DISP_ACTIVE_WIDTH + H_FRONT_PORCH - 1) &lt;&lt; LTDC_TWCR_TOTALW_Pos) | (V_SYNC_WIDTH + V_BACK_PORCH + DISP_ACTIVE_HEIGHT + V_FRONT_PORCH - 1);  LTDC->GCR = LTDC_GCR_DEPOL | LTDC_GCR_PCPOL;  \/*The Second step:  Layer Configuration*\/ LTDC_Layer1->WHPCR = ((H_SYNC_WIDTH + H_BACK_PORCH + PAINTING_ZONE_H_OFFSET) ) | ((H_SYNC_WIDTH + H_BACK_PORCH + PAINTING_ZONE_H_OFFSET + PAINTING_ZONE_H_SIZE - 1) &lt;&lt; LTDC_LxWHPCR_WHSPPOS_Pos); LTDC_Layer1->WVPCR = ((V_SYNC_WIDTH + V_BACK_PORCH + PAINTING_ZONE_V_OFFSET) ) | ((V_SYNC_WIDTH + V_BACK_PORCH + PAINTING_ZONE_V_OFFSET + PAINTING_ZONE_V_SIZE - 1) &lt;&lt; LTDC_LxWVPCR_WVSPPOS_Pos); LTDC_Layer1->PFCR = DISPLAY_PIXEL_FORMAT; LTDC_Layer1->CFBAR = (uint32_t)&amp;frameBuffer;  \/\/LTDC_Layer1->BFCR = (0x4 &lt;&lt; LTDC_LxBFCR_BF1_Pos) | 0x5;  LTDC_Layer1->CFBLR = ((PAINTING_ZONE_H_SIZE * 2) &lt;&lt; LTDC_LxCFBLR_CFBP_Pos) | (PAINTING_ZONE_H_SIZE * 2 + 3); LTDC_Layer1->CFBLNR = PAINTING_ZONE_V_SIZE;  \/*The Third step:  Clocks and module enabling*\/ BL_MCU_LTDC_LAYER_Enable();  LTDC->SRCR = LTDC_SRCR_IMR;  BL_MCU_LTDC_Enable();  BL_MCU_LTDC_BACKLIGNHT_Enable(); }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0412\u0435\u0441\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/*  *      Author: Zmitrovich Stanislau  *\/   \/\/INCLUDES #include \"..\/MCUs_MainFunctions.h\" #include \"..\/..\/bl_can.h\" #include \"..\/inc\/drawString.h\"  #if (BL_USED_MCU == BL_STM_32_F429) #include \"mcu_stm32f429.h\" \/\/DEFINES #define ACTIVE_LOW 0 #define ACTIVE_HIGH 1 #define NORMAL_INPUT 0 #define INVERTED_INPUT 1  #define V_SYNC_WIDTH4 #define V_SYNC_POL ACTIVE_LOW #define V_BACK_PORCH12 #define V_FRONT_PORCH8 #define DISP_ACTIVE_HEIGHT272  #define H_SYNC_WIDTH4 #define H_SYNC_POLACTIVE_LOW #define H_BACK_PORCH43 #define H_FRONT_PORCH8 #define DISP_ACTIVE_WIDTH480  #define DE_POL ACTIVE_HIGH #define PIXEL_CLOCK_POL INVERTED_INPUT  #define PAINTING_ZONE_H_SIZE 100 #define PAINTING_ZONE_V_SIZE 100 #define PAINTING_ZONE_H_OFFSET 190 #define PAINTING_ZONE_V_OFFSET 86  #define DISPLAY_PIXEL_FORMAT 0x02  #define MEMORY_SIZE (PAINTING_ZONE_H_SIZE * PAINTING_ZONE_V_SIZE) \/\/VARIABLES uint16_t frameBuffer[PAINTING_ZONE_V_SIZE][PAINTING_ZONE_H_SIZE];  \/\/FUNCTIONS_PROTOTYPES void BL_MCU_LTDC_GPIO_Init(void) __attribute__((optimize(BL_OPTIMIZATION_LVL))); void BL_MCU_LTDC_CLOCKS_Init(void) __attribute__((optimize(BL_OPTIMIZATION_LVL))); void BL_MCU_LTDC_MODULE_Init(void) __attribute__((optimize(BL_OPTIMIZATION_LVL)));  void BL_MCU_LTDC_Enable(void) __attribute__((optimize(BL_OPTIMIZATION_LVL))); void BL_MCU_LTDC_Disable(void) __attribute__((optimize(BL_OPTIMIZATION_LVL)));  void BL_MCU_LTDC_LAYER_Enable(void) __attribute__((optimize(BL_OPTIMIZATION_LVL))); void BL_MCU_LTDC_LAYER_Disable(void) __attribute__((optimize(BL_OPTIMIZATION_LVL)));  void BL_MCU_LTDC_BACKLIGNHT_Enable(void) __attribute__((optimize(BL_OPTIMIZATION_LVL))); void BL_MCU_LTDC_BACKLIGNHT_Disable(void) __attribute__((optimize(BL_OPTIMIZATION_LVL)));   void BL_MCU_LTDC_Init(void) __attribute__((optimize(BL_OPTIMIZATION_LVL)));     \/\/FUNCTIONS __attribute__((optimize(BL_OPTIMIZATION_LVL))) void BL_MCU_Function(void){ BL_MCU_LTDC_Init();   uint8_t string1[] = \"B O O T\"; uint8_t string2[] = {\"L O A D\"}; drawDOS16String(22, 36, string1, 7, 0x3F &lt;&lt; 5); drawDOS16String(22, 48, string2, 7, 0x3F &lt;&lt; 5);   }  __attribute__((optimize(BL_OPTIMIZATION_LVL))) void BL_MCU_LTDC_Init(void){ BL_MCU_LTDC_GPIO_Init(); BL_MCU_LTDC_CLOCKS_Init(); BL_MCU_LTDC_MODULE_Init();  for(uint32_t i = 0; i &lt; PAINTING_ZONE_H_SIZE; i++){ for(uint32_t j = 0; j &lt; PAINTING_ZONE_V_SIZE; j++){ if(i==0 || i == (PAINTING_ZONE_H_SIZE - 1) || j == 0 || j == (PAINTING_ZONE_V_SIZE - 1)){ frameBuffer[i][j] = 0xFFFF; }else{ frameBuffer[i][j] = 0x0000; } } }  }  __attribute__((optimize(BL_OPTIMIZATION_LVL))) void BL_MCU_LTDC_Enable(void) { LTDC->GCR |= LTDC_GCR_LTDCEN; }  __attribute__((optimize(BL_OPTIMIZATION_LVL))) void BL_MCU_LTDC_Disable(void) { LTDC->GCR &amp;= ~LTDC_GCR_LTDCEN; }  __attribute__((optimize(BL_OPTIMIZATION_LVL))) void BL_MCU_LTDC_LAYER_Enable(void) { LTDC_Layer1->CR |= LTDC_LxCR_LEN; }  __attribute__((optimize(BL_OPTIMIZATION_LVL))) void BL_MCU_LTDC_LAYER_Disable(void) { LTDC_Layer1->CR &amp;= ~LTDC_LxCR_LEN; }  __attribute__((optimize(BL_OPTIMIZATION_LVL))) void BL_MCU_LTDC_BACKLIGNHT_Enable(void){ GPIOD->ODR |= GPIO_ODR_OD12; }  __attribute__((optimize(BL_OPTIMIZATION_LVL))) void BL_MCU_LTDC_BACKLIGNHT_Disable(void){ GPIOD->ODR &amp;= ~GPIO_ODR_OD12; }   __attribute__((optimize(BL_OPTIMIZATION_LVL))) void BL_MCU_LTDC_GPIO_Init(void){  \/\/Backlight SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN); \/\/ PORT D CLOCKS are ENABLED MODIFY_REG(GPIOD->MODER, GPIO_MODER_MODER12, GPIO_MODER_MODE12_0); \/\/ PD12 output  \/*PB0 R3 PB1 R6 PB10 G4 PB11 G5 PB8 B6 PB9 B7*\/ \/\/---PORT---B--- SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOBEN); \/\/ PORT B CLOCKS are ENABLED  MODIFY_REG(GPIOB->MODER, GPIO_MODER_MODER0, GPIO_MODER_MODE0_1); \/\/ PB0 Alternative func MODIFY_REG(GPIOB->MODER, GPIO_MODER_MODER1, GPIO_MODER_MODE1_1); \/\/ PB1 Alternative func MODIFY_REG(GPIOB->MODER, GPIO_MODER_MODER8, GPIO_MODER_MODE8_1); \/\/ PB8 Alternative func MODIFY_REG(GPIOB->MODER, GPIO_MODER_MODER9, GPIO_MODER_MODE9_1); \/\/ PB9 Alternative func MODIFY_REG(GPIOB->MODER, GPIO_MODER_MODER10, GPIO_MODER_MODE10_1); \/\/ PB10 Alternative func MODIFY_REG(GPIOB->MODER, GPIO_MODER_MODER11, GPIO_MODER_MODE11_1); \/\/ PB11 Alternative func  CLEAR_BIT(GPIOB->OTYPER, GPIO_OTYPER_OT0 | GPIO_OTYPER_OT1 | GPIO_OTYPER_OT8 | GPIO_OTYPER_OT9 | GPIO_OTYPER_OT10 | GPIO_OTYPER_OT11); \/\/ PB0 PB1 PB8 PB9 PB10 PB11 Output push-pull  MODIFY_REG(GPIOB->AFR[0], GPIO_AFRL_AFRL0, GPIO_AFRL_AFRL0_3 | GPIO_AFRL_AFRL0_0); \/\/ PB0 AF9 MODIFY_REG(GPIOB->AFR[0], GPIO_AFRL_AFRL1, GPIO_AFRL_AFRL1_3 | GPIO_AFRL_AFRL1_0); \/\/ PB1 AF9 MODIFY_REG(GPIOB->AFR[1], GPIO_AFRH_AFSEL8, GPIO_AFRH_AFSEL8_3 | GPIO_AFRH_AFSEL8_2 | GPIO_AFRH_AFSEL8_1); \/\/ PB8 AF14 MODIFY_REG(GPIOB->AFR[1], GPIO_AFRH_AFSEL9, GPIO_AFRH_AFSEL9_3 | GPIO_AFRH_AFSEL9_2 | GPIO_AFRH_AFSEL9_1); \/\/ PB9 AF14 MODIFY_REG(GPIOB->AFR[1], GPIO_AFRH_AFSEL10, GPIO_AFRH_AFSEL10_3 | GPIO_AFRH_AFSEL10_2 | GPIO_AFRH_AFSEL10_1); \/\/ PB10 AF14 MODIFY_REG(GPIOB->AFR[1], GPIO_AFRH_AFSEL11, GPIO_AFRH_AFSEL11_3 | GPIO_AFRH_AFSEL11_2 | GPIO_AFRH_AFSEL11_1); \/\/ PB11 AF14  MODIFY_REG(GPIOB->OSPEEDR, GPIO_OSPEEDR_OSPEED0_Msk, GPIO_OSPEEDR_OSPEED0_1 |  GPIO_OSPEEDR_OSPEED0_0); \/\/PB0 Very high speed MODIFY_REG(GPIOB->OSPEEDR, GPIO_OSPEEDR_OSPEED1_Msk, GPIO_OSPEEDR_OSPEED1_1 | GPIO_OSPEEDR_OSPEED1_0); \/\/PB1 Very high speed MODIFY_REG(GPIOB->OSPEEDR, GPIO_OSPEEDR_OSPEED8_Msk, GPIO_OSPEEDR_OSPEED8_1 | GPIO_OSPEEDR_OSPEED8_0); \/\/PB8 Very high speed MODIFY_REG(GPIOB->OSPEEDR, GPIO_OSPEEDR_OSPEED9_Msk, GPIO_OSPEEDR_OSPEED9_1 | GPIO_OSPEEDR_OSPEED9_0); \/\/PB9 Very high speed MODIFY_REG(GPIOB->OSPEEDR, GPIO_OSPEEDR_OSPEED10_Msk, GPIO_OSPEEDR_OSPEED10_1 | GPIO_OSPEEDR_OSPEED10_0); \/\/PB10 Very high speed MODIFY_REG(GPIOB->OSPEEDR, GPIO_OSPEEDR_OSPEED11_Msk, GPIO_OSPEEDR_OSPEED11_1 | GPIO_OSPEEDR_OSPEED11_0); \/\/PB11 Very high speed  CLEAR_BIT(GPIOB->PUPDR, GPIO_PUPDR_PUPDR0 | GPIO_PUPDR_PUPDR1 | GPIO_PUPDR_PUPDR8 | GPIO_PUPDR_PUPDR9 | GPIO_PUPDR_PUPDR10 | GPIO_PUPDR_PUPDR11); \/\/ PB0 PB1 PB8 PB9 PB10 PB11 No pull-up\/pull-down  \/*PC6 HSYNC PC7 G6*\/ \/\/---PORT---C--- SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN); \/\/ PORT B CLOCKS are ENABLED  MODIFY_REG(GPIOC->MODER, GPIO_MODER_MODER6, GPIO_MODER_MODE6_1); \/\/ PC6 Alternative func MODIFY_REG(GPIOC->MODER, GPIO_MODER_MODER7, GPIO_MODER_MODE7_1); \/\/ PC7 Alternative func  CLEAR_BIT(GPIOC->OTYPER, GPIO_OTYPER_OT6 | GPIO_OTYPER_OT7); \/\/ PC6 PC7 Output push-pull  MODIFY_REG(GPIOC->AFR[0], GPIO_AFRL_AFRL6, GPIO_AFRL_AFRL6_3 | GPIO_AFRL_AFRL6_2 | GPIO_AFRL_AFRL6_1); \/\/ PC6 AF14 MODIFY_REG(GPIOC->AFR[0], GPIO_AFRL_AFRL7, GPIO_AFRL_AFRL7_3 | GPIO_AFRL_AFRL7_2 | GPIO_AFRL_AFRL7_1); \/\/ PC7 AF14  MODIFY_REG(GPIOC->OSPEEDR, GPIO_OSPEEDR_OSPEED6_Msk, GPIO_OSPEEDR_OSPEED6_1 |  GPIO_OSPEEDR_OSPEED6_0); \/\/PC6 Very high speed MODIFY_REG(GPIOC->OSPEEDR, GPIO_OSPEEDR_OSPEED7_Msk, GPIO_OSPEEDR_OSPEED7_1 | GPIO_OSPEEDR_OSPEED7_0); \/\/PC7 Very high speed  CLEAR_BIT(GPIOC->PUPDR, GPIO_PUPDR_PUPDR6 | GPIO_PUPDR_PUPDR7); \/\/ PC6 PC7 No pull-up\/pull-down   \/*PD3 G7*\/ \/\/---PORT---D--- SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN); \/\/ PORT D CLOCKS are ENABLED  MODIFY_REG(GPIOD->MODER, GPIO_MODER_MODER3, GPIO_MODER_MODE3_1); \/\/ PD3 Alternative func  CLEAR_BIT(GPIOD->OTYPER, GPIO_OTYPER_OT3); \/\/ PD3 Output push-pull  MODIFY_REG(GPIOD->AFR[0], GPIO_AFRL_AFRL3, GPIO_AFRL_AFRL3_3 | GPIO_AFRL_AFRL3_2 | GPIO_AFRL_AFRL3_1); \/\/ PD3 AF14 MODIFY_REG(GPIOD->OSPEEDR, GPIO_OSPEEDR_OSPEED3_Msk, GPIO_OSPEEDR_OSPEED3_1 |  GPIO_OSPEEDR_OSPEED3_0); \/\/PD3 Very high speed CLEAR_BIT(GPIOD->PUPDR, GPIO_PUPDR_PUPDR3);  \/\/ PD3 No pull-up\/pull-down   \/*PA11 R4 PA12 R5 PA6  G2 PA3 B5 PA4 VSYNC*\/  \/\/---PORT---A--- SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOAEN); \/\/ PORT A CLOCKS are ENABLED  \/\/ PA3 PA4 PA6 PA11 PA12 Alternative func MODIFY_REG(GPIOA->MODER, GPIO_MODER_MODER3 | GPIO_MODER_MODER4 | GPIO_MODER_MODER6, GPIO_MODER_MODE6_1 | GPIO_MODER_MODE4_1 | GPIO_MODER_MODE3_1); MODIFY_REG(GPIOA->MODER, GPIO_MODER_MODER11 | GPIO_MODER_MODER12, GPIO_MODER_MODE11_1 | GPIO_MODER_MODE12_1);  CLEAR_BIT(GPIOA->OTYPER, GPIO_OTYPER_OT12 | GPIO_OTYPER_OT11 | GPIO_OTYPER_OT6 | GPIO_OTYPER_OT4 | GPIO_OTYPER_OT3); \/\/ PCD Output push-pull  MODIFY_REG(GPIOA->AFR[0], GPIO_AFRL_AFRL3, GPIO_AFRL_AFRL3_3 | GPIO_AFRL_AFRL3_2 | GPIO_AFRL_AFRL3_1); \/\/ PA3 AF14 MODIFY_REG(GPIOA->AFR[0], GPIO_AFRL_AFRL4, GPIO_AFRL_AFRL4_3 | GPIO_AFRL_AFRL4_2 | GPIO_AFRL_AFRL4_1); \/\/ PA4 AF14 MODIFY_REG(GPIOA->AFR[0], GPIO_AFRL_AFRL6, GPIO_AFRL_AFRL6_3 | GPIO_AFRL_AFRL6_2 | GPIO_AFRL_AFRL6_1); \/\/ PA6 AF14 MODIFY_REG(GPIOA->AFR[1], GPIO_AFRH_AFSEL11, GPIO_AFRH_AFSEL11_3 | GPIO_AFRH_AFSEL11_2 | GPIO_AFRH_AFSEL11_1); \/\/ PA11 AF14 MODIFY_REG(GPIOA->AFR[1], GPIO_AFRH_AFSEL12, GPIO_AFRH_AFSEL12_3 | GPIO_AFRH_AFSEL12_2 | GPIO_AFRH_AFSEL12_1); \/\/ PA12 AF14  MODIFY_REG(GPIOA->OSPEEDR, GPIO_OSPEEDR_OSPEED3_Msk, GPIO_OSPEEDR_OSPEED3_1 |  GPIO_OSPEEDR_OSPEED3_0); \/\/PA3 Very high speed MODIFY_REG(GPIOA->OSPEEDR, GPIO_OSPEEDR_OSPEED4_Msk, GPIO_OSPEEDR_OSPEED4_1 |  GPIO_OSPEEDR_OSPEED4_0); \/\/PA4 Very high speed MODIFY_REG(GPIOA->OSPEEDR, GPIO_OSPEEDR_OSPEED6_Msk, GPIO_OSPEEDR_OSPEED6_1 |  GPIO_OSPEEDR_OSPEED6_0); \/\/PA6 Very high speed MODIFY_REG(GPIOA->OSPEEDR, GPIO_OSPEEDR_OSPEED11_Msk, GPIO_OSPEEDR_OSPEED11_1 |  GPIO_OSPEEDR_OSPEED11_0); \/\/PA11 Very high speed MODIFY_REG(GPIOA->OSPEEDR, GPIO_OSPEEDR_OSPEED12_Msk, GPIO_OSPEEDR_OSPEED12_1 |  GPIO_OSPEEDR_OSPEED12_0); \/\/PA12 Very high speed  \/\/ PA3 PA4 PA6 PA11 PA12 No pull-up\/pull-down CLEAR_BIT(GPIOA->PUPDR, GPIO_PUPDR_PUPDR3 | GPIO_PUPDR_PUPDR4 | GPIO_PUPDR_PUPDR6 | GPIO_PUPDR_PUPDR11 | GPIO_PUPDR_PUPDR12);  \/*PF10 DE*\/ \/\/---PORT---F--- SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOFEN); \/\/ PORT F CLOCKS are ENABLED  MODIFY_REG(GPIOF->MODER, GPIO_MODER_MODER10, GPIO_MODER_MODE10_1); \/\/ PF10 Alternative func  CLEAR_BIT(GPIOF->OTYPER, GPIO_OTYPER_OT10); \/\/ PF10 Output push-pull  MODIFY_REG(GPIOF->AFR[1], GPIO_AFRH_AFSEL10, GPIO_AFRH_AFSEL10_3 | GPIO_AFRH_AFSEL10_2 | GPIO_AFRH_AFSEL10_1); \/\/ PF10 AF14 MODIFY_REG(GPIOF->OSPEEDR, GPIO_OSPEEDR_OSPEED10_Msk, GPIO_OSPEEDR_OSPEED10_1 |  GPIO_OSPEEDR_OSPEED10_0); \/\/PF10 Very high speed CLEAR_BIT(GPIOF->PUPDR, GPIO_PUPDR_PUPDR10);  \/\/ PF10 No pull-up\/pull-down  \/*PG7 DOTCLK PG6 R7 PG10 G3 PG11 B3 PG12 B4*\/ \/\/---PORT---G--- SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOGEN); \/\/ PORT G CLOCKS are ENABLED  \/\/ PG6 PG7 PG10 PG11 PG12 Alternative func MODIFY_REG(GPIOG->MODER, GPIO_MODER_MODER6 | GPIO_MODER_MODER7 , GPIO_MODER_MODE6_1 | GPIO_MODER_MODE7_1); MODIFY_REG(GPIOG->MODER, GPIO_MODER_MODER10 | GPIO_MODER_MODER11 | GPIO_MODER_MODER12, GPIO_MODER_MODE10_1 | GPIO_MODER_MODE11_1 | GPIO_MODER_MODE12_1);  CLEAR_BIT(GPIOG->OTYPER, GPIO_OTYPER_OT12 | GPIO_OTYPER_OT11 | GPIO_OTYPER_OT10 | GPIO_OTYPER_OT7 | GPIO_OTYPER_OT6); \/\/ PG6 PG7 PG10 PG11 PG12 Output push-pull  MODIFY_REG(GPIOG->AFR[0], GPIO_AFRL_AFRL6, GPIO_AFRL_AFRL6_3 | GPIO_AFRL_AFRL6_2 | GPIO_AFRL_AFRL6_1); \/\/ PG6 AF14 MODIFY_REG(GPIOG->AFR[0], GPIO_AFRL_AFRL7, GPIO_AFRL_AFRL7_3 | GPIO_AFRL_AFRL7_2 | GPIO_AFRL_AFRL7_1); \/\/ PG7 AF14 MODIFY_REG(GPIOG->AFR[1], GPIO_AFRH_AFSEL10, GPIO_AFRH_AFSEL10_3 |  GPIO_AFRH_AFSEL10_0); \/\/ PG10 AF9 MODIFY_REG(GPIOG->AFR[1], GPIO_AFRH_AFSEL11, GPIO_AFRH_AFSEL11_3 | GPIO_AFRH_AFSEL11_2 | GPIO_AFRH_AFSEL11_1); \/\/ PG11 AF14 MODIFY_REG(GPIOG->AFR[1], GPIO_AFRH_AFSEL12, GPIO_AFRH_AFSEL12_3 |  GPIO_AFRH_AFSEL12_0); \/\/ PG12 AF9  MODIFY_REG(GPIOG->OSPEEDR, GPIO_OSPEEDR_OSPEED6_Msk, GPIO_OSPEEDR_OSPEED6_1 |  GPIO_OSPEEDR_OSPEED6_0); \/\/PG6 Very high speed MODIFY_REG(GPIOG->OSPEEDR, GPIO_OSPEEDR_OSPEED7_Msk, GPIO_OSPEEDR_OSPEED7_1 |  GPIO_OSPEEDR_OSPEED7_0); \/\/PG7 Very high speed MODIFY_REG(GPIOG->OSPEEDR, GPIO_OSPEEDR_OSPEED10_Msk, GPIO_OSPEEDR_OSPEED10_1 |  GPIO_OSPEEDR_OSPEED10_0); \/\/PG10 Very high speed MODIFY_REG(GPIOG->OSPEEDR, GPIO_OSPEEDR_OSPEED11_Msk, GPIO_OSPEEDR_OSPEED11_1 |  GPIO_OSPEEDR_OSPEED11_0); \/\/PG11 Very high speed MODIFY_REG(GPIOG->OSPEEDR, GPIO_OSPEEDR_OSPEED12_Msk, GPIO_OSPEEDR_OSPEED12_1 |  GPIO_OSPEEDR_OSPEED12_0); \/\/PG12 Very high speed  CLEAR_BIT(GPIOG->PUPDR, GPIO_PUPDR_PUPDR6 | GPIO_PUPDR_PUPDR7 | GPIO_PUPDR_PUPDR10 | GPIO_PUPDR_PUPDR11 | GPIO_PUPDR_PUPDR12);  \/\/  No pull-up\/pull-down }  __attribute__((optimize(BL_OPTIMIZATION_LVL))) void BL_MCU_LTDC_CLOCKS_Init(void){ SET_BIT(RCC->APB2ENR, RCC_APB2ENR_LTDCEN); \/\/ LTDC CLOCKS are ENABLED  MODIFY_REG(RCC->PLLSAICFGR, RCC_PLLSAICFGR_PLLSAIR, RCC_PLLSAICFGR_PLLSAIR_0 | RCC_PLLSAICFGR_PLLSAIR_1); \/\/ PLLSAIR is 3 MODIFY_REG(RCC->PLLSAICFGR, RCC_PLLSAICFGR_PLLSAIN, 54 &lt;&lt; RCC_PLLSAICFGR_PLLSAIN_Pos); \/\/ PLLSAI MULL N is 54 (input division) MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_PLLSAIDIVR, RCC_DCKCFGR_PLLSAIDIVR_0); \/\/PLLSAIDIVR is 4 (01b = 4d) \/\/VCOxN = HSIclk \/ PLLM * PLLN = 16 \/ 16 * 54 = 54 MHz \/\/PLLLCD = VCOxN \/ PLLR = 108 \/ 3 = 36 MHz \/\/LCDCLK = PLLLCD \/ PLLSAIDIVR = 36 \/ 4 = 9 MHz  SET_BIT(RCC->CR, RCC_CR_PLLSAION); \/\/ while(!(READ_BIT(RCC->CR, RCC_CR_PLLSAIRDY))){ __NOP(); }; }  __attribute__((optimize(BL_OPTIMIZATION_LVL))) void BL_MCU_LTDC_MODULE_Init(void){  \/*The First step: configure HSYNC, VSYNC, V&amp;H back porch active data area &amp; front porch timings following the panel datasheet*\/  LTDC->SSCR = ((H_SYNC_WIDTH - 1) &lt;&lt; LTDC_SSCR_HSW_Pos) | (V_SYNC_WIDTH - 1);  LTDC->BPCR = ((H_SYNC_WIDTH + H_BACK_PORCH - 1) &lt;&lt; LTDC_BPCR_AHBP_Pos) | (V_SYNC_WIDTH + V_BACK_PORCH - 1); LTDC->AWCR = ((H_SYNC_WIDTH + H_BACK_PORCH + DISP_ACTIVE_WIDTH - 1) &lt;&lt; LTDC_AWCR_AAW_Pos) | (V_SYNC_WIDTH + V_BACK_PORCH + DISP_ACTIVE_HEIGHT - 1); LTDC->TWCR = ((H_SYNC_WIDTH + H_BACK_PORCH + DISP_ACTIVE_WIDTH + H_FRONT_PORCH - 1) &lt;&lt; LTDC_TWCR_TOTALW_Pos) | (V_SYNC_WIDTH + V_BACK_PORCH + DISP_ACTIVE_HEIGHT + V_FRONT_PORCH - 1);  LTDC->GCR = LTDC_GCR_DEPOL | LTDC_GCR_PCPOL;  \/*The Second step:  Layer Configuration*\/ LTDC_Layer1->WHPCR = ((H_SYNC_WIDTH + H_BACK_PORCH + PAINTING_ZONE_H_OFFSET) ) | ((H_SYNC_WIDTH + H_BACK_PORCH + PAINTING_ZONE_H_OFFSET + PAINTING_ZONE_H_SIZE - 1) &lt;&lt; LTDC_LxWHPCR_WHSPPOS_Pos); LTDC_Layer1->WVPCR = ((V_SYNC_WIDTH + V_BACK_PORCH + PAINTING_ZONE_V_OFFSET) ) | ((V_SYNC_WIDTH + V_BACK_PORCH + PAINTING_ZONE_V_OFFSET + PAINTING_ZONE_V_SIZE - 1) &lt;&lt; LTDC_LxWVPCR_WVSPPOS_Pos); LTDC_Layer1->PFCR = DISPLAY_PIXEL_FORMAT; LTDC_Layer1->CFBAR = (uint32_t)&amp;frameBuffer;  \/\/LTDC_Layer1->BFCR = (0x4 &lt;&lt; LTDC_LxBFCR_BF1_Pos) | 0x5;  LTDC_Layer1->CFBLR = ((PAINTING_ZONE_H_SIZE * 2) &lt;&lt; LTDC_LxCFBLR_CFBP_Pos) | (PAINTING_ZONE_H_SIZE * 2 + 3); LTDC_Layer1->CFBLNR = PAINTING_ZONE_V_SIZE;  \/*The Third step:  Clocks and module enabling*\/ BL_MCU_LTDC_LAYER_Enable();  LTDC->SRCR = LTDC_SRCR_IMR;  BL_MCU_LTDC_Enable();  BL_MCU_LTDC_BACKLIGNHT_Enable(); }  #endif<\/code><\/pre>\n<\/p>\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\/742368\/\"> https:\/\/habr.com\/ru\/articles\/742368\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><\/figure>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0441\u043f\u0435\u043a\u0442 (\u0433\u0430\u0439\u0434) \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u043b\u0438\u0446, \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 LTDC \u043c\u043e\u0434\u0443\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 STM \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 STM32F429ZIT6 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c\u0443 \u043f\u043e 16-\u0431\u0438\u0442\u043d\u043e\u043c\u0443 RGB565 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u043a \u0434\u0438\u0441\u043f\u043b\u0435\u044e TM043NBH02 \u0441 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c 480&#215;272 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u044f \u0431\u0435\u0437 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u0432\u0438\u0434\u0435\u043e\u0431\u0443\u0444\u0435\u0440\u0430.<\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f:<br \/>MCU Reference manual: RM0090;<br \/>MCU Datasheet: DocID024030 Rev 10;<br \/>Display Datasheet: DS TM043NBH02-40 Ver 1.0.<\/p>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f LTDC \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0438\u0441\u043f\u043b\u0435\u044f\u043c\u0438 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0442\u0440\u0438 \u044d\u0442\u0430\u043f\u0430:<\/p>\n<p><strong>1. \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/strong><\/p>\n<p>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 LCD-TFT \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 3 \u0434\u043e\u043c\u0435\u043d\u0430 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f:<br \/>&#8212; AHB clock domain (HCLK), \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Layer FIFO \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0431\u0443\u0444\u0435\u0440\u0430 \u043a\u0430\u0434\u0440\u0430.<br \/>&#8212; APB2 clock domain (PCLK2), \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439.<br \/>&#8212; Pixel Clock domain (LCD_CLK), \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 LCD-TFT, \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0441\u043b\u043e\u044f. \u0412\u044b\u0445\u043e\u0434 LCD_CLK \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u0438. LCD_CLK \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 PLLSAI.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0448\u0438\u043d AHB\\APB \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044b\u0434\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e, \u0438\u0437-\u0437\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0445 \u0432\u0441\u0435\u0439 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0435\u0439, \u0442\u043e \u043e\u043f\u0438\u0448\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Pixel Clock.<br \/>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0431\u043b\u043e\u043a \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f PLLSAI:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0422\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0448\u0438\u043d\u044b LCD_CLK \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0431\u043b\u043e\u043a PLLSAI, \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043e\u0442 \u0442\u0430\u043a\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u0440\u0435\u0437\u043e\u043d\u0430\u0442\u043e\u0440\u0430 (\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430) \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0442 HSI, \u0447\u0435\u0440\u0435\u0437 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c M, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0430 \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u044c N \u0438 \u0434\u043e\u0432\u0435\u0434\u0435\u043d\u0430 \u0434\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f\u043c\u0438 R \u0438 PLL_LCD_CLK_DIV.<\/p>\n<p>\u0414\u043b\u044f \u0434\u0438\u0441\u043f\u043b\u0435\u044f TM043NBH02 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Pixel Clock \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043e\u0442 8 \u0434\u043e 12 \u041c\u0413\u0446: <\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0412\u0432\u043e\u0434\u043d\u044b\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435: \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u043e\u043d\u0430\u0442\u043e\u0440\u0430 HSI = 16 \u041c\u0413\u0446, \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c M = 16, \u043d\u0430 \u0432\u0445\u043e\u0434 VCO \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0432 1 \u041c\u0413\u0446, \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u0447\u0430\u0441\u0442\u043e\u0442\u0443 DCLK(Pixel Clock) = 9 \u041c\u0413\u0446.<\/p>\n<p>\u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u043a\u043e\u043d\u0446\u0430, \u043f\u043e\u0434\u0431\u0435\u0440\u0451\u043c \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c PLL_LCD_CLK_DIV. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043b\u0435\u0437\u0435\u043c \u0432 RM \u0438 \u0438\u0449\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e RCC_DCKCFG, \u0432 \u043d\u0451\u043c \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u0431\u0438\u0442\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435 PLLSAIDIVR:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c 2, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u043e\u0439 \u0431\u0438\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f, \u0435\u0433\u043e \u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c:<\/p>\n<pre><code class=\"cpp\">RCC->DCKCFGR &amp;= ~RCC_DCLCFGR_PLLSAIDIVR;<\/code><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0432 18 \u041c\u0413\u0446 \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f DIV. \u0414\u0430\u043b\u0435\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u0430\u0442\u044c \u043d\u0430 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c R. \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 RCC_PLLSAICFGR:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0418\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c R \u043c\u0435\u043d\u0435\u0435 2, \u00abwrong configuration\u00bb, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043b\u044e\u0431\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u00ab0\u00bb \u0438 \u00ab1\u00bb. \u041e\u0434\u043d\u0430\u043a\u043e, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0438\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u044f N, \u043e\u043d \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c 50. \u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f R, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0435\u0435 \u043d\u0430\u0448\u0438\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c 3:   <\/p>\n<pre><code class=\"cpp\">RCC->PLLSAICFGR |= 0x3 &lt;&lt; RCC_PLLSAICFGR_PLLSAIR_Pos;<\/code><\/pre>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f R \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c 18 \u041c\u0413\u0426 * 3 = 54 \u041c\u0413\u0446, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u044c N \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0432\u043d\u043e\u0435 54 \u0432 \u0442\u043e\u043c \u0436\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435:<\/p>\n<pre><code class=\"cpp\">RCC->PLLSAICFGR |= 0x54 &lt;&lt; RCC_PLLSAICFGR_PLLSAIN_Pos;<\/code><\/pre>\n<p>\u041e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0434\u0435\u043b\u043e \u0437\u0430 \u043c\u0430\u043b\u044b\u043c, \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 LCD_CLK \u0438 \u0440\u0430\u0431\u043e\u0442\u0443 \u0431\u043b\u043e\u043a\u0430 PLLSAI, \u0447\u0442\u043e \u043c\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043d\u0451\u043c, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b RCC->APB2ENR, \u0433\u0434\u0435 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0431\u0438\u0442 LTDCEN \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 RCC->CR, \u0432 \u043d\u0451\u043c \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0431\u0438\u0442 PLLSAION:<\/p>\n<figure class=\"full-width\"><\/figure>\n<figure class=\"full-width\"><\/figure>\n<pre><code class=\"cpp\">RCC->APB2ENR |= RCC_APB2ENR_LTDCEN; RCC->CR |= RCC_CR_PLLSAION;<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0438\u0442\u0430 RCC_CR_PLLSAION, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0431\u0438\u0442\u0430 RCC_CR_PLLSAIRDY \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u043e \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438:<\/p>\n<pre><code class=\"cpp\">while(!(RCC->CR &amp; RCC_CR_PLLSAIRDY)){  __NOP(); };<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u044d\u0442\u0430\u043f\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">__attribute__((optimize(BL_OPTIMIZATION_LVL))) void BL_MCU_LTDC_CLOCKS_Init(void){          RCC->DCKCFGR &amp;= ~RCC_DCLCFGR_PLLSAIDIVR;     RCC->PLLSAICFGR |= 0x3 &lt;&lt; RCC_PLLSAICFGR_PLLSAIR_Pos;     RCC->PLLSAICFGR |= 0x54 &lt;&lt; RCC_PLLSAICFGR_PLLSAIN_Pos;     \/\/VCOxN = HSIclk \/ PLLM * PLLN = 16 \/ 16 * 54 = 54 MHz \/\/PLLLCD = VCOxN \/ PLLR = 54 \/ 3 = 18 MHz \/\/LCDCLK = PLLLCD \/ PLLSAIDIVR = 18 \/ 2 = 9 MHz  RCC->APB2ENR |= RCC_APB2ENR_LTDCEN;     RCC->CR |= RCC_CR_PLLSAION;     while(!(RCC->CR &amp; RCC_CR_PLLSAIRDY)){      __NOP();     }; }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p><strong>2. \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043f\u043e\u0440\u0442\u043e\u0432 \u0432\u0432\u043e\u0434\u0430 \u0432\u044b\u0432\u043e\u0434\u0430.<\/strong><\/p>\n<p>\u0412 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 LTDC \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043b\u0438\u043d\u0438\u0438:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0412\u044b\u0432\u043e\u0434\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 LTDC \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c. \u041d\u0435\u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u0432\u043e\u0434\u044b \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043b\u044e\u0431\u044b\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u0446\u0435\u043b\u0435\u0439.<\/p>\n<p>\u0414\u043b\u044f \u0432\u044b\u0445\u043e\u0434\u043e\u0432 LTDC \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0434\u043e 24 \u0431\u0438\u0442 (RGB888), \u0435\u0441\u043b\u0438 \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u0435\u043d\u044c\u0448\u0435 \u0447\u0435\u043c 8 \u0431\u0438\u0442 \u043d\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u044c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 RGB565 \u0438\u043b\u0438 RGB666 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0441 16-\u0431\u0438\u0442\u043d\u044b\u043c\u0438 \u0438\u043b\u0438 18-\u0431\u0438\u0442\u043d\u044b\u043c\u0438 \u0434\u0438\u0441\u043f\u043b\u0435\u044f\u043c\u0438), \u0442\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0434\u0430\u043d\u043d\u044b\u0445 RGB \u0434\u0438\u0441\u043f\u043b\u0435\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043a MSB \u0440\u0430\u0437\u0440\u044f\u0434\u0430\u043c \u0434\u0430\u043d\u043d\u044b\u0445 RGB \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 LCD\u0421. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 LTD\u0421 \u043a \u0434\u0438\u0441\u043f\u043b\u0435\u044e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e 16-\u0431\u0438\u0442\u043d\u043e\u043c\u0443 RGB565 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443, \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0434\u0430\u043d\u043d\u044b\u0445 LCD R[4:0], G[5:0] \u0438 B[4:0] \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u043a \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443 LTDC \u0447\u0435\u0440\u0435\u0437 LCD_R[7:3], LCD_G[7:2] \u0438 LCD_B[7:3].<\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0437\u043d\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435 \u0432\u044b\u0432\u043e\u0434\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043c\u043e\u0434\u0443\u043b\u0435\u043c LTDC, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438\u0437 Datasheet:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0412 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 STM32F429, \u043a \u043c\u043e\u0434\u0443\u043b\u044e LTDC \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 AF9 \u0438 AF14. \u0411\u0443\u0434\u0435\u043c \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0432\u044b\u0432\u043e\u0434\u044b:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"center\">\u0412\u044b\u0432\u043e\u0434<\/p>\n<\/td>\n<td>\n<p align=\"center\">\u0424\u0443\u043d\u043a\u0446\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"center\">\u0412\u044b\u0431\u043e\u0440 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PA3<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_B5<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PA4<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_VSYNC<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PA6<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_G2<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PA11<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_R4<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PA12<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_R5<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PB0<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_R3<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF9<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PB1<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_R6<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF9<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PB8<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_B6<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PB9<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_B7<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PB10<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_G4<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PB11<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_G5<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PC6<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_HSYNC<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PC7<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_G6<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PD3<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_G7<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PF10<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_DE<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PG6<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_R7<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PG7<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_DTCLK<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PG10<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_G3<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF9<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PG11<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_B3<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">PG12<\/p>\n<\/td>\n<td>\n<p align=\"center\">LCD_B4<\/p>\n<\/td>\n<td>\n<p align=\"center\">AF9<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043e\u0434\u043d\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430 PF10, \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438.   <\/p>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438:<br \/>&#8212; \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u0430 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 RCC_AHB1ENR;<\/p>\n<pre><code class=\"cpp\">RCC->AHB1ENR |= RCC_AHB1ENR_GPIOFEN;<\/code><\/pre>\n<p>&#8212; \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u044b\u0432\u043e\u0434\u0430 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 GPIOx_MODER (Alternative function);<\/p>\n<pre><code class=\"cpp\">GPIOF->MODER |= GPIO_MODER_MODE10_1;<\/code><\/pre>\n<p>&#8212; \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0442\u0438\u043f \u0432\u044b\u0445\u043e\u0434\u0430 \u0432 GPIOx_OTYPER (Output push-pull);<\/p>\n<pre><code class=\"cpp\">GPIOF->OTYPER &amp;=  GPIO_OTYPER_OT10;<\/code><\/pre>\n<p>&#8212; \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u043e\u0434\u0442\u044f\u0436\u043a\u0443 \u0432\u044b\u0432\u043e\u0434\u0430 GPIO_PUPDR (No pull-up\/pull-down);<\/p>\n<pre><code class=\"cpp\">GPIOF->PUPDR &amp;= GPIO_PUPDR_PUPDR10;<\/code><\/pre>\n<p>&#8212; \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0442\u0438\u043f \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 GPIOx_AFRH (AF14);<\/p>\n<pre><code class=\"cpp\">GPIOF->AFR[1] |= GPIO_AFRH_AFSEL10_3 | GPIO_AFRH_AFSEL10_2 | GPIO_AFRH_AFSEL10_1;<\/code><\/pre>\n<p>&#8212; \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u044b\u0432\u043e\u0434\u0430 \u0432 GPIOx_OSPEEDR (Very high speed).<\/p>\n<pre><code class=\"cpp\">GPIOF->OSPEEDR |= GPIO_OSPEEDR_OSPEED10_1 |  GPIO_OSPEEDR_OSPEED10_0;<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u044d\u0442\u0430\u043f\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u0440\u0442\u043e\u0432 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">__attribute__((optimize(BL_OPTIMIZATION_LVL))) void BL_MCU_LTDC_GPIO_Init(void){   \/\/Backlight SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN); \/\/ PORT D CLOCKS are ENABLED MODIFY_REG(GPIOD->MODER, GPIO_MODER_MODER12, GPIO_MODER_MODE12_0); \/\/ PD12 output  \/*PB0 R3 PB1 R6 PB10 G4 PB11 G5 PB8 B6 PB9 B7*\/ \/\/---PORT---B--- SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOBEN); \/\/ PORT B CLOCKS are ENABLED  MODIFY_REG(GPIOB->MODER, GPIO_MODER_MODER0, GPIO_MODER_MODE0_1); \/\/ PB0 Alternative func MODIFY_REG(GPIOB->MODER, GPIO_MODER_MODER1, GPIO_MODER_MODE1_1); \/\/ PB1 Alternative func MODIFY_REG(GPIOB->MODER, GPIO_MODER_MODER8, GPIO_MODER_MODE8_1); \/\/ PB8 Alternative func MODIFY_REG(GPIOB->MODER, GPIO_MODER_MODER9, GPIO_MODER_MODE9_1); \/\/ PB9 Alternative func MODIFY_REG(GPIOB->MODER, GPIO_MODER_MODER10, GPIO_MODER_MODE10_1); \/\/ PB10 Alternative func MODIFY_REG(GPIOB->MODER, GPIO_MODER_MODER11, GPIO_MODER_MODE11_1); \/\/ PB11 Alternative func  CLEAR_BIT(GPIOB->OTYPER, GPIO_OTYPER_OT0 | GPIO_OTYPER_OT1 | GPIO_OTYPER_OT8 | GPIO_OTYPER_OT9 | GPIO_OTYPER_OT10 | GPIO_OTYPER_OT11); \/\/ PB0 PB1 PB8 PB9 PB10 PB11 Output push-pull  MODIFY_REG(GPIOB->AFR[0], GPIO_AFRL_AFRL0, GPIO_AFRL_AFRL0_3 | GPIO_AFRL_AFRL0_0); \/\/ PB0 AF9 MODIFY_REG(GPIOB->AFR[0], GPIO_AFRL_AFRL1, GPIO_AFRL_AFRL1_3 | GPIO_AFRL_AFRL1_0); \/\/ PB1 AF9 MODIFY_REG(GPIOB->AFR[1], GPIO_AFRH_AFSEL8, GPIO_AFRH_AFSEL8_3 | GPIO_AFRH_AFSEL8_2 | GPIO_AFRH_AFSEL8_1); \/\/ PB8 AF14 MODIFY_REG(GPIOB->AFR[1], GPIO_AFRH_AFSEL9, GPIO_AFRH_AFSEL9_3 | GPIO_AFRH_AFSEL9_2 | GPIO_AFRH_AFSEL9_1); \/\/ PB9 AF14 MODIFY_REG(GPIOB->AFR[1], GPIO_AFRH_AFSEL10, GPIO_AFRH_AFSEL10_3 | GPIO_AFRH_AFSEL10_2 | GPIO_AFRH_AFSEL10_1); \/\/ PB10 AF14 MODIFY_REG(GPIOB->AFR[1], GPIO_AFRH_AFSEL11, GPIO_AFRH_AFSEL11_3 | GPIO_AFRH_AFSEL11_2 | GPIO_AFRH_AFSEL11_1); \/\/ PB11 AF14  MODIFY_REG(GPIOB->OSPEEDR, GPIO_OSPEEDR_OSPEED0_Msk, GPIO_OSPEEDR_OSPEED0_1 |  GPIO_OSPEEDR_OSPEED0_0); \/\/PB0 Very high speed MODIFY_REG(GPIOB->OSPEEDR, GPIO_OSPEEDR_OSPEED1_Msk, GPIO_OSPEEDR_OSPEED1_1 | GPIO_OSPEEDR_OSPEED1_0); \/\/PB1 Very high speed MODIFY_REG(GPIOB->OSPEEDR, GPIO_OSPEEDR_OSPEED8_Msk, GPIO_OSPEEDR_OSPEED8_1 | GPIO_OSPEEDR_OSPEED8_0); \/\/PB8 Very high speed MODIFY_REG(GPIOB->OSPEEDR, GPIO_OSPEEDR_OSPEED9_Msk, GPIO_OSPEEDR_OSPEED9_1 | GPIO_OSPEEDR_OSPEED9_0); \/\/PB9 Very high speed MODIFY_REG(GPIOB->OSPEEDR, GPIO_OSPEEDR_OSPEED10_Msk, GPIO_OSPEEDR_OSPEED10_1 | GPIO_OSPEEDR_OSPEED10_0); \/\/PB10 Very high speed MODIFY_REG(GPIOB->OSPEEDR, GPIO_OSPEEDR_OSPEED11_Msk, GPIO_OSPEEDR_OSPEED11_1 | GPIO_OSPEEDR_OSPEED11_0); \/\/PB11 Very high speed  CLEAR_BIT(GPIOB->PUPDR, GPIO_PUPDR_PUPDR0 | GPIO_PUPDR_PUPDR1 | GPIO_PUPDR_PUPDR8 | GPIO_PUPDR_PUPDR9 | GPIO_PUPDR_PUPDR10 | GPIO_PUPDR_PUPDR11); \/\/ PB0 PB1 PB8 PB9 PB10 PB11 No pull-up\/pull-down  \/*PC6 HSYNC PC7 G6*\/ \/\/---PORT---C--- SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN); \/\/ PORT B CLOCKS are ENABLED  MODIFY_REG(GPIOC->MODER, GPIO_MODER_MODER6, GPIO_MODER_MODE6_1); \/\/ PC6 Alternative func MODIFY_REG(GPIOC->MODER, GPIO_MODER_MODER7, GPIO_MODER_MODE7_1); \/\/ PC7 Alternative func  CLEAR_BIT(GPIOC->OTYPER, GPIO_OTYPER_OT6 | GPIO_OTYPER_OT7); \/\/ PC6 PC7 Output push-pull  MODIFY_REG(GPIOC->AFR[0], GPIO_AFRL_AFRL6, GPIO_AFRL_AFRL6_3 | GPIO_AFRL_AFRL6_2 | GPIO_AFRL_AFRL6_1); \/\/ PC6 AF14 MODIFY_REG(GPIOC->AFR[0], GPIO_AFRL_AFRL7, GPIO_AFRL_AFRL7_3 | GPIO_AFRL_AFRL7_2 | GPIO_AFRL_AFRL7_1); \/\/ PC7 AF14  MODIFY_REG(GPIOC->OSPEEDR, GPIO_OSPEEDR_OSPEED6_Msk, GPIO_OSPEEDR_OSPEED6_1 |  GPIO_OSPEEDR_OSPEED6_0); \/\/PC6 Very high speed MODIFY_REG(GPIOC->OSPEEDR, GPIO_OSPEEDR_OSPEED7_Msk, GPIO_OSPEEDR_OSPEED7_1 | GPIO_OSPEEDR_OSPEED7_0); \/\/PC7 Very high speed  CLEAR_BIT(GPIOC->PUPDR, GPIO_PUPDR_PUPDR6 | GPIO_PUPDR_PUPDR7); \/\/ PC6 PC7 No pull-up\/pull-down   \/*PD3 G7*\/ \/\/---PORT---D--- SET_BIT(RCC->AHB1ENR,<\/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-348967","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/348967","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=348967"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/348967\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=348967"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=348967"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=348967"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}