STM32F469有个分辨率很高的4寸屏幕,无论显示图片还是字体都很清晰细腻,下面的测试就模仿大家经常见到的“弹幕”效果进行测试。:lol
板载的LCD是使用MIPI接口(DSI)来实现的,配合LTDC和DMA2D使用更加功能强大。LCD驱动部分总的结构框图如下:
DSI接口配置较为复杂,还好的是ST给出了参考的配置过程,分别初始化SDRAM,DSI,LTDC这些接口即可,使用时直接写SDRAM用来更新显示。除此之外也可以使用CubeMX配置更加简单方便。
主要的LCD初始化代码如下:
然后实现一个简单的字符串滚动函数:
- unsigned int Colorbuff[] = {LCD_COLOR_BLUE,LCD_COLOR_GREEN,LCD_COLOR_RED,LCD_COLOR_CYAN,\
- LCD_COLOR_MAGENTA,LCD_COLOR_YELLOW,LCD_COLOR_LIGHTBLUE,LCD_COLOR_DARKBLUE,LCD_COLOR_ORANGE,\
- LCD_COLOR_ORANGE,LCD_COLOR_WHITE,LCD_COLOR_RED,LCD_COLOR_BLUE,LCD_COLOR_GREEN};
- //滚动显示一个字符串
- void BSP_LCD_SlideShow(uint16_t x,uint16_t y,uint16_t num)
- {
- BSP_LCD_ShowStr(x,y,LCD_COLOR_BLACK,LCD_COLOR_BLACK,TextBuff[num],0);
- BSP_LCD_ShowStr(x+1,y,Colorbuff[num],LCD_COLOR_BLACK,TextBuff[num],0);
- }
最后就是在main函数中来滚动显示想要显示的字符串了:
- int main(void)
- {
- uint8_t LedSta = LED_ON;
- uint16_t x0,t;
- HAL_Init();
- SystemClock_Config();
- LED_Init();
- BSP_LCD_Init();
- BSP_LCD_Layer();
- while(1)
- {
- for(x0 = 0;x0 < 800;x0++)
- {
- for(t = 0;t < 14;t++)
- {
- BSP_LCD_SlideShow(x0,10 + 30*t,t);
- }
- GREEN_STA(LedSta);ORANGE_STA(LedSta);RED_STA(LedSta);BLUE_STA(LedSta);
- LedSta = !LedSta;
- }
- }
- }
效果大概如下:
总体来说显示滚动还很流畅,但是可能是优化不是很好,有的字符串有轻微的闪烁。通过简单的“弹幕”测试,可以发现虽然整个LCD显示配置过程比较复杂,但是一旦配置就可以较为简单的使用,而且显示效果也较为理想。
|