导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页

    【XR806开发板使用】ST7789LCD屏幕测试

    Wireless & Analog Series
    1
    1
    896
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • E
      EPT_electronic LV 5 最后由 编辑

      本次使用XR806实现ST7789的屏幕的驱动。

      硬件连接

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

      582a54ab-e6f5-4a1e-846c-f75d88fb3579-LCD引脚图.png

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

      LCD引脚 XR806引脚
      SDA PB4
      CS PB6
      RST PB5
      SCL PB7
      DC PB3

      实际的连接效果如图所示。

      e2898b9d-0b7d-40d3-8c04-7fd9db48347c-XR806与LCD的连接.jpg

      驱动编写

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

      • lcd.c
      • lcd.h
      • lcd_init.c
      • lcd_init.h
      • lcd_font.h

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

      8741b127-cf98-4e60-8a03-8c6ce09cace9-lcd工程添加问价.png

      移植时要实现对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;
      }
      

      编译下载后,可以看到屏幕的颜色切换以及串口的数据输出
      3f5dfa91-047b-4e30-bf4b-7cc3916e1c13-lcd_test数据打印.png

      76ece751-4e81-486a-9aa9-a6c110e42eba-LCD颜色刷新.jpg

      总结

      十分感谢极术社区和全志提供的测评机会,接触到了docker环境开发嵌入式程序的方式。

      问题

      在使用串口下载时遇到了以下问题,目前没有找到解决方法。
      a2f848da-13db-438e-9fdb-522f1f938b96-串口下载错误.png

      1 条回复 最后回复 回复 引用 分享 0
      • 1 / 1
      • First post
        Last post

      Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

      行为准则 | 用户协议 | 隐私权政策