0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

全志R128应用开发案例—SPI驱动ST7789V1.3寸LCD

冬至子 来源:丨budboool 作者:丨budboool 2023-11-06 12:40 次阅读

SPI驱动ST7789V1.3寸LCD

R128 平台提供了 SPI DBI 的 SPI TFT 接口,具有如下特点:

  • Supports DBI Type C 3 Line/4 Line Interface Mode
  • Supports 2 Data Lane Interface Mode
  • Supports data source from CPU or DMA
  • Supports RGB111/444/565/666/888 video format
  • Maximum resolution of RGB666 240 x 320@30Hz with single data lane
  • Maximum resolution of RGB888 240 x 320@60Hz or 320 x 480@30Hz with dual data lane
  • Supports tearing effect
  • Supports software flexible control video frame rate

同时,提供了 SPILCD 驱动框架以供 SPI 屏幕使用。

此次适配的SPI屏为 ZJY130S0800TG01,使用的是 SPI 进行驱动。

引脚配置如下:

R128 Devkit

TFT 模块

PA12

CS

PA13

SCL

PA18

SDA

PA9

BLK

PA20

RES

PA19

DC

3V3

VCC

GND

GND

载入方案

我们使用的开发板是 R128-Devkit,需要开发 C906 核心的应用程序,所以载入方案选择 r128s2_module_c906

$ source envsetup.sh 
$ lunch_rtos 1

image-20230802110150203 (8).png

设置 SPI 驱动

屏幕使用的是SPI驱动,所以需要勾选SPI驱动,运行 mrtos_menuconfig 进入配置页面。前往下列地址找到 SPI Devices

Drivers Options  --- >
    soc related device drivers  --- >
        SPI Devices --- >
        -*- enable spi driver

image-20230825144134701 (4).png

配置 SPI 引脚

打开你喜欢的编辑器,修改文件:board/r128s2/module/configs/sys_config.fex,在这里我们不需要用到 SPI HOLD与SPI WP引脚,注释掉即可。

;----------------------------------------------------------------------------------
;SPI controller configuration
;----------------------------------------------------------------------------------
;Please config spi in dts
[spi1]
spi1_used       = 1
spi1_cs_number  = 1
spi1_cs_bitmap  = 1
spi1_cs0        = port:PA12< 6 >< 0 >< 3 >< default >
spi1_sclk       = port:PA13< 6 >< 0 >< 3 >< default >
spi1_mosi       = port:PA18< 6 >< 0 >< 3 >< default >
spi1_miso       = port:PA21< 6 >< 0 >< 3 >< default >
;spi1_hold       = port:PA19< 6 >< 0 >< 2 >< default >
;spi1_wp         = port:PA20< 6 >< 0 >< 2 >< default >

image-20230825144205551 (3).png

设置 PWM 驱动

屏幕背光使用的是PWM驱动,所以需要勾选PWM驱动,运行 mrtos_menuconfig 进入配置页面。前往下列地址找到 PWM Devices

Drivers Options  --- >
    soc related device drivers  --- >
        PWM Devices --- >
        -*- enable pwm driver

image-20230825144408144 (3).png

配置 PWM 引脚

打开你喜欢的编辑器,修改文件:board/r128s2/module/configs/sys_config.fex,增加 PWM1 节点

[pwm1]
pwm_used        = 1
pwm_positive    = port:PA9< 4 >< 0 >< 3 >< default >

image-20230825150128954 (3).png

设置 SPI LCD 驱动

SPI LCD 由专门的驱动管理。运行 mrtos_menuconfig 进入配置页面。前往下列地址找到 SPILCD Devices ,注意同时勾选 spilcd hal APIs test 方便测试使用。

Drivers Options  --- >
    soc related device drivers  --- >
        [*] DISP Driver Support(spi_lcd)
        [*]   spilcd hal APIs test

image-20230825150341879 (2).png

编写 SPI LCD 显示屏驱动

获取屏幕初始化序列

首先询问屏厂提供驱动源码

image-20231023102239928.png

找到 LCD 的初始化序列代码

image-20231023102252129.png

找到屏幕初始化的源码

image-20231023102333476.png

整理后的初始化代码如下:

LCD_WR_REG(0x11); // Sleep out 
delay_ms(120);    // Delay 120ms 
//************* Start Initial Sequence **********// 
LCD_WR_REG(0x36);
LCD_WR_DATA8(0x00);

LCD_WR_REG(0x3A);     
LCD_WR_DATA8(0x05);   

LCD_WR_REG(0xB2);     
LCD_WR_DATA8(0x1F);   
LCD_WR_DATA8(0x1F);   
LCD_WR_DATA8(0x00);   
LCD_WR_DATA8(0x33);   
LCD_WR_DATA8(0x33);   

LCD_WR_REG(0xB7);     
LCD_WR_DATA8(0x35);   

LCD_WR_REG(0xBB);     
LCD_WR_DATA8(0x20);   // 2b

LCD_WR_REG(0xC0);     
LCD_WR_DATA8(0x2C);   

LCD_WR_REG(0xC2);     
LCD_WR_DATA8(0x01);   

LCD_WR_REG(0xC3);     
LCD_WR_DATA8(0x01);   

LCD_WR_REG(0xC4);     
LCD_WR_DATA8(0x18);   // VDV, 0x20:0v

LCD_WR_REG(0xC6);     
LCD_WR_DATA8(0x13);   // 0x13:60Hz   

LCD_WR_REG(0xD0);     
LCD_WR_DATA8(0xA4);   
LCD_WR_DATA8(0xA1);   

LCD_WR_REG(0xD6);     
LCD_WR_DATA8(0xA1);   // sleep in后,gate输出为GND

LCD_WR_REG(0xE0);     
LCD_WR_DATA8(0xF0);   
LCD_WR_DATA8(0x04);   
LCD_WR_DATA8(0x07);   
LCD_WR_DATA8(0x04);   
LCD_WR_DATA8(0x04);   
LCD_WR_DATA8(0x04);   
LCD_WR_DATA8(0x25);   
LCD_WR_DATA8(0x33);   
LCD_WR_DATA8(0x3C);   
LCD_WR_DATA8(0x36);   
LCD_WR_DATA8(0x14);   
LCD_WR_DATA8(0x12);   
LCD_WR_DATA8(0x29);   
LCD_WR_DATA8(0x30);   

LCD_WR_REG(0xE1);     
LCD_WR_DATA8(0xF0);   
LCD_WR_DATA8(0x02);   
LCD_WR_DATA8(0x04);   
LCD_WR_DATA8(0x05);   
LCD_WR_DATA8(0x05);   
LCD_WR_DATA8(0x21);   
LCD_WR_DATA8(0x25);   
LCD_WR_DATA8(0x32);   
LCD_WR_DATA8(0x3B);   
LCD_WR_DATA8(0x38);   
LCD_WR_DATA8(0x12);   
LCD_WR_DATA8(0x14);   
LCD_WR_DATA8(0x27);   
LCD_WR_DATA8(0x31);   

LCD_WR_REG(0xE4);     
LCD_WR_DATA8(0x1D);   // 使用240根gate  (N+1)*8
LCD_WR_DATA8(0x00);   // 设定gate起点位置
LCD_WR_DATA8(0x00);   // 当gate没有用完时,bit4(TMG)设为0

LCD_WR_REG(0x21);     

LCD_WR_REG(0x29);

用现成驱动改写 SPI LCD 驱动

选择一个现成的 SPI LCD 改写即可,这里选择 nv3029s.c 驱动来修改

image-20231017104714827 (2).png

复制这两个驱动,重命名为 st7789v.c

image-20231017104740060 (2).png

先编辑 st7789v.hnv3029s 改成 st7789v

image-20231017104851772 (2).png

#ifndef _ST7789V_H
#define _ST7789V_H

#include "panels.h"

struct __lcd_panel st7789v_panel;

#endif /*End of file*/

编辑 st7789v.cnv3029s 改成 st7789v

image-20231017104942286 (2).png

编写初始化序列

先删除 static void LCD_panel_init(unsigned int sel) 中的初始化函数。

image-20231017105101421 (2).png

然后将屏厂提供的初始化序列复制进来

image-20231023102641761.png

然后按照 spi_lcd 框架的接口改写驱动接口,具体接口如下

屏厂函数

SPILCD框架接口

LCD_WR_REG

sunxi_lcd_cmd_write

LCD_WR_DATA8

sunxi_lcd_para_write

delay_ms

sunxi_lcd_delay_ms

可以直接进行替换

image-20231023095114146 (1).png

完成后如下

image-20231023095158411 (1).png

然后对照屏厂提供的驱动修改 address 函数

image-20231017105738155 (2).png

做如下修改

static void address(unsigned int sel, int x, int y, int width, int height)
{
    sunxi_lcd_cmd_write(sel, 0x2B); /* Set row address */
    sunxi_lcd_para_write(sel, (y > > 8) & 0xff);
    sunxi_lcd_para_write(sel, y & 0xff);
    sunxi_lcd_para_write(sel, (height > > 8) & 0xff);
    sunxi_lcd_para_write(sel, height & 0xff);
    sunxi_lcd_cmd_write(sel, 0x2A); /* Set coloum address */
    sunxi_lcd_para_write(sel, (x > > 8) & 0xff);
    sunxi_lcd_para_write(sel, x & 0xff);
    sunxi_lcd_para_write(sel, (width > > 8) & 0xff);
    sunxi_lcd_para_write(sel, width & 0xff);
    sunxi_lcd_cmd_write(sel, 0x2c);
}

完成驱动如下

#include "st7789v.h"

static void LCD_power_on(u32 sel);
static void LCD_power_off(u32 sel);
static void LCD_bl_open(u32 sel);
static void LCD_bl_close(u32 sel);
static void LCD_panel_init(u32 sel);
static void LCD_panel_exit(u32 sel);
#define RESET(s, v) sunxi_lcd_gpio_set_value(s, 0, v)
#define power_en(sel, val) sunxi_lcd_gpio_set_value(sel, 0, val)

static struct disp_panel_para info[LCD_FB_MAX];

static void address(unsigned int sel, int x, int y, int width, int height)
{
    sunxi_lcd_cmd_write(sel, 0x2B); /* Set row address */
    sunxi_lcd_para_write(sel, (y > > 8) & 0xff);
    sunxi_lcd_para_write(sel, y & 0xff);
    sunxi_lcd_para_write(sel, (height > > 8) & 0xff);
    sunxi_lcd_para_write(sel, height & 0xff);
    sunxi_lcd_cmd_write(sel, 0x2A); /* Set coloum address */
    sunxi_lcd_para_write(sel, (x > > 8) & 0xff);
    sunxi_lcd_para_write(sel, x & 0xff);
    sunxi_lcd_para_write(sel, (width > > 8) & 0xff);
    sunxi_lcd_para_write(sel, width & 0xff);
    sunxi_lcd_cmd_write(sel, 0x2c);
}

static void LCD_panel_init(unsigned int sel)
{
    if (bsp_disp_get_panel_info(sel, &info[sel])) {
        lcd_fb_wrn("get panel info fail!n");
        return;
    }

    sunxi_lcd_cmd_write(sel, 0x11); // Sleep out 
    sunxi_lcd_delay_ms(120);    // Delay 120ms 
    //************* Start Initial Sequence **********// 
    sunxi_lcd_cmd_write(sel, 0x36);
    sunxi_lcd_para_write(sel, 0x00);

    sunxi_lcd_cmd_write(sel, 0x3A);     
    sunxi_lcd_para_write(sel, 0x05);   

    sunxi_lcd_cmd_write(sel, 0xB2);     
    sunxi_lcd_para_write(sel, 0x1F);   
    sunxi_lcd_para_write(sel, 0x1F);   
    sunxi_lcd_para_write(sel, 0x00);   
    sunxi_lcd_para_write(sel, 0x33);   
    sunxi_lcd_para_write(sel, 0x33);   

    sunxi_lcd_cmd_write(sel, 0xB7);     
    sunxi_lcd_para_write(sel, 0x35);   

    sunxi_lcd_cmd_write(sel, 0xBB);     
    sunxi_lcd_para_write(sel, 0x20);   // 2b

    sunxi_lcd_cmd_write(sel, 0xC0);     
    sunxi_lcd_para_write(sel, 0x2C);   

    sunxi_lcd_cmd_write(sel, 0xC2);     
    sunxi_lcd_para_write(sel, 0x01);   

    sunxi_lcd_cmd_write(sel, 0xC3);     
    sunxi_lcd_para_write(sel, 0x01);   

    sunxi_lcd_cmd_write(sel, 0xC4);     
    sunxi_lcd_para_write(sel, 0x18);   // VDV, 0x20:0v

    sunxi_lcd_cmd_write(sel, 0xC6);     
    sunxi_lcd_para_write(sel, 0x13);   // 0x13:60Hz   

    sunxi_lcd_cmd_write(sel, 0xD0);     
    sunxi_lcd_para_write(sel, 0xA4);   
    sunxi_lcd_para_write(sel, 0xA1);   

    sunxi_lcd_cmd_write(sel, 0xD6);     
    sunxi_lcd_para_write(sel, 0xA1);   // sleep in后,gate输出为GND

    sunxi_lcd_cmd_write(sel, 0xE0);     
    sunxi_lcd_para_write(sel, 0xF0);   
    sunxi_lcd_para_write(sel, 0x04);   
    sunxi_lcd_para_write(sel, 0x07);   
    sunxi_lcd_para_write(sel, 0x04);   
    sunxi_lcd_para_write(sel, 0x04);   
    sunxi_lcd_para_write(sel, 0x04);   
    sunxi_lcd_para_write(sel, 0x25);   
    sunxi_lcd_para_write(sel, 0x33);   
    sunxi_lcd_para_write(sel, 0x3C);   
    sunxi_lcd_para_write(sel, 0x36);   
    sunxi_lcd_para_write(sel, 0x14);   
    sunxi_lcd_para_write(sel, 0x12);   
    sunxi_lcd_para_write(sel, 0x29);   
    sunxi_lcd_para_write(sel, 0x30);   

    sunxi_lcd_cmd_write(sel, 0xE1);     
    sunxi_lcd_para_write(sel, 0xF0);   
    sunxi_lcd_para_write(sel, 0x02);   
    sunxi_lcd_para_write(sel, 0x04);   
    sunxi_lcd_para_write(sel, 0x05);   
    sunxi_lcd_para_write(sel, 0x05);   
    sunxi_lcd_para_write(sel, 0x21);   
    sunxi_lcd_para_write(sel, 0x25);   
    sunxi_lcd_para_write(sel, 0x32);   
    sunxi_lcd_para_write(sel, 0x3B);   
    sunxi_lcd_para_write(sel, 0x38);   
    sunxi_lcd_para_write(sel, 0x12);   
    sunxi_lcd_para_write(sel, 0x14);   
    sunxi_lcd_para_write(sel, 0x27);   
    sunxi_lcd_para_write(sel, 0x31);   

    sunxi_lcd_cmd_write(sel, 0xE4);     
    sunxi_lcd_para_write(sel, 0x1D);   // 使用240根gate  (N+1)*8
    sunxi_lcd_para_write(sel, 0x00);   // 设定gate起点位置
    sunxi_lcd_para_write(sel, 0x00);   // 当gate没有用完时,bit4(TMG)设为0

    sunxi_lcd_cmd_write(sel, 0x21);     

    sunxi_lcd_cmd_write(sel, 0x29);   

    if (info[sel].lcd_x < info[sel].lcd_y)
        address(sel, 0, 0, info[sel].lcd_x - 1, info[sel].lcd_y - 1);
    else
        address(sel, 0, 0, info[sel].lcd_y - 1, info[sel].lcd_x - 1);
}

static void LCD_panel_exit(unsigned int sel)
{
    sunxi_lcd_cmd_write(sel, 0x28);
    sunxi_lcd_delay_ms(20);
    sunxi_lcd_cmd_write(sel, 0x10);
    sunxi_lcd_delay_ms(20);
    sunxi_lcd_pin_cfg(sel, 0);
}

static s32 LCD_open_flow(u32 sel)
{
    lcd_fb_here;
    /* open lcd power, and delay 50ms */
    LCD_OPEN_FUNC(sel, LCD_power_on, 50);
    /* open lcd power, than delay 200ms */
    LCD_OPEN_FUNC(sel, LCD_panel_init, 200);

    LCD_OPEN_FUNC(sel, lcd_fb_black_screen, 50);
    /* open lcd backlight, and delay 0ms */
    LCD_OPEN_FUNC(sel, LCD_bl_open, 0);

    return 0;
}

static s32 LCD_close_flow(u32 sel)
{
    lcd_fb_here;
    /* close lcd backlight, and delay 0ms */
    LCD_CLOSE_FUNC(sel, LCD_bl_close, 50);
    /* open lcd power, than delay 200ms */
    LCD_CLOSE_FUNC(sel, LCD_panel_exit, 10);
    /* close lcd power, and delay 500ms */
    LCD_CLOSE_FUNC(sel, LCD_power_off, 10);

    return 0;
}

static void LCD_power_on(u32 sel)
{
    /* config lcd_power pin to open lcd power0 */
    lcd_fb_here;
    power_en(sel, 1);

    sunxi_lcd_power_enable(sel, 0);

    sunxi_lcd_pin_cfg(sel, 1);
    RESET(sel, 1);
    sunxi_lcd_delay_ms(100);
    RESET(sel, 0);
    sunxi_lcd_delay_ms(100);
    RESET(sel, 1);
}

static void LCD_power_off(u32 sel)
{
    lcd_fb_here;
    /* config lcd_power pin to close lcd power0 */
    sunxi_lcd_power_disable(sel, 0);
    power_en(sel, 0);
}

static void LCD_bl_open(u32 sel)
{
    sunxi_lcd_pwm_enable(sel);
    /* config lcd_bl_en pin to open lcd backlight */
    sunxi_lcd_backlight_enable(sel);
    lcd_fb_here;
}

static void LCD_bl_close(u32 sel)
{
    /* config lcd_bl_en pin to close lcd backlight */
    sunxi_lcd_backlight_disable(sel);
    sunxi_lcd_pwm_disable(sel);
    lcd_fb_here;
}


/* sel: 0:lcd0; 1:lcd1 */
static s32 LCD_user_defined_func(u32 sel, u32 para1, u32 para2, u32 para3)
{
    lcd_fb_here;
    return 0;
}

static int lcd_set_var(unsigned int sel, struct fb_info *p_info)
{
    return 0;
}

static int lcd_set_addr_win(unsigned int sel, int x, int y, int width, int height)
{
    address(sel, x, y, width, height);
    return 0;
}

static int lcd_blank(unsigned int sel, unsigned int en)
{
    return 0;
}

struct __lcd_panel st7789v_panel = {
    /* panel driver name, must mach the name of lcd_drv_name in sys_config.fex
       */
    .name = "st7789v",
    .func = {
        .cfg_open_flow = LCD_open_flow,
        .cfg_close_flow = LCD_close_flow,
        .lcd_user_defined_func = LCD_user_defined_func,
        .blank = lcd_blank,
        .set_var = lcd_set_var,
        .set_addr_win = lcd_set_addr_win,
    },
};

对接驱动框架

完成了屏幕驱动的编写,接下来需要对接到 SPILCD 驱动框架。首先编辑 Kconfig

image-20231017105738155 (2).png

增加 st7789v 的配置

image-20231017105814814 (2).png

config LCD_SUPPORT_ST7789V
    bool "LCD support st7789v panel"
    default n
    ---help---
        If you want to support st7789v panel for display driver, select it.

然后编辑 panels.cpanel_array 里增加 st7789 驱动的引用

image-20231017105948156 (2).png

如下图

image-20231017105919628 (2).png

#ifdef CONFIG_LCD_SUPPORT_ST7789V
    &st7789v_panel,
#endif

之后编辑 panels.h 同样增加引用

image-20231017110043805 (2).png

如下图

image-20231017110122397 (2).png

#ifdef CONFIG_LCD_SUPPORT_ST7789V
extern struct __lcd_panel st7789v_panel;
#endif

最后编辑外层的 Makefile 增加编译选项

image-20231017110204681 (2).png

如下所示

image-20231017110242997 (2).png

obj-${CONFIG_LCD_SUPPORT_ST7789V} += panels/st7789v.o

选择 ST7789V 驱动

在 SPILCD 驱动选择界面可以看到 LCD_FB panels select 选择 SPI 屏幕的驱动

进入 LCD_FB panels select 选项

image-20230825150812435 (3).png

选择并勾选 [*] LCD support st7789v panel

image-20231017110344277 (2).png

配置 SPI LCD 引脚

打开你喜欢的编辑器,修改文件:board/r128s2/module/configs/sys_config.fex

[lcd_fb0]
lcd_used            = 1   
lcd_model_name      = "spilcd"   
lcd_driver_name     = "st7789v" 
; 屏幕规格配置
lcd_x               = 240
lcd_y               = 240  
lcd_width           = 32  
lcd_height          = 32  
; SPI 速率
lcd_data_speed      = 50
; PWM 背光配置项
lcd_pwm_used        = 1
lcd_pwm_ch          = 1
lcd_pwm_freq        = 5000 
lcd_pwm_pol         = 0 
lcd_backlight       = 100
; 配置 lcd_if = 1 为 SPI 模式,双缓冲
lcd_if              = 0
fb_buffer_num       = 2
; SPI 模式下以下配置无效
lcd_pixel_fmt       = 11 
lcd_dbi_fmt         = 2
lcd_dbi_clk_mode    = 1
lcd_dbi_te          = 1
lcd_dbi_if          = 4
lcd_rgb_order       = 0
lcd_fps             = 60
; 使用 SPI1 作为通讯接口
lcd_spi_bus_num     = 1
lcd_frm             = 2
lcd_gamma_en        = 1

lcd_power_num       = 0
lcd_gpio_regu_num   = 0
lcd_bl_percent_num  = 0

lcd_spi_dc_pin      = port:PA19< 1 >< 0 >< 3 >< 0 >
;RESET Pin
lcd_gpio_0          = port:PA20< 1 >< 0 >< 2 >< 0 >

编译打包

运行命令 mp 编译打包,可以看到编译了 st7789v.o

image-20231017111015362 (2).png

测试

烧录启动之后,屏幕背光启动,但是屏幕全黑。

image-20231023102211315 (1).png

输入 test_spilcd ,屏幕显示黄色。

image-20231023103606375.png

image-20231023103636509.png

输入 lv_examples 1 可以显示 lvgl 界面

image-20231023103710014.png

常见问题

LVGL 出现 DMA OVER SIZE

image-20231023101154351 (2).png

这是由于 LVGL 配置的 LV_COLOR_DEPTH 为 32,但是 SPI 屏配置为16位。请修改 lv_conf.h

image-20231023101317634 (2).png

出现部分花屏

image-20231023103039467 (1).png

  • 检查 address 函数是否正确
  • 检查 sys_config.fex 屏幕配置分辨率是否正确
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 驱动器
    +关注

    关注

    51

    文章

    7308

    浏览量

    142942
  • RGB
    RGB
    +关注

    关注

    4

    文章

    763

    浏览量

    57407
  • LCD屏
    +关注

    关注

    0

    文章

    118

    浏览量

    15114
  • SPI接口
    +关注

    关注

    0

    文章

    251

    浏览量

    33934
  • ST7789V
    +关注

    关注

    3

    文章

    6

    浏览量

    6706
  • R128
    +关注

    关注

    0

    文章

    41

    浏览量

    28
收藏 人收藏

    评论

    相关推荐

    全志R128应用开发案例—适配SPI驱动ST7789V2.4寸LCD

    R128 平台提供了 SPI DBI 的 SPI TFT 接口,具有如下特点
    的头像 发表于 11-02 16:44 549次阅读
    全志<b class='flag-5'>R128</b>应用<b class='flag-5'>开发案</b>例—适配<b class='flag-5'>SPI</b><b class='flag-5'>驱动</b><b class='flag-5'>ST7789</b>V2.4寸<b class='flag-5'>LCD</b>

    纵享丝滑!R128+LVGL驱动多尺寸RGB LCD屏幕流畅运行

    (480x480) 4圆屏RGB(480x480) R128适配RGB LCD配置如动图展示,其中最大的屏幕是 71024x600分辨率,lvgl测试不加触摸能跑60多帧,加触
    发表于 12-22 09:52

    R128使用SPI驱动ST7789V1.47LCD

    SPI驱动ST7789V1.47LCDR128 平台提供了 SPI DBI 的
    发表于 01-02 09:45

    R128硬件设计指南①

    。添加按键时保证按键按下后,ADC网络电压范围为 0~1.08V,最小间隔大于 200mV。 LCD电路接口R128 支持一路 RGB屏接口和一路 SPI屏接口。其中 RGB屏接口可
    发表于 01-04 09:23

    R128 Devkit开发板原理图模块介绍及使用说明

    :CH341SER.EXE 购买链接 百问科技淘宝店 - R128 DevKit 原理图模块介绍R128 模组R128 模组使用 SMT
    发表于 01-17 09:45

    R128芯片应用开发案例——驱动 WS2812 流水灯

    数据会在第 n 个 LED 的数据前发送,不过这些数据将会是原来 n-1 个 LED 的亮度数据。 由于拥有独立的 LEDC 模块,在 R128 平台上驱动 WS2812 类似的 RGB LED
    发表于 10-10 14:08

    R128适配 ST7789v LCD

    适配 ST7789v LCD R128 平台提供了 SPI DBI 的 SPI TFT 接口,具有如下特点: Supports DBI Ty
    发表于 10-23 09:58

    使用R128将LVGL运行在SPI TFT GUI上

    载入方案选择 r128s2_module_c906 $ source envsetup.sh $ lunch_rtos 1 配置 SPI LCD 驱动
    发表于 10-23 13:56

    R128应用开发案例——SPI 驱动 TFT LCD

    SPI 驱动 TFT LCDR128 平台提供了 SPI DBI 的 SPI TFT 接口
    发表于 10-23 14:29

    R128应用开发案例——适配SPI驱动ST7789V2.4LCD

    SPI驱动ST7789V1.47LCD R128 平台提供了
    发表于 11-02 13:36

    R128应用开发案例——SPI驱动ST7789V1.3LCD

    SPI驱动ST7789V1.3LCD R128 平台提供了
    发表于 11-06 10:16

    R128应用开发案例——DBI驱动ST7789V1.3LCD

    DBI驱动ST7789V1.3LCD 之前介绍了 R128 平台使用 SPI
    发表于 11-06 11:12

    R128平台SPI与DBI点屏性能大对比

    320x240 22 30 26 36 1.47 172x320 33 50 38 67 测试数据 ST7789v 1.3 240x240 屏幕测试 DBI 模式 lv_mu
    发表于 11-13 15:58

    R128点屏SPI LCD颜色相关问题

    spi 都很难,甚至无法实现。所以 normal spi 只能模拟4 线的DBI的写操作。 对于R128这类支持DBI接口的CPU,可以选择不去了解SPI。如果需要用到
    发表于 12-06 09:50

    全志R128适配ST7789v LCD

    R128 平台提供了 SPI DBI 的 SPI TFT 接口,具有如下特点
    的头像 发表于 10-23 11:26 615次阅读
    全志<b class='flag-5'>R128</b>适配<b class='flag-5'>ST7789</b>v <b class='flag-5'>LCD</b>