A little about graphics subsystem internals on microcontrollers

Naive optimizations. Reducing memory requirements.

Intermediate buffer. Compiler flags. FPU.

Caches

Intermediate buffer, Playing with DMA.

while (dma_in_progress()) {
}
dma_transfer((uint32_t) fb_info->screen_base,
(uint32_t) fb_buf[fb_buf_idx], (width * height * bpp) / 4);
fb_buf_idx = (fb_buf_idx + 1) % 2;

Double buffering. Work with LTDC.

BSP_LCD_SetTransparency_NoReload(fb_buf_idx, 0xff);
fb_buf_idx = (fb_buf_idx + 1) % 2;
BSP_LCD_SetTransparency(fb_buf_idx, 0x00);

Hardware scene filling with DMA2D.

Vertical Blanking Period (VBLANK).

LCD_CLK (MHz) = total_screen_size * refresh_rate

Running on another board.

Conclusion

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store