xr806开发板可以干嘛 (XR806开发板进行ST7789LCD屏幕测试步骤)

XR806开发板ST7789LCD屏幕测试

屏幕硬件

连接

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

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

实际的连接效果如图所示

驱动编写

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

lcd_init.c

lcd_init.h

lcd_font.h

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

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

#include "driver/chip/hal_gpio.h"
#include "kernel/os/os.h"#define LCD_SCLK_Clr() HAL_GPIO_Wrin(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__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_InitPa 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;
}

屏幕驱动

效果

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

审核编辑:刘清

© 版权声明
评论 抢沙发
加载中~
每日一言
不怕万人阻挡,只怕自己投降
Not afraid of people blocking, I'm afraid their surrender