LVGL填充函数
1.填充函数传入的颜色指针需要递增,如果不使用spi的dma传输函数,那么color需要手动+1;2.传入lcd驱动的位置范围要正确,否则图形会出现有规律的歪斜。3.填充颜色的数据数量要对,否则会出现规律的未上色区域。spi+dma连续传输(速度较快)
·
lvgl填充函数的位置:
static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p)
{
LCD_Color_Fill(area->x1,area->y1,area->x2,area->y2,(u16*)color_p);
lv_disp_flush_ready(disp_drv);
}
填充函数的具体内容
spi+dma连续传输(速度较快)
void LCD_Color_Fill(u16 xsta,u16 ysta,u16 xend,u16 yend,u16 *color_p)
{
u16 i,j,width,height;
width = xend-xsta+1;
height = yend-ysta+1;
uint32_t size = width * height;
ST7789V_SetLcdAddress(xsta,ysta,xend,yend,USE_HORIZONTAL);
hspi1.Init.DataSize = SPI_DATASIZE_16BIT;
hspi1.Instance->CR1|=SPI_CR1_DFF;
HAL_SPI_Transmit_DMA(&hspi1,(uint8_t*)color_p,size);
while(__HAL_DMA_GET_COUNTER(&hdma_spi1_tx)!=0);
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Instance->CR1&=~SPI_CR1_DFF;
}
spi间隔传输
void LCD_Fill(u16 xsta,u16 ysta,u16 xend,u16 yend,u16 *color,uint8_t increasing)
{
u16 i,j;
ST7789V_SetLcdAddress(xsta,ysta,xend,yend,USE_HORIZONTAL);//设置显示范围
for(i=ysta;i<=yend;i++)
{
for(j=xsta;j<=xend;j++)
{
ST7789V_SPISendData2Bytes(*color);
if(increasing == 1){color++;}
}
}
}
注意:
1.填充函数传入的颜色指针需要递增,如果不使用spi的dma传输函数,那么color需要手动+1;
void LCD_Fill(u16 xsta,u16 ysta,u16 xend,u16 yend,u16 *color,uint8_t increasing)
{
u16 i,j;
ST7789V_SetLcdAddress(xsta,ysta,xend,yend,USE_HORIZONTAL);//设置显示范围
for(i=ysta;i<=yend;i++)
{
for(j=xsta;j<=xend;j++)
{
ST7789V_SPISendData2Bytes(*color);
if(increasing == 1){color++;}
}
}
}
2.传入lcd驱动的位置范围要正确,否则图形会出现有规律的歪斜
ST7789V_SetLcdAddress(xsta,ysta,xend,yend,USE_HORIZONTAL);//设置显示范围
3.填充颜色的数据数量要对,否则会出现规律的未上色区域
HAL_SPI_Transmit_DMA(&hspi1,(uint8_t*)color_p,size);
for(i=ysta;i<=yend;i++)
{
for(j=xsta;j<=xend;j++)
{
ST7789V_SPISendData2Bytes(*color);
if(increasing == 1){color++;}
}
}
更多推荐



所有评论(0)