Description
I’m currently developing a battery-powered, cost-sensitive device that uses a 480x320 TFT display driven by an STM32U575 MCU. Unlike more powerful STM32F7/H5/U5G9 MCUs commonly used with LVGL, the STM32U575 does not have an integrated LTDC peripheral.
To address this, I initially used the FMC interface to drive the display. At first, the implementation was straightforward: writing pixel data in a for()
loop. However, this method was very slow, and screen updates were visibly noticeable.
To optimize performance, I transitioned to using DMA transfers, which significantly improved display update speeds. Recently, I’ve integrated DMA2D, allowing the entire display buffer to be updated in a single operation. The visual update speed is now excellent, as the display refreshes faster than the human eye can perceive.
Current Issue: Despite the significant improvements, animations (particularly scrolling animations) still appear choppy and are not as fluent as desired.
Hardware and Compiler Details
- MCU: STM32U575VGT6Q
- Compiler: GNU++17
- Clock Speed: 100 MHz
Goal
I would like to achieve smoother, more fluid animations, especially for scrolling.
Efforts Made So Far
- Implemented partial buffering to reduce memory usage and enhance performance.
- Optimized hardware paths (FMC, DMA, DMA2D integration) to maximize transfer speed.
- Confirmed efficient utilization of DMA2D for complete screen buffer transfers.
Questions
- Are there recommended LVGL configuration settings specifically tailored for MCUs without an LTDC peripheral?
- Could additional DMA2D optimizations further improve animation fluency?
- Are there known software or hardware techniques to smooth animations further on resource-limited MCUs?
- Could I further optimize my buffer management (e.g., double buffering or smaller partial buffers)?
- Would adjusting the LVGL refresh rate or tick rate help improve animation smoothness?
- Are there specific compiler or code-level optimizations known to enhance LVGL animation performance?
- Can interrupt priorities or DMA channel management further enhance responsiveness and fluidity?
Any suggestions or experiences from the community would be greatly appreciated!