Skip to main content
Associate II
February 23, 2025
Solved

How to control the LCD backlight in Touchgfx on STM32H747I DISCO board

  • February 23, 2025
  • 4 replies
  • 1396 views

Hi all

          I am using stm32H747I-disco board .Can anyone please help with the example to control the brightness of the display

 

 

Thank you.

Best answer by mƎALLEm

It seem that the Backlight is controlled over CABC signal by default. You don't need to modify anything on the  board. It seems the backlight is controlled by the LCD controller itself.

I tested the control of the backlight using void LCD_SetBrightness(int value) declared in TouchGFXHAL.cpp.

For example in Model.cpp:

#include <gui/model/Model.hpp>
#include <gui/model/ModelListener.hpp>

extern "C" {
void LCD_SetBrightness(int value);
}

Model::Model() : modelListener(0)
{

}
volatile int i;
void Model::tick()
{
	LCD_SetBrightness(i/60);
	i++;
	if(i>6000) i = 0;
}

This changes the backlight progressively.

Hope that helps.

4 replies

Associate III
February 24, 2025

Back light is controled by CABC pin , however this pin did not connect to mcu, so it can't be control.

Kenwang_0-1740382758872.png

 

mƎALLEm
Technical Moderator
February 24, 2025

Hello,

See also this thread.

"To give better visibility on the answered topics, please click on ""Accept as Solution"" on the reply which solved your issue or answered your question."
Associate III
February 24, 2025

"R4" is marked "N/A", does it mean that the R4 resistor is not installed, so the backlight is controlled by CABC instead of BL_CTRL?

mƎALLEm
Technical Moderator
February 24, 2025

N/A means Not Applicable: not soldered by default.

"so the backlight is controlled by CABC instead of BL_CTRL?" 

-> Most probably yes.

 

"To give better visibility on the answered topics, please click on ""Accept as Solution"" on the reply which solved your issue or answered your question."
rahulz916Author
Associate II
February 24, 2025

Thanks for confirming.

But to control brightness of the screen I found an example but it does not have interaction with hardware.

I found the  this function in touchgfxhal.cpp

void LCD_SetBrightness(int value)
    {
        HAL_DSI_ShortWrite(&hdsi,
                           0, DSI_DCS_SHORT_PKT_WRITE_P1,
                           OTM8009A_CMD_WRDISBV, (uint16_t)(value * 255) / 100);
    }
 
Please tell me how to integrate this code
mƎALLEm
Technical Moderator
February 24, 2025

In the view, try that:

 

extern "C" {
void LCD_SetBrightness(int value);
}

/* Set the brightnessto 100% at the screen startup */
void Screen1View::setupScreen()
{
 Screen1ViewBase::setupScreen();
 LCD_SetBrightness(100);
}
"To give better visibility on the answered topics, please click on ""Accept as Solution"" on the reply which solved your issue or answered your question."
Associate III
February 25, 2025

I haven’t actually implemented the backlight adjustment function myself. I only spent some time working with TouchGFX on this MCU, so if I make any mistakes, please feel free to correct me.

https://youtu.be/pQOMrdUP6-g

From the schematic, the screen backlight is controlled by the STLD40DPUR chip. According to its datasheet, the backlight brightness should be adjusted using a PWM signal. However, the PJ12 pin does not support PWM functionality. If R4 is populated, it should be possible to control the backlight using this method.

As for the sample code you mentioned, it includes a backlight adjustment function because TouchGFX sample codes support multiple development boards, and STM32H747-DISCO is just one of them. This particular code is likely not applicable to this board.

mƎALLEm
mƎALLEmBest answer
Technical Moderator
February 25, 2025

It seem that the Backlight is controlled over CABC signal by default. You don't need to modify anything on the  board. It seems the backlight is controlled by the LCD controller itself.

I tested the control of the backlight using void LCD_SetBrightness(int value) declared in TouchGFXHAL.cpp.

For example in Model.cpp:

#include <gui/model/Model.hpp>
#include <gui/model/ModelListener.hpp>

extern "C" {
void LCD_SetBrightness(int value);
}

Model::Model() : modelListener(0)
{

}
volatile int i;
void Model::tick()
{
	LCD_SetBrightness(i/60);
	i++;
	if(i>6000) i = 0;
}

This changes the backlight progressively.

Hope that helps.

"To give better visibility on the answered topics, please click on ""Accept as Solution"" on the reply which solved your issue or answered your question."