XR806开发板进行ST7789LCD屏幕测试步骤

描述

XR806开发板ST7789LCD屏幕测试

1

屏幕硬件

连接

本文使用的LCD屏幕的原理图如下,可以确定LCD屏幕的控制引脚接线。

LCD屏

XR806与LCD屏幕的控制引脚分布如下

LCD屏

实际的连接效果如图所示

LCD屏

 

2

驱动编写

ST7789的驱动使用中景园的LCD驱动库,驱动文件包括:

lcd.c

lcd.h

lcd_init.c

lcd_init.h

lcd_font.h

在XR806的示例程序中GPIO工程的基础上进行移植。在gpio示例文件夹中添加lcd的驱动代码。

LCD屏

移植时要实现对LCD引脚的控制,在lcd_init.h中添加以下代码

 

#include "driver/chip/hal_gpio.h"
#include "kernel/os/os.h"


#define LCD_SCLK_Clr() HAL_GPIO_WritePin(GPIO_PORT_B, GPIO_PIN_7, GPIO_PIN_LOW)
#define LCD_SCLK_Set() HAL_GPIO_WritePin(GPIO_PORT_B, GPIO_PIN_7, GPIO_PIN_HIGH)


#define LCD_MOSI_Clr() HAL_GPIO_WritePin(GPIO_PORT_B, GPIO_PIN_4, GPIO_PIN_LOW)
#define LCD_MOSI_Set() HAL_GPIO_WritePin(GPIO_PORT_B, GPIO_PIN_4, GPIO_PIN_HIGH)


#define LCD_RES_Clr() HAL_GPIO_WritePin(GPIO_PORT_B, GPIO_PIN_5, GPIO_PIN_LOW)
#define LCD_RES_Set() HAL_GPIO_WritePin(GPIO_PORT_B, GPIO_PIN_5, GPIO_PIN_HIGH)


#define LCD_DC_Clr() HAL_GPIO_WritePin(GPIO_PORT_B, GPIO_PIN_3, GPIO_PIN_LOW)
#define LCD_DC_Set() HAL_GPIO_WritePin(GPIO_PORT_B, GPIO_PIN_3, GPIO_PIN_HIGH)


#define LCD_CS_Clr() HAL_GPIO_WritePin(GPIO_PORT_B, GPIO_PIN_6, GPIO_PIN_LOW)
#define LCD_CS_Set() HAL_GPIO_WritePin(GPIO_PORT_B, GPIO_PIN_6, GPIO_PIN_HIGH)
//硬件上没有给出控制接口,这里不做定义
#define LCD_BLK_Clr()
#define LCD_BLK_Set()

 

在lcd_init.c中添加引脚的初始化函数,并替换延时函数为OS_MSleep,相关的代码如下:

 

#include "lcd_init.h"


void LCD_GPIO_Init(void)
{
  GPIO_InitParam param;
  param.driving = GPIO_DRIVING_LEVEL_1;
  param.mode = GPIOx_Pn_F1_OUTPUT;
  param.pull = GPIO_PULL_NONE;
  HAL_GPIO_Init(GPIO_PORT_B, GPIO_PIN_3, ¶m);
  HAL_GPIO_Init(GPIO_PORT_B, GPIO_PIN_4, ¶m);
  HAL_GPIO_Init(GPIO_PORT_B, GPIO_PIN_5, ¶m);
  HAL_GPIO_Init(GPIO_PORT_B, GPIO_PIN_6, ¶m);
  HAL_GPIO_Init(GPIO_PORT_B, GPIO_PIN_7, ¶m);
}


void LCD_Init(void)
{
  LCD_GPIO_Init();


  LCD_RES_Clr(); 
  OS_MSleep(100);//替换延时函数
  LCD_RES_Set();
  OS_MSleep(100);
    
    //以下代码忽略
}

 

在main.c中添加以下代码

 

int main(void)
{


  LCD_Init();


  OS_MSleep(100);


  LCD_Fill(0, 0, LCD_W, LCD_H, RED);
  // LCD_ShowString(4, 0, "XR806 LCD Test", RED, CYAN, 16, 0);
  LCD_DrawRectangle(0, 0, LCD_W - 1, LCD_H - 1, MAGENTA);
  LCD_DrawRectangle(1, 1, LCD_W - 2, LCD_H - 2, MAGENTA);
  while (1)
  {
    OS_MSleep(1000);
    LCD_Fill(0, 0, LCD_W, LCD_H, BLUE);
    OS_MSleep(1000);
    LCD_Fill(0, 0, LCD_W, LCD_H, GREEN);
    OS_MSleep(1000);
    LCD_Fill(0, 0, LCD_W, LCD_H, YELLOW);
    OS_MSleep(1000);
    LCD_Fill(0, 0, LCD_W, LCD_H, LIGHTGREEN);
    printf("XR806 LCD Test
");
  }


  return 0;
}

 

 

3

屏幕驱动

效果

编译下载后,可以看到屏幕的颜色切换以及串口的数据输出

LCD屏

LCD屏








审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分