STM32 F429 LittleVGL 使用DMA2D 加速(阻塞式)

STM32 F429 LittleVGL 使用DMA2D 加速(阻塞式)

发现最近随便转载的很多啊,未经授权禁止转载!抄袭!!否则转载者死全家!!另外这是我的笔记,不是教程,难免会有错误,不具有很高的参考性,望周知。

步骤

在ltdc.c文件中添加使用DMA2D画点的函数(先在STM32CubeMX中启用DMA2D)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
void LTDC_DMA2D_Fill_Color(uint16_t start_x, uint16_t start_y, uint16_t end_x, uint16_t end_y, uint16_t *color)
{

#define LTDC_FRAMEBUF_ADDR 0xc0000000; //显存基地址
#define TFT_WEIGHT 800 //屏幕宽
#define TFT_WIDTH 480 //屏幕高

DMA2D_InitTypeDef DMA2D_InitStruct;

uint32_t Xaddress = 0; //显存填充地址
uint32_t timeout=0; //超时
uint16_t OutputOffset; //地址偏移
uint16_t NumberOfLine; //填充行数
uint16_t PixelPerLine; //每行像素

Xaddress = 0xc0000000 + 2* (800 * start_y + start_x); //计算填充显存地址
OutputOffset = 800-(end_x-start_x+1); //计算偏移地址
NumberOfLine = end_x-start_x+1; //计算填充行数
PixelPerLine = end_y-start_y+1; //计算每行像素

/* 配置 DMA2D */
DMA2D->CR&=~(DMA2D_CR_START); //先停止DMA2D
DMA2D->CR=DMA2D_M2M; //存储器到存储器模式
DMA2D->FGPFCCR=DMA2D_RGB565; //设置颜色格式
DMA2D->FGOR=0; //前景层行偏移为0
DMA2D->OOR=OutputOffset; //设置行偏移

DMA2D->FGMAR=(uint32_t)color; //源地址
DMA2D->OMAR=Xaddress; //输出存储器地址
DMA2D->NLR=(PixelPerLine)|(NumberOfLine<<16); //设定行数寄存器
DMA2D->CR|=DMA2D_CR_START; //启动DMA2D

while((DMA2D->ISR&(DMA2D_FLAG_TC))==0) //等待传输完成
{
timeout++;
if(timeout>0X1FFFFF)break; //超时退出
}
DMA2D->IFCR|=DMA2D_FLAG_TC; //清除传输完成标志

}

修改LittleVGL显示接口,在lv_port_disp.c文件中:

1
2
3
4
5
6
7
8
9
10
static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p)
{
/*The most simple case (but also the slowest) to put all pixels to the screen one-by-one*/

LTDC_DMA2D_Fill_Color(area->x1, area->y1, area->x2, area->y2, (uint16_t*)color_p);

/*IMPORTANT!!!
*Inform the graphics library that you are ready with the flushing*/
lv_disp_flush_ready(disp_drv);
}

编译下载测试,FPS还是33,但是全屏刷新从原来的5 FPS提高到了10FPS,肉眼可见的提升。

参考资料

[1] stm32 DMA2D使用中断LVGL,提高LVGL帧率_紫枫洛天的博客-CSDN博客_lvgl优化

[2] 分享一个littlevgl的基本demo,通过dma进行绘制,提高了速度 - STM32F429 - 硬汉嵌入式论坛 - Powered by Discuz! (armbbs.cn)

坚持原创技术分享,您的支持是我前进的动力!