{"id":132828,"date":"2026-03-16T14:00:51","date_gmt":"2026-03-16T13:00:51","guid":{"rendered":"https:\/\/riverdi.com\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32"},"modified":"2026-09-08T15:37:40","modified_gmt":"2026-09-08T13:37:40","slug":"przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32","status":"publish","type":"post","link":"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32","title":{"rendered":"Przewodnik po podstawowych operacjach zwi\u0105zanych z wy\u015bwietlaczem na STM32"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_87_1 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Prze\u0142\u0105cznik Spisu Tre\u015bci\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #002175;color:#002175\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #002175;color:#002175\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32\/#Sterowanie_podswietleniem_w_wyswietlaczach_Riverdi_STM32\" >Sterowanie pod\u015bwietleniem w wy\u015bwietlaczach Riverdi STM32<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32\/#Obslugiwane_moduly_Riverdi_STM32\" >Obs\u0142ugiwane modu\u0142y Riverdi STM32<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32\/#Zasada_dzialania_regulacji_podswietlenia\" >Zasada dzia\u0142ania regulacji pod\u015bwietlenia<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32\/#Wymagania_sprzetowe_i_programowe\" >Wymagania sprz\u0119towe i programowe<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32\/#Przyklad_konfiguracji_PWM\" >Przyk\u0142ad konfiguracji PWM<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32\/#Zakres_jasnosci_i_jego_znaczenie\" >Zakres jasno\u015bci i jego znaczenie<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32\/#Regulacja_jasnosci_w_czasie_pracy\" >Regulacja jasno\u015bci w czasie pracy<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32\/#Obrot_ekranu_na_wyswietlaczach_STM32\" >Obr\u00f3t ekranu na wy\u015bwietlaczach STM32<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32\/#Obrot_ekranu_za_pomoca_LVGL\" >Obr\u00f3t ekranu za pomoc\u0105 LVGL<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32\/#Inicjalizacja_LVGL_czesciowe_renderowanie_obrot\" >Inicjalizacja LVGL (cz\u0119\u015bciowe renderowanie + obr\u00f3t)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32\/#Wywolanie_flush_callback_zapis_danych_z_oprogramowania_do_bufora_ramki_LTDC\" >Wywo\u0142anie flush callback (zapis danych z oprogramowania do bufora ramki LTDC)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32\/#Wynik\" >Wynik<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32\/#Obrot_ekranu_na_STM32_przy_uzyciu_TouchGFX\" >Obr\u00f3t ekranu na STM32 przy u\u017cyciu TouchGFX<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32\/#Koncepcja_obracania_w_TouchGFX\" >Koncepcja obracania w TouchGFX<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32\/#Wlaczanie_obrotu_ekranu_w_programie_TouchGFX_Designer\" >W\u0142\u0105czanie obr\u00f3tu ekranu w programie TouchGFX Designer<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32\/#Podsumowanie\" >Podsumowanie<\/a><\/li><\/ul><\/nav><\/div>\n<p>Sterowanie pod\u015bwietleniem i obr\u00f3t ekranu to podstawowe operacje zwi\u0105zane z wy\u015bwietlaczem, kt\u00f3re maj\u0105 bezpo\u015bredni wp\u0142yw na dzia\u0142anie systemu w projektach opartych na mikrokontrolerach STM32. S\u0105 one niezale\u017cne od logiki aplikacji, ale \u015bci\u015ble powi\u0105zane z konfiguracj\u0105 sprz\u0119tow\u0105 i mo\u017cliwo\u015bciami \u015brodowiska graficznego. <\/p>\n<p>W tym artykule wyja\u015bniamy, w jaki spos\u00f3b modu\u0142y wy\u015bwietlaczy Riverdi STM32 realizuj\u0105 sterowanie pod\u015bwietleniem oparte na PWM przy u\u017cyciu TIM15 i dedykowanego sterownika diod LED, a tak\u017ce jak r\u00f3\u017cni si\u0119 obr\u00f3t ekranu w projektach LVGL i TouchGFX. Skupiamy si\u0119 na praktycznych szczeg\u00f3\u0142ach implementacji i rozdzieleniu architektury modu\u0142u. <\/p>\n<h2><span class=\"ez-toc-section\" id=\"Sterowanie_podswietleniem_w_wyswietlaczach_Riverdi_STM32\"><\/span>Sterowanie pod\u015bwietleniem w wy\u015bwietlaczach Riverdi STM32<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Sterowanie pod\u015bwietleniem to jedna z podstawowych czynno\u015bci podczas pracy z wy\u015bwietlaczami wbudowanymi. W przeciwie\u0144stwie do renderowania grafiki czy obs\u0142ugi dotykowej, <strong>sterowanie pod\u015bwietleniem jest niezale\u017cne od frameworka GUI<\/strong> i nie zale\u017cy od tego, czy aplikacja korzysta z LVGL, TouchGFX czy innego stosu graficznego. <\/p>\n<p>W modu\u0142ach wy\u015bwietlaczy Riverdi opartych na uk\u0142adach STM32 jasno\u015b\u0107 pod\u015bwietlenia jest regulowana za pomoc\u0105 <strong>sprz\u0119towego sygna\u0142u PWM,<\/strong> generowanego przez timer STM32.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Obslugiwane_moduly_Riverdi_STM32\"><\/span>Obs\u0142ugiwane modu\u0142y Riverdi STM32<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Metoda opisana w tym artykule dotyczy modu\u0142\u00f3w wy\u015bwietlaczy Riverdi STM32, takich jak:<\/p>\n<ul>\n<li>RVT121<\/li>\n<li>RVT101<\/li>\n<li>RVT70<\/li>\n<li>RVT50<\/li>\n<\/ul>\n<p>T\u0119 sam\u0105 zasad\u0119 mo\u017cna zastosowa\u0107 na innych platformach Riverdi STM32, kt\u00f3re maj\u0105 wej\u015bcie do pod\u015bwietlenia sterowane sygna\u0142em PWM.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Zasada_dzialania_regulacji_podswietlenia\"><\/span>Zasada dzia\u0142ania regulacji pod\u015bwietlenia<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>W modu\u0142ach wy\u015bwietlaczy Riverdi opartych na uk\u0142adach STM32 mikrokontroler nie steruje bezpo\u015brednio pod\u015bwietleniem LED. Zamiast tego STM32 generuje <strong>sygna\u0142 steruj\u0105cy PWM<\/strong>, kt\u00f3ry jest przekazywany do specjalnego <strong>sterownika pod\u015bwietlenia LED.<\/strong> <\/p>\n<p>Sterownik pod\u015bwietlenia to \u017ar\u00f3d\u0142o pr\u0105du sta\u0142ego, zaprojektowane do regulacji pr\u0105du p\u0142yn\u0105cego przez \u0142a\u0144cuchy diod LED. Sygna\u0142 PWM nie moduluje bezpo\u015brednio napi\u0119cia diod LED. Zamiast tego steruje on efektywnym cyklem pracy sterownika, co pozwala na zmian\u0119 \u015bredniego pr\u0105du diod LED w zakresie od 0% do 100% jego warto\u015bci nominalnej.  <\/p>\n<p>Architektur\u0119 mo\u017cna podsumowa\u0107 w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<ul>\n<li>Timer STM32 (np. TIM15) generuje sygna\u0142 PWM.<\/li>\n<li>Sygna\u0142 PWM jest podawany na wej\u015bcie sterownika pod\u015bwietlenia.<\/li>\n<li>Sterownik pod\u015bwietlenia reguluje pr\u0105d diod LED.<\/li>\n<li>Cykl pracy sygna\u0142u PWM decyduje o rzeczywistej jasno\u015bci.<\/li>\n<\/ul>\n<p>To znaczy:<\/p>\n<ul>\n<li>Cz\u0119stotliwo\u015b\u0107 PWM zale\u017cy od ustawie\u0144 timera<\/li>\n<li>Jasno\u015b\u0107 jest proporcjonalna do cyklu pracy PWM.<\/li>\n<li>Pr\u0105d diody LED jest zawsze regulowany przez sterownik, a nie przez wej\u015bcie GPIO MCU.<\/li>\n<\/ul>\n<p>Wy\u017cszy cykl pracy \u2192 wy\u017cszy \u015bredni pr\u0105d diody LED \u2192 wy\u017csza jasno\u015b\u0107 wy\u015bwietlacza<\/p>\n<p>Ni\u017cszy cykl pracy \u2192 ni\u017cszy \u015bredni pr\u0105d diody LED \u2192 s\u0142absze pod\u015bwietlenie wy\u015bwietlacza<\/p>\n<p>Poniewa\u017c diody LED s\u0105 zasilane przez stabilizowane \u017ar\u00f3d\u0142o pr\u0105du:<\/p>\n<ul>\n<li>regulacja jasno\u015bci jest liniowa i stabilna,<\/li>\n<li>\u017bywotno\u015b\u0107 diod LED jest zabezpieczona,<\/li>\n<li>zachowanie termiczne jest przewidywalne,<\/li>\n<li>Wydajno\u015b\u0107 pozostaje wysoka w ca\u0142ym zakresie pracy.<\/li>\n<\/ul>\n<p>Takie podej\u015bcie zapewnia:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>p\u0142ynna regulacja jasno\u015bci,<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>o niskim poborze mocy,<\/li>\n<li>prawid\u0142owa regulacja nat\u0119\u017cenia pr\u0105du w pod\u015bwietleniu LED,<\/li>\n<li>ca\u0142kowita niezale\u017cno\u015b\u0107 sprz\u0119towa od frameworka GUI.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Wymagania_sprzetowe_i_programowe\"><\/span>Wymagania sprz\u0119towe i programowe<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><img decoding=\"async\" class=\"alignnone wp-image-128927 size-full\" src=\"https:\/\/riverdi.com\/wp-content\/uploads\/2026\/03\/BLOG_grafika_POMIEDZY-TEKSTY_1-1.png\" alt=\"\" width=\"826\" height=\"480\" srcset=\"https:\/\/riverdi.com\/wp-content\/uploads\/2026\/03\/BLOG_grafika_POMIEDZY-TEKSTY_1-1.png 826w, https:\/\/riverdi.com\/wp-content\/uploads\/2026\/03\/BLOG_grafika_POMIEDZY-TEKSTY_1-1-300x174.png 300w, https:\/\/riverdi.com\/wp-content\/uploads\/2026\/03\/BLOG_grafika_POMIEDZY-TEKSTY_1-1-768x446.png 768w, https:\/\/riverdi.com\/wp-content\/uploads\/2026\/03\/BLOG_grafika_POMIEDZY-TEKSTY_1-1-600x349.png 600w, https:\/\/riverdi.com\/wp-content\/uploads\/2026\/03\/BLOG_grafika_POMIEDZY-TEKSTY_1-1-64x37.png 64w\" sizes=\"(max-width: 826px) 100vw, 826px\" \/><\/p>\n<p>Zanim dostosujesz poziom pod\u015bwietlenia, upewnij si\u0119, \u017ce:<\/p>\n<ul>\n<li>wy\u015bwietlacz jest prawid\u0142owo pod\u0142\u0105czony do modu\u0142u STM32,<\/li>\n<li>p\u0142ytka jest pod\u0142\u0105czona do komputera za pomoc\u0105 ST-Link,<\/li>\n<li>Projekt zosta\u0142 stworzony przy u\u017cyciu obs\u0142ugiwanej szablonu oprogramowania (LVGL lub TouchGFX).<\/li>\n<\/ul>\n<p>Sterowanie pod\u015bwietleniem nie wymaga \u017cadnych zmian w konfiguracji \u015brodowiska GUI.<\/p>\n<p><strong>Timer s\u0142u\u017c\u0105cy do sterowania pod\u015bwietleniem<\/strong><\/p>\n<p>W modu\u0142ach wy\u015bwietlaczy Riverdi STM32 pod\u015bwietlenie steruje si\u0119 za pomoc\u0105:<\/p>\n<ul>\n<li><strong>TIM15<\/strong> (zar\u00f3wno w infrastrukturze U5, jak i H7)<\/li>\n<li>Sprz\u0119towe wyj\u015bcie PWM<\/li>\n<li>Kana\u0142 1<\/li>\n<\/ul>\n<p>Konfiguracj\u0119 PWM znajdziesz w pliku projektu tim.c, w funkcji <strong>MX_TIM15_Init().<\/strong><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Przyklad_konfiguracji_PWM\"><\/span>Przyk\u0142ad konfiguracji PWM<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Kana\u0142 PWM konfiguruje si\u0119 za pomoc\u0105 standardowych struktur HAL dla STM32:<\/p>\n<pre style=\"white-space: break-spaces; padding: 15px; border: solid 1px; word-wrap: break-word; background-color: #f2f6ff;\">sConfigOC.OCMode = TIM_OCMODE_PWM1;\n\nsConfigOC.Pulse = 998;\n\nsConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;\nsConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;\nsConfigOC.OCFastMode = TIM_OCFAST_DISABLE;\nsConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;\nsConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;\n\nif (HAL_TIM_PWM_ConfigChannel(&htim15, &sConfigOC, TIM_CHANNEL_1) !=\nHAL_OK)\n{\nError_Handler();\n}<\/pre>\n<p>Najwa\u017cniejszym parametrem jest tutaj sConfigOC.Pulse.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Zakres_jasnosci_i_jego_znaczenie\"><\/span>Zakres jasno\u015bci i jego znaczenie<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Jasno\u015b\u0107 pod\u015bwietlenia jest regulowana za pomoc\u0105 cyklu pracy PWM:<\/p>\n<ul>\n<li><strong>0<\/strong> \u2192 pod\u015bwietlenie wy\u0142\u0105czone<\/li>\n<li> <strong> 998<\/strong> \u2192 maksymalna jasno\u015b\u0107<\/li>\n<\/ul>\n<p>Ka\u017cda warto\u015b\u0107 z przedzia\u0142u od 0 do 998 odpowiada proporcjonalnemu poziomowi jasno\u015bci.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Regulacja_jasnosci_w_czasie_pracy\"><\/span>Regulacja jasno\u015bci w czasie pracy<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Opr\u00f3cz konfiguracji statycznej poziom pod\u015bwietlenia mo\u017cna te\u017c zmieni\u0107 w czasie wykonania programu, zapisuj\u0105c dane bezpo\u015brednio w rejestrze timera:<\/p>\n<pre style=\"white-space: break-spaces; padding: 15px; border: solid 1px; word-wrap: break-word; background-color: #f2f6ff;\">TIM15->CCR1 = twoja_nowa_warto\u015b\u0107_impulsu;<\/pre>\n<p>Dzi\u0119ki temu mo\u017cna:<\/p>\n<ul>\n<li>dynamiczna regulacja jasno\u015bci,<\/li>\n<li>regulacja jasno\u015bci na podstawie \u015bwiat\u0142a otoczenia,<\/li>\n<li>tryb oszcz\u0119dzania energii,<\/li>\n<li>p\u0142ynne efekty pojawiania si\u0119 i zanikania.<\/li>\n<\/ul>\n<p>Nie trzeba ponownie inicjowa\u0107 wy\u015bwietlacza.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Obrot_ekranu_na_wyswietlaczach_STM32\"><\/span>Obr\u00f3t ekranu na wy\u015bwietlaczach STM32<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>W przeciwie\u0144stwie do sterowania pod\u015bwietleniem, <strong>obr\u00f3t ekranu nie jest w przypadku STM32 operacj\u0105 czysto sprz\u0119tow\u0105.<\/strong><br \/>\nUk\u0142ad peryferyjny kontrolera wy\u015bwietlacza LCD TFT (LTDC) nie obs\u0142uguje obracania obrazu, co oznacza, \u017ce obr\u00f3t musi by\u0107 obs\u0142ugiwany na poziomie <strong>  na poziomie frameworka graficznego.<\/strong><\/p>\n<p>W zale\u017cno\u015bci od wybranego frameworka GUI spos\u00f3b implementacji znacznie si\u0119 r\u00f3\u017cni.<\/p>\n<p>W tej sekcji wyja\u015bniono oba podej\u015bcia stosowane w wy\u015bwietlaczach Riverdi STM32:<\/p>\n<ul>\n<li><strong>Obr\u00f3t oparty na LVGL<\/strong><\/li>\n<li><strong>Obr\u00f3t oparty na TouchGFX<\/strong><\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Obrot_ekranu_za_pomoca_LVGL\"><\/span>Obr\u00f3t ekranu za pomoc\u0105 LVGL<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Podczas korzystania z modu\u0142\u00f3w wy\u015bwietlaczy Riverdi STM32 z panelami RGB uk\u0142ad peryferyjny STM32 LTDC przesy\u0142a piksele z pami\u0119ci linia po linii. Poniewa\u017c LTDC nie obs\u0142uguje rotacji sprz\u0119towej, jedynym niezawodnym sposobem na obr\u00f3cenie obrazu jest zrobienie tego programowo, zanim piksele dotr\u0105 do bufora ramki LTDC. <\/p>\n<p>LVGL obs\u0142uguje obr\u00f3t wy\u015bwietlacza za pomoc\u0105:<br \/>\nlv_display_set_rotation(disp, LV_DISPLAY_ROTATION_xxx);<br \/>\n, gdzie xxx mo\u017ce wynosi\u0107 0, 90, 180 lub 270.<\/p>\n<p>To wywo\u0142anie aktualizuje jednak wewn\u0119trzny uk\u0142ad wsp\u00f3\u0142rz\u0119dnych LVGL i spos\u00f3b obs\u0142ugi uk\u0142adu graficznego \u2013 nie powoduje ono automatycznego obracania danych pikseli w potokach RGB opartych na LTDC. Z tego powodu obracanie pikseli trzeba za\u0142atwi\u0107 w ramach flush callback w LVGL. <\/p>\n<p><strong>Gdzie w procesie LVGL mie\u015bci si\u0119 rotacja<\/strong><\/p>\n<p>W tej konfiguracji:<\/p>\n<ul>\n<li>LVGL renderuje ma\u0142e \u201ekafelki\u201d do bufora roboczego (px_map) w<strong> trybie renderowania PARTIAL.<\/strong><\/li>\n<li>Funkcja flush callback (disp_flush) zapisuje wyrenderowane kafelki do bufora ramki LTDC.<\/li>\n<li>Je\u015bli obr\u00f3cenie jest w\u0142\u0105czone, flush callback obraca kafelek przed zapisaniem go do bufora ramki.<\/li>\n<li>Wsp\u00f3\u0142rz\u0119dne dotykowe pozostaj\u0105 niezmienne, bo LVGL zna aktualny k\u0105t obrotu wy\u015bwietlacza.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Inicjalizacja_LVGL_czesciowe_renderowanie_obrot\"><\/span>Inicjalizacja LVGL (cz\u0119\u015bciowe renderowanie + obr\u00f3t)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Wy\u015bwietlacz jest tworzony i konfigurowany w pliku lvgl_port_display.c:<\/p>\n<pre style=\"white-space: break-spaces; padding: 15px; border: solid 1px; word-wrap: break-word; background-color: #f2f6ff;\">void lvgl_display_init(void)\n{\ndisp = lv_display_create(MY_DISP_HOR_RES, MY_DISP_VER_RES);\n\n__attribute__((section(\".my_ram_d2_data\")))\nstatic uint8_t buf1[288 * 1024];\n\nlv_display_set_buffers(disp, (void *)buf1, NULL, sizeof(buf1),\nLV_DISPLAY_RENDER_MODE_PARTIAL);\n\n\/* Ustaw \u017c\u0105dany k\u0105t obrotu *\/\nlv_display_set_rotation(disp, LV_DISPLAY_ROTATION_90);\n\n\/* Zarejestruj flush callback *\/\nlv_display_set_flush_cb(disp, disp_flush);\n}<\/pre>\n<p><img decoding=\"async\" class=\"alignnone wp-image-128933 size-full\" src=\"https:\/\/riverdi.com\/wp-content\/uploads\/2026\/03\/BLOG_grafika_POMIEDZY-TEKSTY_2-1.png\" alt=\"\" width=\"826\" height=\"248\" srcset=\"https:\/\/riverdi.com\/wp-content\/uploads\/2026\/03\/BLOG_grafika_POMIEDZY-TEKSTY_2-1.png 826w, https:\/\/riverdi.com\/wp-content\/uploads\/2026\/03\/BLOG_grafika_POMIEDZY-TEKSTY_2-1-300x90.png 300w, https:\/\/riverdi.com\/wp-content\/uploads\/2026\/03\/BLOG_grafika_POMIEDZY-TEKSTY_2-1-768x231.png 768w, https:\/\/riverdi.com\/wp-content\/uploads\/2026\/03\/BLOG_grafika_POMIEDZY-TEKSTY_2-1-600x180.png 600w, https:\/\/riverdi.com\/wp-content\/uploads\/2026\/03\/BLOG_grafika_POMIEDZY-TEKSTY_2-1-64x19.png 64w\" sizes=\"(max-width: 826px) 100vw, 826px\" \/><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Wywolanie_flush_callback_zapis_danych_z_oprogramowania_do_bufora_ramki_LTDC\"><\/span>Wywo\u0142anie flush callback (zapis danych z oprogramowania do bufora ramki LTDC)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Poni\u017cej znajdziesz flush callback u\u017cywany w wy\u015bwietlaczach Riverdi STM32 z LTDC.<br \/>\nObs\u0142uguje obr\u00f3t o:<\/p>\n<ol>\n<li>Zmiana obszaru docelowego za pomoc\u0105 funkcji lv_display_rotate_area() oraz<\/li>\n<li>Obr\u00f3t danych pikseli za pomoc\u0105 funkcji `lv_draw_sw_rotate()` przed zapisaniem ich do bufora ramki `<br \/>\n`.<\/li>\n<\/ol>\n<pre style=\"white-space: break-spaces; padding: 15px; border: solid 1px; word-wrap: break-word; background-color: #f2f6ff;\">static void disp_flush(lv_display_t * display,\nconst lv_area_t * area,\n\nuint8_t * px_map)\n{\nlv_color_format_t cf = lv_display_get_color_format(display);\nuint32_t px_size = lv_color_format_get_size(cf); \/* RGB565 = 2 bajty *\/\n\n\/* Oblicz powierzchni\u0119 docelow\u0105 po obrocie *\/\nlv_area_t rot_area = *area;\nlv_display_rotate_area(display, &rot_area);\n\nint32_t src_w = lv_area_get_width(area);\nint32_t src_h = lv_area_get_height(area);\n\nuint32_t src_stride = lv_draw_buf_width_to_stride(src_w, cf);\nuint32_t fb_stride = lv_draw_buf_width_to_stride(MY_DISP_HOR_RES, cf);\n\n\/* Adres bufora ramki LTDC *\/\nuint8_t * fb = (uint8_t *)hltdc.LayerCfg[0].FBStartAdress;\nfb += (rot_area.y1 * fb_stride) + (rot_area.x1 * px_size);\n\n\/* Obs\u0142uga pami\u0119ci podr\u0119cznej (wymagana, gdy bufor ramki znajduje si\u0119 w zewn\u0119trznej pami\u0119ci SDRAM) *\/\nSCB_CleanInvalidateDCache();\n\nlv_display_rotation_t r = lv_display_get_rotation(display);\n\nif(r == LV_DISPLAY_ROTATION_0) {\n\/* Szybka \u015bcie\u017cka: bez obracania *\/\nfor(int32_t y = 0; y < src_h; y++) {\nlv_memcpy(fb, px_map, src_stride);\npx_map += src_stride;\n\nfb += fb_stride;\n}\n} else {\n\/* Obr\u00f3\u0107 wyrenderowan\u0105 p\u0142ytk\u0119 bezpo\u015brednio w buforze ramki *\/\nlv_draw_sw_rotate(px_map, fb,\nsrc_w, src_h,\nsrc_stride, fb_stride,\nr, cf);\n}\n\n\/* Poinformuj LVGL, \u017ce operacja flush zosta\u0142a zako\u0144czona *\/\nlv_display_flush_ready(display);\n}<\/pre>\n<h3><span class=\"ez-toc-section\" id=\"Wynik\"><\/span>Wynik<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Przy takim podej\u015bciu:<\/p>\n<ul>\n<li>obraz jest fizycznie obracany przed wys\u0142aniem sygna\u0142u LTDC,<\/li>\n<li>Uk\u0142ad i renderowanie LVGL pozostaj\u0105 sp\u00f3jne,<\/li>\n<li>wsp\u00f3\u0142rz\u0119dne dotykowe pozostaj\u0105 wyr\u00f3wnane wzgl\u0119dem obr\u00f3conego interfejsu u\u017cytkownika,<\/li>\n<li>nie trzeba wprowadza\u0107 \u017cadnych zmian w konfiguracji taktowania LTDC.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Obrot_ekranu_na_STM32_przy_uzyciu_TouchGFX\"><\/span>Obr\u00f3t ekranu na STM32 przy u\u017cyciu TouchGFX<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>W przeciwie\u0144stwie do LVGL,  <strong>TouchGFX obs\u0142uguje obr\u00f3t ekranu zar\u00f3wno na poziomie frameworka, jak i konfiguracji.<\/strong>  W wi\u0119kszo\u015bci projekt\u00f3w wy\u015bwietlaczy Riverdi opartych na uk\u0142adach STM32 mo\u017cna w\u0142\u0105czy\u0107 obr\u00f3t  <strong>bez wprowadzania zmian w sterownikach niskopoziomowych ani w kodzie obs\u0142uguj\u0105cym bufor ramki.<\/strong><\/p>\n<p>Dzi\u0119ki temu TouchGFX jest szczeg\u00f3lnie przydatny, gdy:<\/p>\n<ul>\n<li>orientacja wy\u015bwietlacza jest znana ju\u017c na etapie projektowania,<\/li>\n<li>rotacji nie trzeba zmienia\u0107 dynamicznie w czasie wykonania programu,<\/li>\n<li>Preferowane jest szybkie i \u0142atwe w utrzymaniu podej\u015bcie oparte na konfiguracji.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Koncepcja_obracania_w_TouchGFX\"><\/span>Koncepcja obracania w TouchGFX<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>TouchGFX abstrakcyjnie przedstawia potok wy\u015bwietlania i zarz\u0105dza:<\/p>\n<ul>\n<li>uk\u0142ad bufora ramki,<\/li>\n<li>orientacja renderowania,<\/li>\n<li>przekszta\u0142cenia wsp\u00f3\u0142rz\u0119dnych,<\/li>\n<li>mapowanie gest\u00f3w dotykowych.<\/li>\n<\/ul>\n<p>W rezultacie:<\/p>\n<ul>\n<li>w \u015bcie\u017cce flush LTDC nie trzeba r\u0119cznie obraca\u0107 pikseli,<\/li>\n<li>nie trzeba w \u017caden spos\u00f3b modyfikowa\u0107 bufora ramki na zam\u00f3wienie,<\/li>\n<li>Obr\u00f3t jest stosowany sp\u00f3jnie zar\u00f3wno podczas renderowania, jak i przy obs\u0142udze dotykowej.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Wlaczanie_obrotu_ekranu_w_programie_TouchGFX_Designer\"><\/span>W\u0142\u0105czanie obr\u00f3tu ekranu w programie TouchGFX Designer<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Obr\u00f3t ekranu konfiguruje si\u0119 bezpo\u015brednio w programie TouchGFX Designer.<\/p>\n<p>Dok\u0142adna nazwa mo\u017ce si\u0119 nieco r\u00f3\u017cni\u0107 w zale\u017cno\u015bci od wersji TouchGFX, ale przebieg operacji \u201e<br \/>\n\u201d jest zawsze taki sam.<\/p>\n<p><strong>Krok 1 \u2014 Otw\u00f3rz ustawienia wy\u015bwietlacza<\/strong><\/p>\n<p>W programie TouchGFX Designer:<\/p>\n<ol>\n<li>Otw\u00f3rz sw\u00f3j projekt.<\/li>\n<li>Przejd\u017a do sekcji <strong>\u201eWy\u015bwietlacz \/ P\u0142ytka \/ Konfiguracja aplikacji<\/strong> \u201d.<\/li>\n<li>Znajd\u017a ustawienie <strong>\u201eOrientacja wy\u015bwietlacza<\/strong> \u201d lub <strong>\u201eObr\u00f3t ekranu<\/strong> \u201d.<\/li>\n<\/ol>\n<h2><span class=\"ez-toc-section\" id=\"Podsumowanie\"><\/span>Podsumowanie<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>W modu\u0142ach Riverdi STM32 jasno\u015b\u0107 pod\u015bwietlenia jest sterowana za pomoc\u0105 sprz\u0119towego sygna\u0142u PWM generowanego przez TIM15 i regulowanego przez sterownik diod LED o sta\u0142ym nat\u0119\u017ceniu pr\u0105du. Cykl pracy okre\u015bla jasno\u015b\u0107 niezale\u017cnie od \u015brodowiska GUI, co zapewnia stabilne i przewidywalne dzia\u0142anie. <\/p>\n<p>Obr\u00f3t ekranu nie jest obs\u0142ugiwany przez sprz\u0119t LTDC i musi by\u0107 realizowany na poziomie warstwy graficznej. W LVGL obr\u00f3t wymaga programowej transformacji pikseli w procedurze flush callback. W TouchGFX obr\u00f3t konfiguruje si\u0119 na poziomie frameworka bez modyfikowania sterownik\u00f3w niskopoziomowych wy\u015bwietlacza  <\/p>\n<p>Oddzielenie sterowania na poziomie sprz\u0119towym od zada\u0144 warstwy graficznej zapewnia przejrzyst\u0105 architektur\u0119 i niezawodno\u015b\u0107 system\u00f3w wy\u015bwietlaczy opartych na mikrokontrolerach STM32.<\/p>\n<p><iframe style=\"aspect-ratio: 16\/9;\" title=\"\" src=\"https:\/\/www.youtube.com\/embed\/VsqYn-6io9A\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sterowanie pod\u015bwietleniem i obr\u00f3t ekranu to podstawowe operacje zwi\u0105zane z wy\u015bwietlaczem, kt\u00f3re maj\u0105 bezpo\u015bredni wp\u0142yw na dzia\u0142anie systemu w projektach opartych na mikrokontrolerach STM32. S\u0105 one niezale\u017cne od logiki aplikacji, ale \u015bci\u015ble powi\u0105zane z konfiguracj\u0105 sprz\u0119tow\u0105 i mo\u017cliwo\u015bciami \u015brodowiska graficznego. W tym artykule wyja\u015bniamy, w jaki spos\u00f3b modu\u0142y wy\u015bwietlaczy Riverdi STM32 realizuj\u0105 sterowanie pod\u015bwietleniem oparte [&hellip;]<\/p>\n","protected":false},"author":3328,"featured_media":132835,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","inline_featured_image":false,"footnotes":""},"categories":[5043],"tags":[],"class_list":["post-132828","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wyswietlacz-101"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Przewodnik po podstawowych operacjach zwi\u0105zanych z wy\u015bwietlaczem na STM32 - Riverdi<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Przewodnik po podstawowych operacjach zwi\u0105zanych z wy\u015bwietlaczem na STM32 - Riverdi\" \/>\n<meta property=\"og:description\" content=\"Sterowanie pod\u015bwietleniem i obr\u00f3t ekranu to podstawowe operacje zwi\u0105zane z wy\u015bwietlaczem, kt\u00f3re maj\u0105 bezpo\u015bredni wp\u0142yw na dzia\u0142anie systemu w projektach opartych na mikrokontrolerach STM32. S\u0105 one niezale\u017cne od logiki aplikacji, ale \u015bci\u015ble powi\u0105zane z konfiguracj\u0105 sprz\u0119tow\u0105 i mo\u017cliwo\u015bciami \u015brodowiska graficznego. W tym artykule wyja\u015bniamy, w jaki spos\u00f3b modu\u0142y wy\u015bwietlaczy Riverdi STM32 realizuj\u0105 sterowanie pod\u015bwietleniem oparte [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32\" \/>\n<meta property=\"og:site_name\" content=\"Riverdi\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/riverdi.displays\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-16T13:00:51+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-08T13:37:40+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/riverdi.com\/wp-content\/uploads\/2026\/03\/BLOG_COVER_GUIDE_FUNDAMENTAL_GUIDE_STM32.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"600\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Rafa\u0142 F\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@riverdidisplays\" \/>\n<meta name=\"twitter:site\" content=\"@riverdidisplays\" \/>\n<meta name=\"twitter:label1\" content=\"Napisane przez\" \/>\n\t<meta name=\"twitter:data1\" content=\"Rafa\u0142 F\" \/>\n\t<meta name=\"twitter:label2\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minuta\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/riverdi.com\\\/pl\\\/blog\\\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/riverdi.com\\\/pl\\\/blog\\\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32\"},\"author\":{\"name\":\"Rafa\u0142 F\",\"@id\":\"https:\\\/\\\/riverdi.com\\\/pl#\\\/schema\\\/person\\\/dac328f88dda36bae87261c19a2e30ef\"},\"headline\":\"Przewodnik po podstawowych operacjach zwi\u0105zanych z wy\u015bwietlaczem na STM32\",\"datePublished\":\"2026-03-16T13:00:51+00:00\",\"dateModified\":\"2026-09-08T13:37:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/riverdi.com\\\/pl\\\/blog\\\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32\"},\"wordCount\":1548,\"image\":{\"@id\":\"https:\\\/\\\/riverdi.com\\\/pl\\\/blog\\\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/riverdi.com\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/BLOG_COVER_GUIDE_FUNDAMENTAL_GUIDE_STM32.jpg\",\"articleSection\":[\"Wy\u015bwietlacz 101\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/riverdi.com\\\/pl\\\/blog\\\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32\",\"url\":\"https:\\\/\\\/riverdi.com\\\/pl\\\/blog\\\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32\",\"name\":\"Przewodnik po podstawowych operacjach zwi\u0105zanych z wy\u015bwietlaczem na STM32 - Riverdi\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/riverdi.com\\\/pl#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/riverdi.com\\\/pl\\\/blog\\\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/riverdi.com\\\/pl\\\/blog\\\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/riverdi.com\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/BLOG_COVER_GUIDE_FUNDAMENTAL_GUIDE_STM32.jpg\",\"datePublished\":\"2026-03-16T13:00:51+00:00\",\"dateModified\":\"2026-09-08T13:37:40+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/riverdi.com\\\/pl#\\\/schema\\\/person\\\/dac328f88dda36bae87261c19a2e30ef\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/riverdi.com\\\/pl\\\/blog\\\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/riverdi.com\\\/pl\\\/blog\\\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/riverdi.com\\\/pl\\\/blog\\\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32#primaryimage\",\"url\":\"https:\\\/\\\/riverdi.com\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/BLOG_COVER_GUIDE_FUNDAMENTAL_GUIDE_STM32.jpg\",\"contentUrl\":\"https:\\\/\\\/riverdi.com\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/BLOG_COVER_GUIDE_FUNDAMENTAL_GUIDE_STM32.jpg\",\"width\":1280,\"height\":600},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/riverdi.com\\\/pl\\\/blog\\\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Front Page\",\"item\":\"https:\\\/\\\/riverdi.com\\\/pl\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Przewodnik po podstawowych operacjach zwi\u0105zanych z wy\u015bwietlaczem na STM32\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/riverdi.com\\\/pl#website\",\"url\":\"https:\\\/\\\/riverdi.com\\\/pl\",\"name\":\"Riverdi\",\"description\":\"Global TFT LCD Manufacturer\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/riverdi.com\\\/pl?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/riverdi.com\\\/pl#\\\/schema\\\/person\\\/dac328f88dda36bae87261c19a2e30ef\",\"name\":\"Rafa\u0142 F\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b208bcbc75c8894f7448c2283e1f99dd68d97018826b56edce8aeb3c8c3985ee?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b208bcbc75c8894f7448c2283e1f99dd68d97018826b56edce8aeb3c8c3985ee?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b208bcbc75c8894f7448c2283e1f99dd68d97018826b56edce8aeb3c8c3985ee?s=96&d=mm&r=g\",\"caption\":\"Rafa\u0142 F\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Przewodnik po podstawowych operacjach zwi\u0105zanych z wy\u015bwietlaczem na STM32 - Riverdi","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32","og_locale":"pl_PL","og_type":"article","og_title":"Przewodnik po podstawowych operacjach zwi\u0105zanych z wy\u015bwietlaczem na STM32 - Riverdi","og_description":"Sterowanie pod\u015bwietleniem i obr\u00f3t ekranu to podstawowe operacje zwi\u0105zane z wy\u015bwietlaczem, kt\u00f3re maj\u0105 bezpo\u015bredni wp\u0142yw na dzia\u0142anie systemu w projektach opartych na mikrokontrolerach STM32. S\u0105 one niezale\u017cne od logiki aplikacji, ale \u015bci\u015ble powi\u0105zane z konfiguracj\u0105 sprz\u0119tow\u0105 i mo\u017cliwo\u015bciami \u015brodowiska graficznego. W tym artykule wyja\u015bniamy, w jaki spos\u00f3b modu\u0142y wy\u015bwietlaczy Riverdi STM32 realizuj\u0105 sterowanie pod\u015bwietleniem oparte [&hellip;]","og_url":"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32","og_site_name":"Riverdi","article_publisher":"https:\/\/www.facebook.com\/riverdi.displays\/","article_published_time":"2026-03-16T13:00:51+00:00","article_modified_time":"2026-09-08T13:37:40+00:00","og_image":[{"width":1280,"height":600,"url":"https:\/\/riverdi.com\/wp-content\/uploads\/2026\/03\/BLOG_COVER_GUIDE_FUNDAMENTAL_GUIDE_STM32.jpg","type":"image\/jpeg"}],"author":"Rafa\u0142 F","twitter_card":"summary_large_image","twitter_creator":"@riverdidisplays","twitter_site":"@riverdidisplays","twitter_misc":{"Napisane przez":"Rafa\u0142 F","Szacowany czas czytania":"9 minuta"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32#article","isPartOf":{"@id":"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32"},"author":{"name":"Rafa\u0142 F","@id":"https:\/\/riverdi.com\/pl#\/schema\/person\/dac328f88dda36bae87261c19a2e30ef"},"headline":"Przewodnik po podstawowych operacjach zwi\u0105zanych z wy\u015bwietlaczem na STM32","datePublished":"2026-03-16T13:00:51+00:00","dateModified":"2026-09-08T13:37:40+00:00","mainEntityOfPage":{"@id":"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32"},"wordCount":1548,"image":{"@id":"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32#primaryimage"},"thumbnailUrl":"https:\/\/riverdi.com\/wp-content\/uploads\/2026\/03\/BLOG_COVER_GUIDE_FUNDAMENTAL_GUIDE_STM32.jpg","articleSection":["Wy\u015bwietlacz 101"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32","url":"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32","name":"Przewodnik po podstawowych operacjach zwi\u0105zanych z wy\u015bwietlaczem na STM32 - Riverdi","isPartOf":{"@id":"https:\/\/riverdi.com\/pl#website"},"primaryImageOfPage":{"@id":"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32#primaryimage"},"image":{"@id":"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32#primaryimage"},"thumbnailUrl":"https:\/\/riverdi.com\/wp-content\/uploads\/2026\/03\/BLOG_COVER_GUIDE_FUNDAMENTAL_GUIDE_STM32.jpg","datePublished":"2026-03-16T13:00:51+00:00","dateModified":"2026-09-08T13:37:40+00:00","author":{"@id":"https:\/\/riverdi.com\/pl#\/schema\/person\/dac328f88dda36bae87261c19a2e30ef"},"breadcrumb":{"@id":"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32#primaryimage","url":"https:\/\/riverdi.com\/wp-content\/uploads\/2026\/03\/BLOG_COVER_GUIDE_FUNDAMENTAL_GUIDE_STM32.jpg","contentUrl":"https:\/\/riverdi.com\/wp-content\/uploads\/2026\/03\/BLOG_COVER_GUIDE_FUNDAMENTAL_GUIDE_STM32.jpg","width":1280,"height":600},{"@type":"BreadcrumbList","@id":"https:\/\/riverdi.com\/pl\/blog\/przewodnik-po-podstawowych-operacjach-zwiazanych-z-wyswietlaczem-na-stm32#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Front Page","item":"https:\/\/riverdi.com\/pl"},{"@type":"ListItem","position":2,"name":"Przewodnik po podstawowych operacjach zwi\u0105zanych z wy\u015bwietlaczem na STM32"}]},{"@type":"WebSite","@id":"https:\/\/riverdi.com\/pl#website","url":"https:\/\/riverdi.com\/pl","name":"Riverdi","description":"Global TFT LCD Manufacturer","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/riverdi.com\/pl?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Person","@id":"https:\/\/riverdi.com\/pl#\/schema\/person\/dac328f88dda36bae87261c19a2e30ef","name":"Rafa\u0142 F","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/secure.gravatar.com\/avatar\/b208bcbc75c8894f7448c2283e1f99dd68d97018826b56edce8aeb3c8c3985ee?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/b208bcbc75c8894f7448c2283e1f99dd68d97018826b56edce8aeb3c8c3985ee?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b208bcbc75c8894f7448c2283e1f99dd68d97018826b56edce8aeb3c8c3985ee?s=96&d=mm&r=g","caption":"Rafa\u0142 F"}}]}},"_links":{"self":[{"href":"https:\/\/riverdi.com\/pl\/wp-json\/wp\/v2\/posts\/132828","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/riverdi.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/riverdi.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/riverdi.com\/pl\/wp-json\/wp\/v2\/users\/3328"}],"replies":[{"embeddable":true,"href":"https:\/\/riverdi.com\/pl\/wp-json\/wp\/v2\/comments?post=132828"}],"version-history":[{"count":1,"href":"https:\/\/riverdi.com\/pl\/wp-json\/wp\/v2\/posts\/132828\/revisions"}],"predecessor-version":[{"id":132881,"href":"https:\/\/riverdi.com\/pl\/wp-json\/wp\/v2\/posts\/132828\/revisions\/132881"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/riverdi.com\/pl\/wp-json\/wp\/v2\/media\/132835"}],"wp:attachment":[{"href":"https:\/\/riverdi.com\/pl\/wp-json\/wp\/v2\/media?parent=132828"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/riverdi.com\/pl\/wp-json\/wp\/v2\/categories?post=132828"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/riverdi.com\/pl\/wp-json\/wp\/v2\/tags?post=132828"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}