{"id":129707,"date":"2026-03-16T14:00:51","date_gmt":"2026-03-16T13:00:51","guid":{"rendered":"https:\/\/riverdi.com\/blog\/a-guide-to-fundamental-display-operations-on-stm32"},"modified":"2026-03-16T14:00:51","modified_gmt":"2026-03-16T13:00:51","slug":"a-guide-to-fundamental-display-operations-on-stm32","status":"publish","type":"post","link":"https:\/\/riverdi.com\/es\/blog\/a-guide-to-fundamental-display-operations-on-stm32","title":{"rendered":"Gu\u00eda de operaciones fundamentales de visualizaci\u00f3n en STM32"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 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=\"Alternar tabla de contenidos\"><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\/es\/blog\/a-guide-to-fundamental-display-operations-on-stm32\/#Control_de_retroiluminacion_en_pantallas_Riverdi_STM32\" >Control de retroiluminaci\u00f3n en pantallas 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\/es\/blog\/a-guide-to-fundamental-display-operations-on-stm32\/#Modulos_STM32_Riverdi_compatibles\" >M\u00f3dulos STM32 Riverdi compatibles<\/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\/es\/blog\/a-guide-to-fundamental-display-operations-on-stm32\/#Principio_de_control_de_la_retroiluminacion\" >Principio de control de la retroiluminaci\u00f3n<\/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\/es\/blog\/a-guide-to-fundamental-display-operations-on-stm32\/#Requisitos_de_hardware_y_software\" >Requisitos de hardware y software<\/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\/es\/blog\/a-guide-to-fundamental-display-operations-on-stm32\/#Ejemplo_de_configuracion_PWM\" >Ejemplo de configuraci\u00f3n 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\/es\/blog\/a-guide-to-fundamental-display-operations-on-stm32\/#Rango_de_luminosidad_y_significado\" >Rango de luminosidad y significado<\/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\/es\/blog\/a-guide-to-fundamental-display-operations-on-stm32\/#Ajuste_del_brillo_en_tiempo_de_funcionamiento\" >Ajuste del brillo en tiempo de funcionamiento<\/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\/es\/blog\/a-guide-to-fundamental-display-operations-on-stm32\/#Rotacion_de_pantalla_en_pantallas_STM32\" >Rotaci\u00f3n de pantalla en pantallas 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\/es\/blog\/a-guide-to-fundamental-display-operations-on-stm32\/#Rotacion_de_pantalla_con_LVGL\" >Rotaci\u00f3n de pantalla con 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\/es\/blog\/a-guide-to-fundamental-display-operations-on-stm32\/#Inicializacion_LVGL_renderizado_PARCIAL_rotacion\" >Inicializaci\u00f3n LVGL (renderizado PARCIAL + rotaci\u00f3n)<\/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\/es\/blog\/a-guide-to-fundamental-display-operations-on-stm32\/#Flush_callback_rotacion_software_en_framebuffer_LTDC\" >Flush callback (rotaci\u00f3n software en framebuffer 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\/es\/blog\/a-guide-to-fundamental-display-operations-on-stm32\/#Resultado\" >Resultado<\/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\/es\/blog\/a-guide-to-fundamental-display-operations-on-stm32\/#Rotacion_de_pantalla_en_STM32_usando_TouchGFX\" >Rotaci\u00f3n de pantalla en STM32 usando 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\/es\/blog\/a-guide-to-fundamental-display-operations-on-stm32\/#Concepto_de_rotacion_TouchGFX\" >Concepto de rotaci\u00f3n 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\/es\/blog\/a-guide-to-fundamental-display-operations-on-stm32\/#Activar_la_rotacion_de_pantalla_en_el_disenador_TouchGFX\" >Activar la rotaci\u00f3n de pantalla en el dise\u00f1ador TouchGFX<\/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\/es\/blog\/a-guide-to-fundamental-display-operations-on-stm32\/#Resumen\" >Resumen<\/a><\/li><\/ul><\/nav><\/div>\n<p>El control de la retroiluminaci\u00f3n y la rotaci\u00f3n de la pantalla son operaciones b\u00e1sicas de visualizaci\u00f3n que afectan directamente al comportamiento del sistema en los dise\u00f1os basados en STM32. Son independientes de la l\u00f3gica de la aplicaci\u00f3n, pero est\u00e1n estrechamente relacionadas con la configuraci\u00f3n del hardware y las capacidades del marco gr\u00e1fico. <\/p>\n<p>En este art\u00edculo, explicamos c\u00f3mo los m\u00f3dulos de pantalla STM32 de Riverdi implementan el control de retroiluminaci\u00f3n basado en PWM utilizando TIM15 y un controlador LED dedicado, y c\u00f3mo la rotaci\u00f3n de la pantalla se gestiona de forma diferente en los proyectos LVGL y TouchGFX. Nos centramos en los detalles pr\u00e1cticos de la implementaci\u00f3n y en la separaci\u00f3n arquitect\u00f3nica. <\/p>\n<h2><span class=\"ez-toc-section\" id=\"Control_de_retroiluminacion_en_pantallas_Riverdi_STM32\"><\/span>Control de retroiluminaci\u00f3n en pantallas Riverdi STM32<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>El control de la retroiluminaci\u00f3n es una de las operaciones m\u00e1s fundamentales cuando se trabaja con pantallas integradas. A diferencia del renderizado de gr\u00e1ficos o del manejo t\u00e1ctil, <strong>el control de la<\/strong> retroiluminaci\u00f3n <strong>es independiente del marco de la interfaz gr\u00e1fica de usuario<\/strong> y no depende de si la aplicaci\u00f3n utiliza LVGL, TouchGFX u otra pila de gr\u00e1ficos. <\/p>\n<p>En los m\u00f3dulos de pantalla Riverdi basados en STM32, el brillo de la retroiluminaci\u00f3n se controla mediante una <strong>se\u00f1al PWM de hardware,<\/strong> generada por un temporizador STM32.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Modulos_STM32_Riverdi_compatibles\"><\/span>M\u00f3dulos STM32 Riverdi compatibles<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>El m\u00e9todo descrito en este art\u00edculo se aplica a los m\u00f3dulos de visualizaci\u00f3n STM32 de Riverdi, como por ejemplo<\/p>\n<ul>\n<li>RVT121<\/li>\n<li>RVT101<\/li>\n<li>RVT70<\/li>\n<li>RVT50<\/li>\n<\/ul>\n<p>El mismo principio puede utilizarse en otras plataformas STM32 de Riverdi que expongan una entrada de retroiluminaci\u00f3n controlada por PWM.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Principio_de_control_de_la_retroiluminacion\"><\/span>Principio de control de la retroiluminaci\u00f3n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>En los m\u00f3dulos de pantalla Riverdi basados en STM32, el microcontrolador no controla directamente la retroiluminaci\u00f3n LED. En su lugar, el STM32 genera una <strong>se\u00f1al de control PWM<\/strong>, que se introduce en un <strong>circuito<\/strong> dedicado <strong>de controlador de retroiluminaci\u00f3n LED.<\/strong> <\/p>\n<p>El controlador de retroiluminaci\u00f3n es una fuente de corriente constante, dise\u00f1ada para regular la corriente que fluye a trav\u00e9s de las cadenas de LED. La se\u00f1al PWM no modula directamente la tensi\u00f3n de los LED. En su lugar, controla el ciclo de trabajo efectivo del driver, permitiendo que la corriente media de los LED var\u00ede entre el 0% y el 100% de su valor nominal.  <\/p>\n<p>La arquitectura puede resumirse como sigue:<\/p>\n<ul>\n<li>El temporizador de la STM32 (por ejemplo, TIM15) genera una se\u00f1al PWM.<\/li>\n<li>La se\u00f1al PWM se dirige a la entrada del controlador de retroiluminaci\u00f3n.<\/li>\n<li>El controlador de la retroiluminaci\u00f3n regula la corriente del LED.<\/li>\n<li>l ciclo de trabajo de la se\u00f1al PWM determina la luminosidad efectiva.<\/li>\n<\/ul>\n<p>Es decir:<\/p>\n<ul>\n<li>La frecuencia PWM se define mediante la configuraci\u00f3n del temporizador<\/li>\n<li>El brillo es proporcional al ciclo de trabajo PWM.<\/li>\n<li>La corriente del LED siempre est\u00e1 regulada por el driver, no por el GPIO de la MCU.<\/li>\n<\/ul>\n<p>Mayor ciclo de trabajo \u2192 mayor corriente media del LED \u2192 pantalla m\u00e1s brillante<\/p>\n<p>Ciclo de trabajo m\u00e1s bajo \u2192 corriente LED media m\u00e1s baja \u2192 visualizaci\u00f3n m\u00e1s tenue<\/p>\n<p>Porque los LED son accionados por una fuente de corriente regulada:<\/p>\n<ul>\n<li>El control del brillo es lineal y estable,<\/li>\n<li>La vida \u00fatil de los LED est\u00e1 protegida,<\/li>\n<li>el comportamiento t\u00e9rmico es predecible,<\/li>\n<li>La eficiencia se mantiene alta en todo el rango de funcionamiento.<\/li>\n<\/ul>\n<p>Este enfoque proporciona:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>Control suave del brillo,<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>baja p\u00e9rdida de potencia,<\/li>\n<li>regulaci\u00f3n correcta de la corriente de la retroiluminaci\u00f3n LED,<\/li>\n<li>total independencia del hardware del marco de la interfaz gr\u00e1fica de usuario.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Requisitos_de_hardware_y_software\"><\/span>Requisitos de hardware y software<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>Antes de ajustar el nivel de retroiluminaci\u00f3n, aseg\u00farate de que:<\/p>\n<ul>\n<li>la pantalla est\u00e1 correctamente conectada al m\u00f3dulo STM32,<\/li>\n<li>la placa est\u00e1 conectada a un PC mediante ST-Link,<\/li>\n<li>el proyecto se construye utilizando una plantilla de software compatible (LVGL o TouchGFX).<\/li>\n<\/ul>\n<p>Para controlar la retroiluminaci\u00f3n no es necesario modificar la configuraci\u00f3n del marco de la interfaz gr\u00e1fica de usuario.<\/p>\n<p><strong>Temporizador utilizado para el control de la retroiluminaci\u00f3n<\/strong><\/p>\n<p>En los m\u00f3dulos de pantalla STM32 de Riverdi, la retroiluminaci\u00f3n se controla mediante:<\/p>\n<ul>\n<li><strong>TIM15<\/strong> (en las infraestructuras U5 y H7)<\/li>\n<li>Salida PWM por hardware<\/li>\n<li>Canal 1<\/li>\n<\/ul>\n<p>La configuraci\u00f3n PWM se encuentra en el archivo de proyecto tim.c, dentro de la funci\u00f3n <strong>MX_TIM15_Init().<\/strong><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Ejemplo_de_configuracion_PWM\"><\/span>Ejemplo de configuraci\u00f3n PWM<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>El canal PWM se configura utilizando estructuras HAL est\u00e1ndar de 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(&amp;htim15, &amp;sConfigOC, TIM_CHANNEL_1) !=\nHAL_OK)\n{\nError_Handler();\n}<\/pre>\n<p>El par\u00e1metro m\u00e1s importante aqu\u00ed es sConfigOC.Pulse.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Rango_de_luminosidad_y_significado\"><\/span>Rango de luminosidad y significado<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>El brillo de la retroiluminaci\u00f3n se controla mediante el ciclo de trabajo PWM:<\/p>\n<ul>\n<li><strong>0<\/strong> \u2192 Luz de fondo APAGADA<\/li>\n<li> <strong> 998<\/strong> \u2192 luminosidad m\u00e1xima<\/li>\n<\/ul>\n<p>Cualquier valor entre 0 y 998 da como resultado un nivel de brillo proporcional.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Ajuste_del_brillo_en_tiempo_de_funcionamiento\"><\/span>Ajuste del brillo en tiempo de funcionamiento<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Adem\u00e1s de la configuraci\u00f3n est\u00e1tica, el nivel de retroiluminaci\u00f3n tambi\u00e9n se puede cambiar en tiempo de ejecuci\u00f3n escribiendo directamente en el registro del temporizador:<\/p>\n<pre style=\"white-space: break-spaces; padding: 15px; border: solid 1px; word-wrap: break-word; background-color: #f2f6ff;\">TIM15-&gt;CCR1 = tu_nuevo_valor_impulso;<\/pre>\n<p>Esto permite:<\/p>\n<ul>\n<li>control din\u00e1mico del brillo,<\/li>\n<li>regulaci\u00f3n basada en la luz ambiental,<\/li>\n<li>modos de ahorro de energ\u00eda,<\/li>\n<li>Efectos suaves de fundido de entrada y salida.<\/li>\n<\/ul>\n<p>No es necesario reiniciar la pantalla.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Rotacion_de_pantalla_en_pantallas_STM32\"><\/span>Rotaci\u00f3n de pantalla en pantallas STM32<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>A diferencia del control de la retroiluminaci\u00f3n, <strong>la rotaci\u00f3n de la pantalla no es una operaci\u00f3n puramente de hardware en STM32.<\/strong><br \/>\nEl perif\u00e9rico controlador de pantalla LCD TFT (LTDC) no admite la rotaci\u00f3n de la imagen, lo que significa que la rotaci\u00f3n debe gestionarse en el <strong>  nivel del marco gr\u00e1fico.<\/strong><\/p>\n<p>Dependiendo del marco GUI elegido, la implementaci\u00f3n difiere significativamente.<\/p>\n<p>En este apartado se explican los dos enfoques utilizados en las pantallas STM32 de Riverdi:<\/p>\n<ul>\n<li><strong>Rotaci\u00f3n basada en LVGL<\/strong><\/li>\n<li><strong>Rotaci\u00f3n basada en TouchGFX<\/strong><\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Rotacion_de_pantalla_con_LVGL\"><\/span>Rotaci\u00f3n de pantalla con LVGL<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Cuando se utilizan m\u00f3dulos de visualizaci\u00f3n Riverdi STM32 con paneles RGB, el perif\u00e9rico STM32 LTDC transmite los p\u00edxeles de la memoria l\u00ednea a l\u00ednea. Como el LTDC no admite la rotaci\u00f3n por hardware, la \u00fanica forma fiable de rotar la imagen es hacerlo por software antes de que los p\u00edxeles lleguen al framebuffer del LTDC. <\/p>\n<p>LVGL admite la rotaci\u00f3n de la pantalla mediante:<br \/>\nlv_display_set_rotation(disp, LV_DISPLAY_ROTATION_xxx);<br \/>\ndonde xxx puede ser 0, 90, 180 o 270.<\/p>\n<p>Sin embargo, esta llamada actualiza el sistema de coordenadas interno de LVGL y el manejo del dise\u00f1o -no rota autom\u00e1ticamente los datos de p\u00edxel para las canalizaciones RGB basadas en LTDC-. Por esa raz\u00f3n, la rotaci\u00f3n de p\u00edxeles debe manejarse dentro de la llamada de retorno de LVGL. <\/p>\n<p><strong>D\u00f3nde encaja la rotaci\u00f3n en el canal LVGL<\/strong><\/p>\n<p>En esta configuraci\u00f3n:<\/p>\n<ul>\n<li>LVGL renderiza peque\u00f1os \u00abmosaicos\u00bb en un b\u00fafer de trabajo (px_map) utilizando<strong> el modo de renderizado PARCIAL.<\/strong><\/li>\n<li>La llamada de retorno (disp_flush) escribe los mosaicos renderizados en el framebuffer LTDC.<\/li>\n<li>Si la rotaci\u00f3n est\u00e1 activada, la llamada de retorno a la descarga rota el azulejo antes de escribirlo en el framebuffer.<\/li>\n<li>Las coordenadas t\u00e1ctiles se mantienen constantes porque LVGL conoce la rotaci\u00f3n actual de la pantalla.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Inicializacion_LVGL_renderizado_PARCIAL_rotacion\"><\/span>Inicializaci\u00f3n LVGL (renderizado PARCIAL + rotaci\u00f3n)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>La pantalla se crea y configura en 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\/* Establece la rotaci\u00f3n deseada *\/\nlv_display_set_rotation(disp, LV_DISPLAY_ROTATION_90);\n\n\/* Registra la llamada de retorno de descarga *\/\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=\"Flush_callback_rotacion_software_en_framebuffer_LTDC\"><\/span>Flush callback (rotaci\u00f3n software en framebuffer LTDC)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>A continuaci\u00f3n se muestra la llamada de retorno de descarga utilizada para las pantallas Riverdi STM32 con LTDC.<br \/>\nAdmite la rotaci\u00f3n por:<\/p>\n<ol>\n<li>Transformar el \u00e1rea de destino mediante lv_display_rotate_area(), y<\/li>\n<li>Rota los datos de los p\u00edxeles mediante lv_draw_sw_rotate() antes de escribirlos en el framebuffer<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 * pantalla,\nconst lv_area_t * \u00e1rea,\n\nuint8_t * px_map)\n{\nlv_color_format_t cf = lv_display_get_color_format(pantalla);\nuint32_t px_size = lv_color_format_get_size(cf); \/* RGB565 = 2 bytes *\/\n\n\/* Calcula el \u00e1rea de destino tras la rotaci\u00f3n *\/\nlv_area_t rotar_\u00e1rea = *\u00e1rea;\nlv_\u00e1rea_de_rotaci\u00f3n_de_pantalla(pantalla, &amp;\u00e1rea_de_rotaci\u00f3n);\n\nint32_t src_w = lv_area_get_width(\u00e1rea);\nint32_t src_h = lv_area_get_height(\u00e1rea);\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\/* Direcci\u00f3n del b\u00fafer de trama LTDC *\/\nuint8_t * fb = (uint8_t *)hltdc.LayerCfg[0].FBStartAdress;\nfb += (rot_area.y1 * fb_stride) + (rot_area.x1 * px_size);\n\n\/* Mantenimiento de la cach\u00e9 (necesario cuando el framebuffer est\u00e1 en SDRAM externa) *\/\nSCB_CleanInvalidateDCache();\n\nlv_display_rotation_t r = lv_display_get_rotation(pantalla);\n\nif(r == LV_DISPLAY_ROTATION_0) {\n\/* Trayectoria r\u00e1pida: sin rotaci\u00f3n *\/\nfor(int32_t y = 0; y &lt; src_h; y++) {\nlv_memcpy(fb, px_map, src_stride);\npx_map += src_stride;\n\nfb += fb_stride;\n}\n} si no {\n\/* Gira el azulejo renderizado directamente en el framebuffer *\/\nlv_draw_sw_rotate(px_map, fb,\nsrc_w, src_h,\nsrc_stride, fb_stride,\nr, cf);\n}\n\n\/* Notifica a LVGL que la descarga se ha completado *\/\nlv_display_flush_ready(pantalla);\n}<\/pre>\n<h3><span class=\"ez-toc-section\" id=\"Resultado\"><\/span>Resultado<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Con este planteamiento:<\/p>\n<ul>\n<li>la imagen se gira f\u00edsicamente antes de la salida LTDC,<\/li>\n<li>El dise\u00f1o y la representaci\u00f3n de LVGL siguen siendo coherentes,<\/li>\n<li>las coordenadas t\u00e1ctiles permanecen alineadas con la IU girada,<\/li>\n<li>no es necesario modificar la configuraci\u00f3n de temporizaci\u00f3n LTDC.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Rotacion_de_pantalla_en_STM32_usando_TouchGFX\"><\/span>Rotaci\u00f3n de pantalla en STM32 usando TouchGFX<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>A diferencia de LVGL,  <strong>TouchGFX gestiona la rotaci\u00f3n de la pantalla a nivel de marco y configuraci\u00f3n.<\/strong>  En la mayor\u00eda de los proyectos de visualizaci\u00f3n Riverdi basados en STM32, se puede activar la rotaci\u00f3n  <strong>sin modificar los controladores de pantalla de bajo nivel ni el c\u00f3digo de gesti\u00f3n del b\u00fafer de trama.<\/strong><\/p>\n<p>Esto hace que TouchGFX sea especialmente pr\u00e1ctico cuando:<\/p>\n<ul>\n<li>la orientaci\u00f3n de la pantalla se conoce en el momento del dise\u00f1o,<\/li>\n<li>la rotaci\u00f3n no necesita modificarse din\u00e1micamente en tiempo de ejecuci\u00f3n,<\/li>\n<li>se prefiere un enfoque r\u00e1pido y mantenible basado en la configuraci\u00f3n.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Concepto_de_rotacion_TouchGFX\"><\/span>Concepto de rotaci\u00f3n TouchGFX<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>TouchGFX abstrae el canal de visualizaci\u00f3n y lo gestiona:<\/p>\n<ul>\n<li>disposici\u00f3n del b\u00fafer de trama,<\/li>\n<li>orientaci\u00f3n de la representaci\u00f3n,<\/li>\n<li>transformaciones de coordenadas,<\/li>\n<li>mapeo de entrada t\u00e1ctil.<\/li>\n<\/ul>\n<p>En consecuencia:<\/p>\n<ul>\n<li>no es necesaria la rotaci\u00f3n manual de p\u00edxeles en la ruta de descarga LTDC,<\/li>\n<li>no es necesaria ninguna manipulaci\u00f3n personalizada del b\u00fafer de fotogramas,<\/li>\n<li>La rotaci\u00f3n se aplica de forma coherente en el renderizado y en la entrada t\u00e1ctil.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Activar_la_rotacion_de_pantalla_en_el_disenador_TouchGFX\"><\/span>Activar la rotaci\u00f3n de pantalla en el dise\u00f1ador TouchGFX<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>La rotaci\u00f3n de la pantalla se configura directamente en TouchGFX Designer.<\/p>\n<p>La denominaci\u00f3n exacta puede diferir ligeramente seg\u00fan la versi\u00f3n de TouchGFX, pero el flujo de trabajo de<br \/>\nes coherente.<\/p>\n<p><strong>Paso 1-Abrir Configuraci\u00f3n de Pantalla<\/strong><\/p>\n<p>En Dise\u00f1ador TouchGFX:<\/p>\n<ol>\n<li>Abre tu proyecto.<\/li>\n<li>Navega hasta la secci\u00f3n <strong>Pantalla \/ Placa \/ Configuraci\u00f3n de la Aplicaci\u00f3n<\/strong>.<\/li>\n<li>Localiza el ajuste <strong>Orientaci\u00f3n de la pantalla<\/strong> o <strong>Rotaci\u00f3n de la pantalla<\/strong>.<\/li>\n<\/ol>\n<h2><span class=\"ez-toc-section\" id=\"Resumen\"><\/span>Resumen<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>En los m\u00f3dulos Riverdi STM32, el brillo de la retroiluminaci\u00f3n se controla mediante PWM de hardware generado por TIM15 y regulado por un controlador LED de corriente constante. El ciclo de trabajo define el brillo, independientemente del marco GUI, lo que permite un funcionamiento estable y predecible. <\/p>\n<p>La rotaci\u00f3n de la pantalla no es compatible con el hardware LTDC y debe gestionarse en la capa gr\u00e1fica. En LVGL, la rotaci\u00f3n requiere una transformaci\u00f3n de p\u00edxeles por software en la llamada de retorno a la pantalla. En TouchGFX, la rotaci\u00f3n se configura a nivel de marco sin modificar los controladores de pantalla de bajo nivel  <\/p>\n<p>Separar el control a nivel de hardware de las responsabilidades de la capa gr\u00e1fica garantiza una arquitectura limpia y un comportamiento fiable en los sistemas de visualizaci\u00f3n basados en 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>El control de la retroiluminaci\u00f3n y la rotaci\u00f3n de la pantalla son operaciones b\u00e1sicas de visualizaci\u00f3n que afectan directamente al comportamiento del sistema en los dise\u00f1os basados en STM32. Son independientes de la l\u00f3gica de la aplicaci\u00f3n, pero est\u00e1n estrechamente relacionadas con la configuraci\u00f3n del hardware y las capacidades del marco gr\u00e1fico. En este art\u00edculo, [&hellip;]<\/p>\n","protected":false},"author":3328,"featured_media":128925,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","inline_featured_image":false,"footnotes":""},"categories":[787],"tags":[],"class_list":["post-129707","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-pantalla-101"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Gu\u00eda de operaciones fundamentales de visualizaci\u00f3n en 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\/es\/blog\/a-guide-to-fundamental-display-operations-on-stm32\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Gu\u00eda de operaciones fundamentales de visualizaci\u00f3n en STM32 - Riverdi\" \/>\n<meta property=\"og:description\" content=\"El control de la retroiluminaci\u00f3n y la rotaci\u00f3n de la pantalla son operaciones b\u00e1sicas de visualizaci\u00f3n que afectan directamente al comportamiento del sistema en los dise\u00f1os basados en STM32. Son independientes de la l\u00f3gica de la aplicaci\u00f3n, pero est\u00e1n estrechamente relacionadas con la configuraci\u00f3n del hardware y las capacidades del marco gr\u00e1fico. En este art\u00edculo, [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/riverdi.com\/es\/blog\/a-guide-to-fundamental-display-operations-on-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=\"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=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Rafa\u0142 F\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/riverdi.com\\\/es\\\/blog\\\/a-guide-to-fundamental-display-operations-on-stm32#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/riverdi.com\\\/es\\\/blog\\\/a-guide-to-fundamental-display-operations-on-stm32\"},\"author\":{\"name\":\"Rafa\u0142 F\",\"@id\":\"https:\\\/\\\/riverdi.com\\\/es#\\\/schema\\\/person\\\/dac328f88dda36bae87261c19a2e30ef\"},\"headline\":\"Gu\u00eda de operaciones fundamentales de visualizaci\u00f3n en STM32\",\"datePublished\":\"2026-03-16T13:00:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/riverdi.com\\\/es\\\/blog\\\/a-guide-to-fundamental-display-operations-on-stm32\"},\"wordCount\":1774,\"image\":{\"@id\":\"https:\\\/\\\/riverdi.com\\\/es\\\/blog\\\/a-guide-to-fundamental-display-operations-on-stm32#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/riverdi.com\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/BLOG_COVER_GUIDE_FUNDAMENTAL_GUIDE_STM32.jpg\",\"articleSection\":[\"Pantalla 101\"],\"inLanguage\":\"es\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/riverdi.com\\\/es\\\/blog\\\/a-guide-to-fundamental-display-operations-on-stm32\",\"url\":\"https:\\\/\\\/riverdi.com\\\/es\\\/blog\\\/a-guide-to-fundamental-display-operations-on-stm32\",\"name\":\"Gu\u00eda de operaciones fundamentales de visualizaci\u00f3n en STM32 - Riverdi\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/riverdi.com\\\/es#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/riverdi.com\\\/es\\\/blog\\\/a-guide-to-fundamental-display-operations-on-stm32#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/riverdi.com\\\/es\\\/blog\\\/a-guide-to-fundamental-display-operations-on-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\",\"author\":{\"@id\":\"https:\\\/\\\/riverdi.com\\\/es#\\\/schema\\\/person\\\/dac328f88dda36bae87261c19a2e30ef\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/riverdi.com\\\/es\\\/blog\\\/a-guide-to-fundamental-display-operations-on-stm32#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/riverdi.com\\\/es\\\/blog\\\/a-guide-to-fundamental-display-operations-on-stm32\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/riverdi.com\\\/es\\\/blog\\\/a-guide-to-fundamental-display-operations-on-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\\\/es\\\/blog\\\/a-guide-to-fundamental-display-operations-on-stm32#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Front Page\",\"item\":\"https:\\\/\\\/riverdi.com\\\/es\\\/portada\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Gu\u00eda de operaciones fundamentales de visualizaci\u00f3n en STM32\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/riverdi.com\\\/es#website\",\"url\":\"https:\\\/\\\/riverdi.com\\\/es\",\"name\":\"Riverdi\",\"description\":\"Global TFT LCD Manufacturer\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/riverdi.com\\\/es?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/riverdi.com\\\/es#\\\/schema\\\/person\\\/dac328f88dda36bae87261c19a2e30ef\",\"name\":\"Rafa\u0142 F\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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":"Gu\u00eda de operaciones fundamentales de visualizaci\u00f3n en 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\/es\/blog\/a-guide-to-fundamental-display-operations-on-stm32","og_locale":"es_ES","og_type":"article","og_title":"Gu\u00eda de operaciones fundamentales de visualizaci\u00f3n en STM32 - Riverdi","og_description":"El control de la retroiluminaci\u00f3n y la rotaci\u00f3n de la pantalla son operaciones b\u00e1sicas de visualizaci\u00f3n que afectan directamente al comportamiento del sistema en los dise\u00f1os basados en STM32. Son independientes de la l\u00f3gica de la aplicaci\u00f3n, pero est\u00e1n estrechamente relacionadas con la configuraci\u00f3n del hardware y las capacidades del marco gr\u00e1fico. En este art\u00edculo, [&hellip;]","og_url":"https:\/\/riverdi.com\/es\/blog\/a-guide-to-fundamental-display-operations-on-stm32","og_site_name":"Riverdi","article_publisher":"https:\/\/www.facebook.com\/riverdi.displays\/","article_published_time":"2026-03-16T13:00:51+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":{"Escrito por":"Rafa\u0142 F","Tiempo de lectura":"11 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/riverdi.com\/es\/blog\/a-guide-to-fundamental-display-operations-on-stm32#article","isPartOf":{"@id":"https:\/\/riverdi.com\/es\/blog\/a-guide-to-fundamental-display-operations-on-stm32"},"author":{"name":"Rafa\u0142 F","@id":"https:\/\/riverdi.com\/es#\/schema\/person\/dac328f88dda36bae87261c19a2e30ef"},"headline":"Gu\u00eda de operaciones fundamentales de visualizaci\u00f3n en STM32","datePublished":"2026-03-16T13:00:51+00:00","mainEntityOfPage":{"@id":"https:\/\/riverdi.com\/es\/blog\/a-guide-to-fundamental-display-operations-on-stm32"},"wordCount":1774,"image":{"@id":"https:\/\/riverdi.com\/es\/blog\/a-guide-to-fundamental-display-operations-on-stm32#primaryimage"},"thumbnailUrl":"https:\/\/riverdi.com\/wp-content\/uploads\/2026\/03\/BLOG_COVER_GUIDE_FUNDAMENTAL_GUIDE_STM32.jpg","articleSection":["Pantalla 101"],"inLanguage":"es"},{"@type":"WebPage","@id":"https:\/\/riverdi.com\/es\/blog\/a-guide-to-fundamental-display-operations-on-stm32","url":"https:\/\/riverdi.com\/es\/blog\/a-guide-to-fundamental-display-operations-on-stm32","name":"Gu\u00eda de operaciones fundamentales de visualizaci\u00f3n en STM32 - Riverdi","isPartOf":{"@id":"https:\/\/riverdi.com\/es#website"},"primaryImageOfPage":{"@id":"https:\/\/riverdi.com\/es\/blog\/a-guide-to-fundamental-display-operations-on-stm32#primaryimage"},"image":{"@id":"https:\/\/riverdi.com\/es\/blog\/a-guide-to-fundamental-display-operations-on-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","author":{"@id":"https:\/\/riverdi.com\/es#\/schema\/person\/dac328f88dda36bae87261c19a2e30ef"},"breadcrumb":{"@id":"https:\/\/riverdi.com\/es\/blog\/a-guide-to-fundamental-display-operations-on-stm32#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/riverdi.com\/es\/blog\/a-guide-to-fundamental-display-operations-on-stm32"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/riverdi.com\/es\/blog\/a-guide-to-fundamental-display-operations-on-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\/es\/blog\/a-guide-to-fundamental-display-operations-on-stm32#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Front Page","item":"https:\/\/riverdi.com\/es\/portada"},{"@type":"ListItem","position":2,"name":"Gu\u00eda de operaciones fundamentales de visualizaci\u00f3n en STM32"}]},{"@type":"WebSite","@id":"https:\/\/riverdi.com\/es#website","url":"https:\/\/riverdi.com\/es","name":"Riverdi","description":"Global TFT LCD Manufacturer","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/riverdi.com\/es?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/riverdi.com\/es#\/schema\/person\/dac328f88dda36bae87261c19a2e30ef","name":"Rafa\u0142 F","image":{"@type":"ImageObject","inLanguage":"es","@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\/es\/wp-json\/wp\/v2\/posts\/129707","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/riverdi.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/riverdi.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/riverdi.com\/es\/wp-json\/wp\/v2\/users\/3328"}],"replies":[{"embeddable":true,"href":"https:\/\/riverdi.com\/es\/wp-json\/wp\/v2\/comments?post=129707"}],"version-history":[{"count":0,"href":"https:\/\/riverdi.com\/es\/wp-json\/wp\/v2\/posts\/129707\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/riverdi.com\/es\/wp-json\/wp\/v2\/media\/128925"}],"wp:attachment":[{"href":"https:\/\/riverdi.com\/es\/wp-json\/wp\/v2\/media?parent=129707"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/riverdi.com\/es\/wp-json\/wp\/v2\/categories?post=129707"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/riverdi.com\/es\/wp-json\/wp\/v2\/tags?post=129707"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}