前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >全志XR806开发板适配ST7789LCD屏幕测试

全志XR806开发板适配ST7789LCD屏幕测试

作者头像
阿志小管家
发布2024-02-02 19:40:49
840
发布2024-02-02 19:40:49
举报

本次使用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中添加以下代码

代码语言:javascript
复制
#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,相关的带啊吗如下

代码语言:javascript
复制
#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中添加以下代码

代码语言:javascript
复制
#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环境开发嵌入式程序的方式。

问题

在使用串口下载时遇到了以下问题,目前没有找到解决方法。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-12-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 硬件连接
  • 驱动编写
  • 总结
  • 问题
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档