ksk
October 21, 2021, 4:50am
#1
Description
What MCU/Processor/Board and compiler are you using?
STM32F411CE Black Pill + ILI9341 on STM32CubeIDE
What LVGL version are you using?
V 8.0
What do you want to achieve?
Porting successfully
What have you tried so far?
Following porting document and use porting template, compiled without error but halt in lv_disp_drv_register(),
Code to reproduce
printf("Initialize Display \n");
disp_init();
static lv_disp_draw_buf_t draw_buf_dsc_1;
static lv_color_t buf_1[MY_DISP_HOR_RES * 10]; /*A buffer for 10 rows*/
printf("Initialize Buffer\n");
lv_disp_draw_buf_init(&draw_buf_dsc_1, buf_1, NULL, MY_DISP_HOR_RES * MY_DISP_VER_RES/10); /*Initialize the display buffer*/
static lv_disp_drv_t disp_drv; /*Descriptor of a display driver*/
printf("Initialize Display Driver\n");
lv_disp_drv_init(&disp_drv); /*Basic initialization*/
disp_drv.hor_res = MY_DISP_HOR_RES;
disp_drv.ver_res = MY_DISP_VER_RES;
disp_drv.flush_cb = disp_flush;
disp_drv.draw_buf = &draw_buf_dsc_1;
printf("Register Display Driver\n");
lv_disp_drv_register(&disp_drv);
printf("Done.\n");
Screenshot and/or video
If possible, add screenshots and/or videos about the current state.
matt
October 21, 2021, 11:08am
#2
You’re creating your array for the buffer (buf_1) with 10 rows worth of pixels (MY_DISP_HOR_RES * 10), but initialising your display buffer with 1/10th of a display’s worth of pixels (MY_DISP_HOR_RES * MY_DISP_VER_RES/10). This should be changed so that they are both the same value.
ksk
October 22, 2021, 1:53am
#3
Thanks, I changed that array from 10 rows to 1/10 during my trial but not help. I changed it back to 10 rows or vice versa but things still halt.
Patrick
October 22, 2021, 8:55am
#4
Last parameter of lv_disp_draw_buf_init
is the size of the buffer.
Change your code with this line:
lv_disp_draw_buf_init(&draw_buf_dsc_1, buf_1, NULL, MY_DISP_HOR_RES * 10);
ksk
October 23, 2021, 1:37am
#5
Thanks, I have tried both ways. Changed it to HOR_RES10 and to (HOR_RES VER_RES/10). Still no return back from lv_disp_drv_register().
I have looked into the function and tried to cancel some part, the problem may begin since the first line,
lv_disp_t * disp = _lv_ll_ins_head(&LV_GC_ROOT(_lv_disp_ll));
JojoS
October 23, 2021, 7:07am
#6
can this happen when a call to lv_init() is missing?
A problem with wrong display buffer should first rise when the first screen refresh starts.
1 Like
ksk
October 23, 2021, 9:30am
#7
Thanks JojoS, You are right. I did not call lv_init() before entering to porting session. Thank you so much. It is OK now.