Description
What MCU/Processor/Board and compiler are you using?
STM32F103RCT6
What do you want to achieve?
initialize my TFT LCD (128*160, rgb565) & connect LCD driver (st7735) with LVGL
What have you tried so far?
I made the initialization code, but doesn’t work
I think I’ve done my job.
while debugging, hard fault error occurred.
when Digging it, I guess the error occurs in lv_disp_drv_register(&disp_drv), and static void remove_free_block in lv_tlsf.c.
please help me
Code to reproduce
Add the relevant code snippets here.
The code block(s) should be between ```c
and ```
tags:
// in main.c, I run my other performance in App_Start() func.
App_Start();
while(1)
{
HAL_Delay(10);
lv_tick_inc(10);
lv_task_handler();
}
// App_Start() func. initialize lcd
void App_Start(void)
{
// initialize
lv_init();
lv_config_main();
}
void lv_config_main(void)
{
static lv_disp_draw_buf_t disp_buf;
static lv_color_t buf_1[LV_HOR_RES_MAX * 10];
//static lv_color_t buf_2[LV_HOR_RES_MAX * 10];
lv_disp_draw_buf_init(&disp_buf, buf_1, NULL, LV_HOR_RES_MAX * 10);
lv_disp_drv_t disp_drv;
lv_disp_drv_init(&disp_drv);
disp_drv.draw_buf = &disp_buf;
disp_drv.flush_cb = LCD_flush;
lv_disp_drv_register(&disp_drv);
}
// lcd flush func and for connection lcd driver and lvgl
// DEV_Digital_Write() sets/resets I/O pins
#define DEV_Digital_Write(_pin, _value) HAL_GPIO_WritePin(_pin, _value == 0? GPIO_PIN_RESET:GPIO_PIN_SET)
void LCD_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * color_map)
{
int32_t x, y;
for(y = area->y1; y <= area->y2; y++) {
for(x = area->x1; x <= area->x2; x++) {
LCD_ClearWindow((uint16_t)area->x1, (uint16_t)area->y1, (uint16_t)area->x2, (uint16_t)area->y2, (void*)color_map);
}
}
lv_disp_flush_ready(drv);
DEV_Digital_Write(DEV_CS_PIN, 1);
}
void LCD_ClearWindow(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend,UWORD color)
{
UWORD i,j;
LCD_SetWindow(Xstart, Ystart, Xend-1,Yend-1);
for(i = Ystart; i <= Yend-1; i++){
for(j = Xstart; j <= Xend-1; j++){
LCD_WriteData_Word(color);
}
}
}
void LCD_SetWindow(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend)
{
// column addresses
LCD_Write_Command(0x2a);
LCD_WriteData_Byte(Xstart >> 8);
LCD_WriteData_Byte(Xstart);
LCD_WriteData_Byte(Xend >> 8);
LCD_WriteData_Byte(Xend );
// page addresses
LCD_Write_Command(0x2b);
LCD_WriteData_Byte(Ystart >> 8);
LCD_WriteData_Byte(Ystart);
LCD_WriteData_Byte(Yend >> 8);
LCD_WriteData_Byte(Yend);
// memory write
LCD_Write_Command(0x2C);
}
static void LCD_Write_Command(UBYTE data)
{
DEV_Digital_Write(DEV_CS_PIN, 0);
DEV_Digital_Write(DEV_DC_PIN, 0);
DEV_SPI_WRITE(data);
}
static void LCD_WriteData_Byte(UBYTE data)
{
DEV_Digital_Write(DEV_CS_PIN, 0);
DEV_Digital_Write(DEV_DC_PIN, 1);
DEV_SPI_WRITE(data);
DEV_Digital_Write(DEV_CS_PIN,1);
}