本人使用国产的实时操作系统RT-thread,屏幕使用的TFTLCD,屏幕IC是LIL9341
这里就不讲移植了,如果需要,请评论,后面出;
前提:移植好LCD,移植好LVGL(不适用DMA能正常显示)
使用STM32Cubemax配置DMA
上图中,Burst Size的具体配置根据芯片参考手册来选择,如果要用FIFO的话就需要选择
因为LVGL需要屏幕数据传输完后通知一下LVGL,所以这里要启用DMA中断
2、添加代码
2.1、注册DMA中断
/*
*注册的是传输完成中断
*具体注册的中断服务函数在lv_port_disp.c中
*/
HAL_DMA_RegisterCallback(&hdma_memtomem_dma2_stream7, HAL_DMA_XFER_CPLT_CB_ID, LVGL_LCD_FSMC_DMA_pCallback);
2.2、lv_port_disp.c中添加代码
static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p)
{
LCD_Address_Set(area->x1,area->y1,area->x2,area->y2); //<盖函数是设置LCD屏幕的扫描区域
HAL_DMA_Start_IT(&hdma_memtomem_dma2_stream7, (uint32_t)color_p, (uint32_t)&LCD->LCD_RAM,
((area->x2+1) - area->x1) * ((area->y2+1) - area->y1));
}
void LVGL_LCD_FSMC_DMA_pCallback(DMA_HandleTypeDef *_hdma)
{
lv_disp_flush_ready(&disp_drv1);
}
/* 在LCD驱动文件中添加 */
void LCD_Address_Set(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2)
{
LCD_WR_REG(0x2a);//列地址设置
LCD_WR_DATA(x1>>8);
LCD_WR_DATA(x1&0x00ff);
LCD_WR_DATA(x2>>8);
LCD_WR_DATA(x2&0x00ff);
LCD_WR_REG(0x2b);//行地址设置
LCD_WR_DATA(y1>>8);
LCD_WR_DATA(y1&0x00ff);
LCD_WR_DATA(y2>>8);
LCD_WR_DATA(y2&0x00ff);
LCD_WR_REG(0x2c);//储存器写(2C命令之后开始写颜色数据)
}
2.3、void LCD_Address_Set(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2)讲解
2.3.1、列地址设置指令
指令:0X2A
列地址设置指令,在从左到右,从上到下的扫描方式(默认)下面,该指令用于设置横坐标(x 坐标):
在默认扫描方式时,该指令用于设置 x 坐标,该指令带有 4 个参数,实际上是 2 个坐标值:SC 和 EC,即列地址的起始值和结束值,SC 必须小于等于 EC,且 0≤SC/EC≤239。
一般在设置 x 坐标的时候,我们只需要带 2 个参数即可,也就是设置 SC 即可,因为如果 EC 没有变化,我们只需要设置一次即可(在初始化 ILI9341 的时候设置),从而提高速度。
2.3.2、页地址设置指令
指令:0X2B
页地址设置指令,在从左到右,从上到下的扫描方式(默认)下面,该指令用于设置纵坐标(y 坐标):
用于设置 y 坐标,该指令带有 4 个参数,实际上是 2 个坐标值:SP 和 EP,即页地址的起始值和结束值,SP 必须小于等于 EP,且 0≤SP/EP≤319。
一般在设置y 坐标的时候,我们只需要带 2 个参数即可,也就是设置 SP 即可,因为如果 EP 没有变化,我们只需要设置一次即可(在初始化 ILI9341 的时候设置),从而提高速度。
2.3.3、写 GRAM 指令
指令:0X2C
写 GRAM 指令,在发送该指令之后,我们便可以往 LCD的 GRAM 里面写入颜色数据了,该指令支持连续写:
在收到指令 0X2C 之后,数据有效位宽变为 16 位,我们可以连续写入 LCD GRAM 值,而 GRAM 的地址将根据 MY/MX/MV 设置的扫描方向进行自增。
成功!!! 很丝滑!!
开源地址:STM32F407使用DMA加速LVGL: STM32F407使用DMA加速LVGL (gitee.com)文章来源:https://www.toymoban.com/news/detail-822214.html
基于单片指纹考勤系统设计(项目中还是有很多BUG,不够完善):基于单片机的指纹考勤系统设计-RT-Thread-LVGL: 基于单片机得指纹考勤系统 (gitee.com)文章来源地址https://www.toymoban.com/news/detail-822214.html
到了这里,关于STM32F407使用DMA加速刷新LVGL的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!