打印
[技术讨论]

全志XR806开发板使用ST7789LCD屏幕测试

[复制链接]
554|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
神棍地海棠|  楼主 | 2023-12-13 14:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本次使用XR806实现ST7789的屏幕的驱动。
硬件连接
本文使用的LCD屏幕的原理图如下,可以确定LCD屏幕的控制引脚接线。
XR806与LCD屏幕的控制引脚分布如下
LCD引脚
XR806引脚

SDA
PB4

CS
PB6

RST
PB5

SCL
PB7

DC
PB3

实际的连接效果如图所示。
驱动编写
ST7789的驱动使用中景园的LCD驱动库,驱动文件包括
  • lcd.c
  • lcd.h
  • 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_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, &param);        HAL_GPIO_Init(GPIO_PORT_B, GPIO_PIN_4, &param);        HAL_GPIO_Init(GPIO_PORT_B, GPIO_PIN_5, &param);        HAL_GPIO_Init(GPIO_PORT_B, GPIO_PIN_6, &param);        HAL_GPIO_Init(GPIO_PORT_B, GPIO_PIN_7, &param);}void LCD_Init(void){        LCD_GPIO_Init();        LCD_RES_Clr();         OS_MSleep(100);//替换延时函数        LCD_RES_Set();        OS_MSleep(100);        //以下代码忽略}
在main.c中添加以下代码
#include <stdio.h>#include "kernel/os/os.h"#include "driver/chip/hal_gpio.h"#include "lcd.h"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\n");        }        return 0;}
编译下载后,可以看到屏幕的颜色切换以及串口的数据输出
总结
十分感谢极术社区和全志提供的测评机会,接触到了docker环境开发嵌入式程序的方式。
问题
在使用串口下载时遇到了以下问题,目前没有找到解决方法。

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

282

主题

290

帖子

1

粉丝