STM32F429的LVGL使用LTDC时花屏调试

文章描述了一个使用STM32F429微控制器在800x480分辨率显示屏上运行LVGL图形库时遇到的花屏问题。问题出现在LTDC的缓存刷新过程中,怀疑是由于SDRAM带宽不足导致的FIFO下溢。通过启用LTDC错误中断,确认了这一假设。解决方案是降低LTDC的分频,从4分频改为8分频,从而解决了花屏问题,并确保了足够的帧率。
摘要由CSDN通过智能技术生成

环境

  1. 野火STM32F429挑战者
  2. 5寸 800*480分辨率
  3. HCLK=SYSCLK=180MHz
  4. SDRAM的CLK为90MHz
  5. LVGL使用32位颜色深度
  6. LVGL的缓存配置
    static lv_color_t buf_3_1[MY_DISP_HOR_RES * 480] __attribute__((at(0xD0000000))) ;            /*A screen sized buffer*/
    static lv_color_t buf_3_2[MY_DISP_HOR_RES * 480] __attribute__((at(0xD0177000))) ;            /*Another screen sized buffer*/
    
  7. 开启LVGL的GPU加速
    #define LV_USE_GPU_STM32_DMA2D 1
    #if LV_USE_GPU_STM32_DMA2D
        /*Must be defined to include path of CMSIS header of target processor
        e.g. "stm32f769xx.h" or "stm32f429xx.h"*/
        #define LV_GPU_DMA2D_CMSIS_INCLUDE      "stm32f4xx.h"
        #define STM32F4
    #endif
    
  8. LVGL的显存刷新方式
    disp_flush函数中直接更换LTDC的层地址,并立即刷新

现象

运行时会花屏

调试

  1. disp_flush函数中的更换LTDC缓存区地址前打断点,发现到达断点时,屏幕已经产生一瞬间花屏现象,到达断点停住后画面正常。
  • LVGL的DMA2D功能是正常的,因为程序停住后画面正常,说明数据正常。
  • 怀疑是SDRAM的带宽不够,导致LTDC的FIFO下溢
  1. 使能LTDC的错误中断,在LTDC的下溢中断中打断点,发现其直接进入了断点,怀疑正确

解决方法

SDRAM的频率为最高,主频也最高,只能降低LTDC的分频,将其从4分频修改为8分频,

RCC_PLLSAIConfig(384, 7, 4);
RCC_LTDCCLKDivConfig(RCC_PLLSAIDivR_Div8);

问题解决 LTDC也正常刷新, 使用逻辑分析仪抓取波形后,帧率够用。

drawing
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Berte_Yu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值