移植st7789屏幕驱动教程

描述

移植st7789屏幕驱动

真的不要太简单~

 

ST7789是一款高度集成的彩色TFT液晶显示屏控制器芯片,通常用于驱动小到中等尺寸的液晶屏。例如淘宝上常见的1.4寸、1.47寸、1.69寸屏幕等等。

TFTTFT

为什么RES引脚直接接的VCC,因为不知道具体是哪一块出了问题。RES引脚接到推挽输出的IO引脚后,屏幕也能点亮,但是亮度莫名其妙很低。手上几个屏都测试了一下,都这样。

 

1st7789驱动

移植

现在就开始吧,首先新建st7789.c和st7789.h文件。然后创建用于初始化st7789芯片的命令序列表。

 

static lcd_init_cmd_t st7789_init_cmds[] = {
    {0x01, {0}, 0x80, 120},
    /* Sleep Out */
    {0x11, {0}, 0x80, 120},
    /* Memory Data Access Control, MX=MV=1, MY=ML=MH=0, RGB=0 */
    {0x36, {0x00}, 1},
    /* Interface Pixel Format, 16bits/pixel for RGB/MCU interface */
    {0x3A, {0x05}, 1},

 

这个序列表使用的是这样的数据结构:

TFT

在创建列表后编写初始化函数,这里把gpio和spi的初始化也都放在里面了。

然后就是编写一下写命令和写数据的函数,写命令时需要设置一下DC引脚,然后写完立即将DC引脚切换回高电平。

 

static void st7789_send_cmd(uint8_t cmd) {
  gpio_set_level(disp_pin_dc, 0);
  dirver_spi_send_data(&cmd, 1);
  gpio_set_level(disp_pin_dc, 1);
}
static void st7789_send_data(void *data, uint16_t length) {
  dirver_spi_send_data(data, length);
}

 

编写屏幕翻转配置函数:

 

printf("Display orientation: %s
", orientation_str[orientation]);


  uint8_t data[] = {0xC0, 0x00, 0x60, 0xA0};


  printf("0x36 command value: 0x%02X
", data[orientation]);


  st7789_send_cmd(ST7789_MADCTL);
  st7789_send_data((void *)&data[orientation], 1);

 

最后再写一下写屏函数即可,这里为了快速刷屏,设置了比较大的缓存区。目前还不会使用XR806的DMA,学会了可以减少缓存RAM的大小。

 

uint8_t data[4] = {0};


  uint16_t offsetx1 = x1;
  uint16_t offsetx2 = x2;
  uint16_t offsety1 = y1;
  uint16_t offsety2 = y2;


#if (TFT_DISPLAY_OFFSETS)
  offsetx1 += TFT_DISPLAY_X_OFFSET;
  offsetx2 += TFT_DISPLAY_X_OFFSET;
  offsety1 += TFT_DISPLAY_Y_OFFSET;
  offsety2 += TFT_DISPLAY_Y_OFFSET;

 

 

2刷屏函数

添加

还需要添加一个刷屏函数作为测试,现在补一下。


由于1.69寸屏幕不需要设置屏幕窗口偏移量,就直接按满屏来刷了。

 

void lcd_clear(uint16_t color) { st7789_flush(0, 240, 0, 320, color); }

 

然后在main.c里调用屏幕初始化和刷屏函数就可以啦。

 

3刷屏效果

展示

经过测试,手上的1.47寸屏幕和1.69寸st7789屏幕都可以正常驱动。就是偏移值和屏幕分辨率设置需要再优化一下代码。

TFT

  审核编辑:汤梓红

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

全部0条评论

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

×
20
完善资料,
赚取积分