环境
- 野火STM32F429挑战者
- 5寸 800*480分辨率
- HCLK=SYSCLK=180MHz
- SDRAM的CLK为90MHz
- LVGL使用32位颜色深度
- 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*/ - 开启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 - LVGL的显存刷新方式
在disp_flush函数中直接更换LTDC的层地址,并立即刷新
现象
运行时会花屏
调试
- 在disp_flush函数中的更换LTDC缓存区地址前打断点,发现到达断点时,屏幕已经产生一瞬间花屏现象,到达断点停住后画面正常。
- LVGL的DMA2D功能是正常的,因为程序停住后画面正常,说明数据正常。
- 怀疑是SDRAM的带宽不够,导致LTDC的FIFO下溢
- 使能LTDC的错误中断,在LTDC的下溢中断中打断点,发现其直接进入了断点,怀疑正确
解决方法
SDRAM的频率为最高,主频也最高,只能降低LTDC的分频,将其从4分频修改为8分频,
RCC_PLLSAIConfig(384, 7, 4);
RCC_LTDCCLKDivConfig(RCC_PLLSAIDivR_Div8);
问题解决 LTDC也正常刷新, 使用逻辑分析仪抓取波形后,帧率够用。
文章描述了一个使用STM32F429微控制器在800x480分辨率显示屏上运行LVGL图形库时遇到的花屏问题。问题出现在LTDC的缓存刷新过程中,怀疑是由于SDRAM带宽不足导致的FIFO下溢。通过启用LTDC错误中断,确认了这一假设。解决方案是降低LTDC的分频,从4分频改为8分频,从而解决了花屏问题,并确保了足够的帧率。

1万+

被折叠的 条评论
为什么被折叠?



