当前位置: 首页 > wzjs >正文

网站 模板 下载石家庄建筑工程造价信息网

网站 模板 下载,石家庄建筑工程造价信息网,淘宝优惠网站如何做,音乐类网站页面设计特点LVGL刷新率优化及其他设置 前言disp_flush函数二、其他设置 前言 实验硬件:STM32F407ZGT6;2.4寸TFT-LCD模块(ILI9341驱动芯片、XTP2046触摸芯片)   本文目标:lvgl的刷新率优化,解决拉帘子问题   注意&a…

LVGL刷新率优化及其他设置

  • 前言
  • disp_flush函数
  • 二、其他设置

前言

  实验硬件:STM32F407ZGT6;2.4寸TFT-LCD模块(ILI9341驱动芯片、XTP2046触摸芯片)
  本文目标:lvgl的刷新率优化,解决拉帘子问题
  注意:本文在LVGL显示触摸代码移植完成的基础上进行,第一次使用lvgl可根据前文一步步移植,点击下方传送门查看相关文章
  传送门:
      STM32F4驱动ILI9341的TFT-LCD触摸屏(HAL库)(一)
      STM32F4驱动ILI9341的TFT-LCD触摸屏(HAL库)(二)
      [LVGL] 显示代码移植 基于STM32F4
      [LVGL] 触摸代码移植 基于STM32F4
  软件:Keil、CubeMX
  完整项目在文章末尾github链接中

disp_flush函数

  在前文 “[LVGL] 显示代码移植 基于STM32F4”中,我们已经完成了LVGL在STM32F407ZGT6平台上的基本显示驱动移植,实现了LVGL界面在2.4寸TFT-LCD(ILI9341驱动)上的正常显示。移植完成后,虽然能够正常显示各种控件和界面,但在实际使用过程中会遇到“拉帘子”现象。
  造成这种现象的原因与lv_port_disp.c下的disp_flush函数的实现方式相关。disp_flush作为LVGL与底层LCD硬件之间的桥梁,负责将LVGL渲染好的像素数据刷新到物理屏幕上,如果该函数不够高效,或者数据传输方式不合理,就会导致刷新速率低、显示不流畅等问题。
在这里插入图片描述
  为了解决“拉帘子”现象,我们需要对disp_flush函数的实现方式进行优化。原先的做法是通过打点函数逐点刷新屏幕,每次刷新都需要一个像素一个像素地传输数据到LCD,这种方式效率较低,导致界面刷新时出现明显的拖影和撕裂,我们要实现一个区域填充函数,该函数的作用,是设置好LCD的窗口区域后通过DMA批量传输像素数据到LCD,该函数核心代码如下:

void LCD_FillBlock(uint16_t xsta, uint16_t ysta, uint16_t xend, uint16_t yend, uint16_t *color)
{uint16_t height, width;uint32_t byte_sum;        // 总字节数width = xend - xsta + 1;    // 计算填充的宽度height = yend - ysta + 1;   // 计算填充的高度byte_sum = width * height * 2; // 每个像素两个字节LCD_SetWindow(xsta, ysta, xend, yend); // 设置LCD的填充区域LCD_DC_Set(); // 写数据LCD_CS_Clr();// 循环发送数据直到填充完整个区域while (byte_sum > 0) {uint32_t bytes_to_send = (byte_sum > LCD_BUF_SIZE) ? LCD_BUF_SIZE : byte_sum;// 填充 DMA 缓冲区for (uint32_t i = 0; i < bytes_to_send; i += 2) {uint8_t high_byte = *color >> 8;        // 高8位颜色uint8_t low_byte =  *color & 0xFF;      // 低8位颜色lcd_buf[i] = high_byte;lcd_buf[i + 1] = low_byte;color ++;}// 开始 DMA 传输// 等待之前的DMA传输完成while(HAL_DMA_GetState(&hdma_spi1_tx) != HAL_DMA_STATE_READY);// 使用DMA发送数据HAL_SPI_Transmit_DMA(&hspi1, lcd_buf, bytes_to_send);// 等待传输完成while(HAL_DMA_GetState(&hdma_spi1_tx) != HAL_DMA_STATE_READY);// 更新剩余字节数byte_sum -= bytes_to_send;}LCD_CS_Set();
}

  之后将disp_flush函数的实现替换为我们的区域填充函数,编译后重新烧录拉帘子问题就解决了。
在这里插入图片描述

二、其他设置

  lv_port_disp_init()下的缓冲区也可以尝试一下其他两种缓冲方式是否能提高帧率,不同平台,帧率表现可能不太一样。
在这里插入图片描述
  此外,lv_conf.h下的宏定义LV_DISP_DEF_REER_PERIOD是 LVGL的一个显示刷新周期参数,单位是毫秒,表示每隔x毫秒刷新一次屏幕,该函数决定了你屏幕帧率的上限,如果设置为30ms,意味着LVGL每30毫秒会触发一次刷新操作,推荐设置为15-20提升lvgl帧率。
在这里插入图片描述
  lv_conf.h下的宏定义LV_USE_PERF_MONITOR是lvgl的性能监视器,设置为1时,LVGL会在屏幕上右下角显示CPU使用率以及帧率。
  LV_USE_MEM_MONITOR是内存监视器, 设置为1时,屏幕上会显示已用内存及内存碎片率,两者都可以通过宏定义设置显示位置,方便开发者在不同阶段进行系统性能和资源的可视化监控。
在这里插入图片描述
  另外如果使用并行总线如LTDC、FSMC等协议(而不是那种串行的串口屏、spi屏)屏幕刷新率会有进一步的提升。
  以上为我在使用lvgl时遇到的帧率提升的基本方法,由于个人经验和项目环境有限,文中方法和理解可能存在不全面或不准确之处,欢迎批评指正、补充交流。

http://www.dtcms.com/wzjs/611285.html

相关文章:

  • pc网站开发语言08r2 搭建php网站
  • 阿里云oss做网站备份泉州网站建设方案外包
  • 企业网站百度指数多少算竞争大win10最强优化软件
  • 怎么做网站免费优化北京seo推广优化
  • 温州微网站公司给非吸公司建设网站
  • php网站开发班国外做SEO网站
  • 北京怀柔做网站管理运营的公司网页美工设计流程的正确排序
  • 国家对于学校网站建设网站首页 选择入口 设计
  • 网站外链是友情连接吗网站支付宝网上支付功能怎么做
  • 火车票网站建设多少钱做网站 花园路国贸
  • 如何做网站毕业设计怎么做网站推广世界杯
  • 旌阳移动网站建设天津网站运营
  • 初级网站建设做技术分享网站 盈利
  • 在线网站生成器Wordpress导出成word
  • 网站开发系统设计怎么写注册微信小程序流程
  • 向自己做网站网站备案没有了
  • 响应式网站设计的主页网站前台设计教程
  • 网站中医建设wordpress多级索引
  • 网站建设赚钱黄石本土做网站的公司
  • 网站专业优化公司萧县做网站的公司
  • 北京西站列车时刻表最新直通车推广怎么收费
  • 网站代建设费用丹阳市房产信息网
  • 网站项目建设背景科技官网
  • 个人网站备案内容写什么黑龙江省建设银行官网站首页
  • 兰州网站搜索引擎优化服务网站欣赏
  • 冀州网站建设价格电子商务网站成功的关键是
  • 网站没内容 可以备案么做网站开票是多少个点的票
  • 做网站的工作怎么样建网站 pdf
  • 网站建设网站建设 网站制作嘉兴市建设街道网站
  • 服务器放多个网站松原建设局网站