发新帖

[原创] 【STM32F723E-DISCO开发板试用体验】+ 一起学习ST7789H2液晶驱动

[复制链接]
发表于 2017-12-18 22:11:59
| 855 查看 | 0 回复
    STM32F723E-DISCO使用的TFT-LCD驱动芯片是ST7789H2。支持262K色,并且可以使用8位,9位,16位以及18位宽的并行接口。其内部有240*320*8bit的RAM空间。下面是他的数据手册,大体上解析一下,然后开始测试。    ST7789H2 TFT-LCD 驱动芯片手册:


    基本概述
   

    下图为ST7789H2的引脚功能
   

    根据STM32F723E-DISCO使用手册中的原理图得知,此板卡使用的是16bit数据接口
   

    16位宽数据,其数据格式是 R-5 G-6 B-5。
   

    下图是操作时序图,截错图了,这个手册300多页,懒得找了,我只大体浏览了不到100页。
    凑活着看一下,通讯的时候首先拉低片选CS,然后数据命令选择端,然后读写控制,接着发送数据。
   

    看看更详细的时序图,数据在写的上升沿锁存。
   

    最后看一下16位宽数据格式,其数据格式为RGB565,分两个字节存储,顺序是从高位到低位R-G-B。
     

   
    初始化ST7789H2
   
  1. uint8_t BSP_LCD_InitEx(uint32_t orientation)
  2. {
  3.   uint8_t ret = LCD_ERROR;
  4.   
  5.   /* Default value for draw propriety */
  6.   DrawProp.BackColor = 0xFFFF;
  7.   DrawProp.pFont     = &Font24;
  8.   DrawProp.TextColor = 0x0000;
  9.   
  10.   /* Initialize LCD special pins GPIOs */
  11.   BSP_LCD_MspInit();
  12.   
  13.   /* Backlight control signal assertion */
  14.   HAL_GPIO_WritePin(LCD_BL_CTRL_GPIO_PORT, LCD_BL_CTRL_PIN, GPIO_PIN_SET);
  15.   
  16.   /* Apply hardware reset according to procedure indicated in FRD154BP2901 documentation */
  17.   HAL_GPIO_WritePin(LCD_RESET_GPIO_PORT, LCD_RESET_PIN, GPIO_PIN_RESET);
  18.   HAL_Delay(5);   /* Reset signal asserted during 5ms  */
  19.   HAL_GPIO_WritePin(LCD_RESET_GPIO_PORT, LCD_RESET_PIN, GPIO_PIN_SET);
  20.   HAL_Delay(10);  /* Reset signal released during 10ms */
  21.   HAL_GPIO_WritePin(LCD_RESET_GPIO_PORT, LCD_RESET_PIN, GPIO_PIN_RESET);
  22.   HAL_Delay(20);  /* Reset signal asserted during 20ms */
  23.   HAL_GPIO_WritePin(LCD_RESET_GPIO_PORT, LCD_RESET_PIN, GPIO_PIN_SET);
  24.   HAL_Delay(10);  /* Reset signal released during 10ms */

  25.   if(ST7789H2_drv.ReadID() == ST7789H2_ID)
  26.   {   
  27.     LcdDrv = &ST7789H2_drv;
  28.    
  29.     /* LCD Init */   
  30.     LcdDrv->Init();
  31.    
  32.     if(orientation == LCD_ORIENTATION_PORTRAIT)
  33.     {
  34.       ST7789H2_SetOrientation(LCD_ORIENTATION_PORTRAIT);
  35.     }
  36.     else if(orientation == LCD_ORIENTATION_LANDSCAPE_ROT180)
  37.     {
  38.       ST7789H2_SetOrientation(LCD_ORIENTATION_LANDSCAPE_ROT180);
  39.     }
  40.     else
  41.     {
  42.       /* Default landscape orientation is selected */
  43.     }
  44.     /* Initialize the font */
  45.     BSP_LCD_SetFont(&LCD_DEFAULT_FONT);
  46.    
  47.     ret = LCD_OK;   
  48.   }
  49.   
  50.   return ret;
  51. }
复制代码

    把图片转换成16bit RGB565格式数据
   

    主程序
   
  1. int main(void)
  2. {
  3.   MPU_ConfigPSRAM();
  4.   CPU_CACHE_Enable();
  5.   HAL_Init();
  6.   SystemClock_Config();
  7.   BSP_LED_Init(LED5);
  8.   BSP_LCD_Init();
  9.   BSP_LCD_Clear(LCD_COLOR_WHITE);
  10.   
  11.   BSP_LCD_DrawRGBImage(0, 0, 240, 240, gImage_tusiji);
  12.   while(1)
  13.   {
  14.   }
  15. }
复制代码



    显示结果
   


    我明明显示的是手拿风车,躺在青青草地上的兔斯基啊。。。。。。之前板子一直放在背包里,肯定没看摔过或者挤压过,即使摔到,也有保护壳的啊。这是屏幕坏了?还是驱动芯片坏了?我试过官方DEMO也是这样。手指按压屏幕会看到少量线条变色。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

评分

参与人数 1 +1 收起 理由
Sourcelink + 1

查看全部评分

我要点赞 1

举报

您需要登录后才可以回帖 登录 | 立即注册