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


为什么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},
这个序列表使用的是这样的数据结构:

在创建列表后编写初始化函数,这里把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屏幕都可以正常驱动。就是偏移值和屏幕分辨率设置需要再优化一下代码。

审核编辑:汤梓红
-
控制器
+关注
关注
114文章
17638浏览量
190167 -
液晶屏
+关注
关注
18文章
748浏览量
45291 -
屏幕
+关注
关注
7文章
1233浏览量
57042 -
移植
+关注
关注
1文章
407浏览量
29207 -
TFT
+关注
关注
10文章
405浏览量
114095
原文标题:移植手表屏驱动步骤方法详解
文章出处:【微信号:gh_79acfa3aa3e3,微信公众号:全志在线】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
st7789软件包不能添加是怎么回事?
st7789软件包不能添加是怎么回事?
如何使用STM32CubeMX配置STM32L431RCT6的硬件SPI外设与ST7789通信
实现ST7789图像显示的方法
请问CH579可以使用LVGL库吗?可以通过SPI驱动ST7789屏吗?
在全志XR806上移植st7789屏幕驱动
STM32单片机基础17——使用硬件SPI驱动TFT-LCD(ST7789)
【STM32Cube_17】使用硬件SPI驱动TFT-LCD(ST7789)
STM32:FSMC驱动TFTLCD(ST7789)
使用Visuino程序将SSD1331 OLED和ST7789显示器连接到Arduino
【XR806开发板试用】移植st7789屏幕驱动

移植st7789屏幕驱动教程
评论