04_瑞萨GUI(LVGL)移植实战教程之驱动LCD屏(SPI)

这篇具有很好参考价值的文章主要介绍了04_瑞萨GUI(LVGL)移植实战教程之驱动LCD屏(SPI)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本系列教程配套出有视频教程,观看地址:https://www.bilibili.com/video/BV1gV4y1e7Sg

4. 驱动LCD屏(SPI)

本次实验我们在上一次实验的基础上驱动 LCD屏(SPI)。

上次实验我们已经能驱动触摸屏(I2C)并打印触摸点坐标,这次实验我们的目标是点亮LCD屏,向屏幕依次刷写红绿蓝三种不同的颜色,并在串口终端打印当前刷新的颜色文本信息。

4.1 复制工程

上次实验得出的工程我们可以通过复制在原有的基础上得到一个新的工程。

如果你不清楚复制工程的步骤,请参考阅读第2章实验的步骤教程。

本次实验我们的项目命名为:02_dshanmcu_ra6m5_spi_display

04_瑞萨GUI(LVGL)移植实战教程之驱动LCD屏(SPI),瑞萨MCU基础入门教程,单片机,嵌入式硬件,LVGL,瑞萨

4.2 配置FSP

4.2.1 查看硬件资料

打开位于 03硬件资料\1_开发板原理图\ DshanMCU_RA6M5_V4.0.pdf 的开发板原理图,确认SPI引脚,电路图如下:

04_瑞萨GUI(LVGL)移植实战教程之驱动LCD屏(SPI),瑞萨MCU基础入门教程,单片机,嵌入式硬件,LVGL,瑞萨

可以看到原理图并没有像之前那样直接就能确定使用的是哪一路spi,因此需要打开位于 03硬件资料\5_官方资料\RA6M5 Group User's Manual Hardware.pdf 的文档,跳转到下图所示的两个位置,确定使用的是 spi1:

04_瑞萨GUI(LVGL)移植实战教程之驱动LCD屏(SPI),瑞萨MCU基础入门教程,单片机,嵌入式硬件,LVGL,瑞萨04_瑞萨GUI(LVGL)移植实战教程之驱动LCD屏(SPI),瑞萨MCU基础入门教程,单片机,嵌入式硬件,LVGL,瑞萨

03硬件资料\5_官方资料\RA6M5 Group User's Manual Hardware.pdf 的文档,跳转到下图所示的位置,确定SPI时钟频率计算公式:

04_瑞萨GUI(LVGL)移植实战教程之驱动LCD屏(SPI),瑞萨MCU基础入门教程,单片机,嵌入式硬件,LVGL,瑞萨

打开 e2studio 如下窗口,确定当前的 PCLKA:
由下图可知 PCLKA 为 200MHz,因此可得出支持的SPI最大时钟频率为:100/ (2*(0+1) * 2^0) = 100 / 2 = 50Mbps

04_瑞萨GUI(LVGL)移植实战教程之驱动LCD屏(SPI),瑞萨MCU基础入门教程,单片机,嵌入式硬件,LVGL,瑞萨

打开位于 4_模块资料\01_ST7796显示器芯片手册\ST7796U2_SPEC_V1.0.pdf 的文档,跳转到下图所示的位置:

04_瑞萨GUI(LVGL)移植实战教程之驱动LCD屏(SPI),瑞萨MCU基础入门教程,单片机,嵌入式硬件,LVGL,瑞萨

通过换算可得出时钟频率: 1000000000 / 15= 66,666,666.66666667 ≈ 66.5Mhz

接下来我们根据这些信息对 r_spi 进行配置。

4.2.2 添加 Stacks(r_spi_master)

  1. 打开 FSP Configuration 视图:双击项目文件夹中的 configuration.xml 文件。
  2. 按照下图所示,添加 r_spi 模块:
04_瑞萨GUI(LVGL)移植实战教程之驱动LCD屏(SPI),瑞萨MCU基础入门教程,单片机,嵌入式硬件,LVGL,瑞萨
  1. 点击刚刚添加的 r_spi 在底部窗口的 Properties 选项卡中对其进行配置,将其配置为与下图一致:

    • Name: g_spi1
    • Channel: 1
    • Callback: spi1_callback
    • Bitrate: 50000000
04_瑞萨GUI(LVGL)移植实战教程之驱动LCD屏(SPI),瑞萨MCU基础入门教程,单片机,嵌入式硬件,LVGL,瑞萨

配置完成之后,如果马上编译会发现编译出错、可以根据错误信息进行解决,也可以在编译前参考下图解决:

04_瑞萨GUI(LVGL)移植实战教程之驱动LCD屏(SPI),瑞萨MCU基础入门教程,单片机,嵌入式硬件,LVGL,瑞萨

点击刚刚添加的 r_dmac 在底部窗口的 Properties 选项卡中对其进行配置,将其配置为与下图一致:

  • Name: g_transfer1
  • Channel:1
04_瑞萨GUI(LVGL)移植实战教程之驱动LCD屏(SPI),瑞萨MCU基础入门教程,单片机,嵌入式硬件,LVGL,瑞萨

4.2.3 配置RS、RESET、PWM引脚

这三个引脚,在上面的原理图中有标注,负责的功能分别是:

  • RS引脚(P104):低电平代表发送的是指令,高电平代表发送的是数据
  • RESET引脚(P105):控制LCD屏的复位
  • PWM引脚(P608):可以自由调节背光亮度调节,给高电平常亮

根据他们负责的功能特性,在FSP对其进行配置:

  1. 按下图所示操作,打开配置IO引脚页面:
04_瑞萨GUI(LVGL)移植实战教程之驱动LCD屏(SPI),瑞萨MCU基础入门教程,单片机,嵌入式硬件,LVGL,瑞萨
  1. 按下图所示操作,配置RS引脚(P104)
04_瑞萨GUI(LVGL)移植实战教程之驱动LCD屏(SPI),瑞萨MCU基础入门教程,单片机,嵌入式硬件,LVGL,瑞萨
  1. 按下图所示操作,配置RESET引脚(P105)
04_瑞萨GUI(LVGL)移植实战教程之驱动LCD屏(SPI),瑞萨MCU基础入门教程,单片机,嵌入式硬件,LVGL,瑞萨
  1. 按下图所示操作,配置PWM引脚(P608)
04_瑞萨GUI(LVGL)移植实战教程之驱动LCD屏(SPI),瑞萨MCU基础入门教程,单片机,嵌入式硬件,LVGL,瑞萨

最后检查确认无误,点击右上角的 “Generate Project Content” e2studio就会根据我们对FSP的配置自动配置项目、生成相应的代码。

04_瑞萨GUI(LVGL)移植实战教程之驱动LCD屏(SPI),瑞萨MCU基础入门教程,单片机,嵌入式硬件,LVGL,瑞萨

4.3 编写LCD驱动代码

在e2studio中进入 02_dshanmcu_ra6m5_spi_display\dshanmcu_ra6m5\drivers 目录,新建如下两个文件 drv_spi_display.cdrv_spi_display.h

04_瑞萨GUI(LVGL)移植实战教程之驱动LCD屏(SPI),瑞萨MCU基础入门教程,单片机,嵌入式硬件,LVGL,瑞萨

在e2studio中点击打开 02_dshanmcu_ra6m5_spi_display\dshanmcu_ra6m5\drivers\drv_spi_display.c 添加下面的代码:

/***********************************************************************************************************************
 * Includes
 **********************************************************************************************************************/
#include "drv_spi_display.h"
#include <stdio.h>

/**********************************************************************************************************************
 * Macro definitions
 **********************************************************************************************************************/
#define LCD_DC_PIN              BSP_IO_PORT_01_PIN_04
#define LCD_RESET_PIN           BSP_IO_PORT_01_PIN_05
#define LCD_PWM_PIN             BSP_IO_PORT_06_PIN_08

#define SPI_SEND_DATA           BSP_IO_LEVEL_HIGH
#define SPI_SEND_CMD            BSP_IO_LEVEL_LOW

/* ST7796S部分寄存器定义 */
#define LCD_DISPLAY_CMD_RAMCTRL           0xb0 // RAM Control
#define LCD_DISPLAY_CMD_CASET             0x2a // Column address set
#define LCD_DISPLAY_CMD_RASET             0x2b // Row address set
#define LCD_DISPLAY_CMD_RAMWR             0x2c // Memory write

/**********************************************************************************************************************
 * Typedef definitions
 **********************************************************************************************************************/

/***********************************************************************************************************************
 * Private function prototypes
 **********************************************************************************************************************/
static void spi1_wait_for_tx(void);
static void spi_display_init(void);

static fsp_err_t spi_send_data_cmd(uint8_t * uc_data, bsp_io_level_t uc_cmd, uint32_t len);
static fsp_err_t spi_display_backlight_opt(bsp_io_level_t opt);
static fsp_err_t spi_display_reset(void);

/***********************************************************************************************************************
 * Private global variables
 **********************************************************************************************************************/
/* Event flags for master */
static volatile spi_event_t g_master_event_flag;    // Master Transfer Event completion flag

/***********************************************************************************************************************
 * Functions
 **********************************************************************************************************************/

fsp_err_t drv_spi_display_init(void)
{
    fsp_err_t err;

    /* 初始化I2C驱动 */
    err = g_spi1.p_api->open(&g_spi1_ctrl, &g_spi1_cfg);
    if (FSP_SUCCESS != err)
    {
        printf ("%s %d\r\n", __FUNCTION__, __LINE__);
        return err;
    }

    spi_display_init();

    return err;
}

void spi_display_set_window(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
{
    uint8_t caset[4];
    uint8_t raset[4];

    caset[0] = (uint8_t)(x1 >> 8) & 0xFF;
    caset[1] = (uint8_t)(x1 & 0xff);
    caset[2] = (uint8_t)(x2 >> 8) & 0xFF;
    caset[3] = (uint8_t)(x2 & 0xff) ;

    raset[0] = (uint8_t)(y1 >> 8) & 0xFF;
    raset[1] = (uint8_t)(y1 & 0xff);
    raset[2] = (uint8_t)(y2 >> 8) & 0xFF;
    raset[3] = (uint8_t)(y2 & 0xff);

    spi_send_data_cmd((uint8_t []){LCD_DISPLAY_CMD_CASET}, SPI_SEND_CMD, 1); // Horiz
    spi_send_data_cmd(caset, SPI_SEND_DATA, 4);
    spi_send_data_cmd((uint8_t []){LCD_DISPLAY_CMD_RASET}, SPI_SEND_CMD, 1); // Vert
    spi_send_data_cmd(raset, SPI_SEND_DATA, 4);
    spi_send_data_cmd((uint8_t []){LCD_DISPLAY_CMD_RAMWR}, SPI_SEND_CMD, 1); // Memory write
}

fsp_err_t drv_spi_display_flush_data(uint8_t * data, uint32_t len)
{
    fsp_err_t err;

    err = spi_send_data_cmd(data, SPI_SEND_DATA, len);
    if (FSP_SUCCESS != err)
    {
        printf ("%s %d\r\n", __FUNCTION__, __LINE__);
        return err;
    }

    return err;
}


void spi1_callback(spi_callback_args_t *p_args)
{
    /* 判断是否是发送完成触发的中断 */
    /* 如果是的话就将发送完成标志位置1 */
    if (SPI_EVENT_TRANSFER_COMPLETE == p_args->event)
    {
        g_master_event_flag = SPI_EVENT_TRANSFER_COMPLETE;
    }
    else
    {
        g_master_event_flag = SPI_EVENT_TRANSFER_ABORTED;
    }
}

/***********************************************************************************************************************
 * Private Functions
 **********************************************************************************************************************/
static void spi1_wait_for_tx(void)
{
    while(!g_master_event_flag);
    g_master_event_flag = false;
}


static void spi_display_init(void)
{
    spi_display_reset();
    spi_display_backlight_opt(BSP_IO_LEVEL_HIGH); // backlight on

#if 1
    spi_send_data_cmd((uint8_t []){0x11}, SPI_SEND_CMD, 1);     // Sleep out
    spi_send_data_cmd((uint8_t []){0x20}, SPI_SEND_CMD, 1);     // 关闭显示反转
    spi_send_data_cmd((uint8_t []){0x36}, SPI_SEND_CMD, 1);     // 内存数据访问控制设置
    spi_send_data_cmd((uint8_t []){0x48}, SPI_SEND_DATA, 1);    // 显示方向:左->右,上->下(不旋转); BGR

    spi_send_data_cmd((uint8_t []){0x3a}, SPI_SEND_CMD, 1);     // 设置像素格式(bpp)
    spi_send_data_cmd((uint8_t []){0x55}, SPI_SEND_DATA, 1);    // RGB接口颜色格式:16bit/pixel;控制接口的颜色格式:16bit/pixel

    spi_send_data_cmd((uint8_t []){0x13}, SPI_SEND_CMD, 1);     // 普通显示模式
    spi_send_data_cmd((uint8_t []){0x29}, SPI_SEND_CMD, 1);     // 开启显示
#elif
    spi_send_data_cmd((uint8_t []){0x11}, SPI_SEND_CMD, 1);
    spi_send_data_cmd((uint8_t []){0x00}, SPI_SEND_DATA, 1);
    R_BSP_SoftwareDelay(120, BSP_DELAY_UNITS_MILLISECONDS);     //延时120ms

    spi_send_data_cmd((uint8_t []){0xf0}, SPI_SEND_CMD, 1);
    spi_send_data_cmd((uint8_t []){0xc3}, SPI_SEND_DATA, 1);
    spi_send_data_cmd((uint8_t []){0xf0}, SPI_SEND_CMD, 1);
    spi_send_data_cmd((uint8_t []){0x96}, SPI_SEND_DATA, 1);
    spi_send_data_cmd((uint8_t []){0x36}, SPI_SEND_CMD, 1);
    spi_send_data_cmd((uint8_t []){0x48}, SPI_SEND_DATA, 1);    // RGB
    spi_send_data_cmd((uint8_t []){0xb4}, SPI_SEND_CMD, 1);
    spi_send_data_cmd((uint8_t []){0x01}, SPI_SEND_DATA, 1);
    spi_send_data_cmd((uint8_t []){0xb7}, SPI_SEND_CMD, 1);
    spi_send_data_cmd((uint8_t []){0xc6}, SPI_SEND_DATA, 1);

    spi_send_data_cmd((uint8_t []){0xe8}, SPI_SEND_CMD, 1);
    spi_send_data_cmd((uint8_t []){0x40, 0x8A, 0x00, 0x00, 0x29, 0x19, 0xA5, 0x33}, SPI_SEND_DATA, 8);

    spi_send_data_cmd((uint8_t []){0xc1}, SPI_SEND_CMD, 1);
    spi_send_data_cmd((uint8_t []){0x06}, SPI_SEND_DATA, 1);
    spi_send_data_cmd((uint8_t []){0xc2}, SPI_SEND_CMD, 1);
    spi_send_data_cmd((uint8_t []){0xa7}, SPI_SEND_DATA, 1);
    spi_send_data_cmd((uint8_t []){0xc5}, SPI_SEND_CMD, 1);
    spi_send_data_cmd((uint8_t []){0x18}, SPI_SEND_DATA, 1);

    spi_send_data_cmd((uint8_t []){0xe0}, SPI_SEND_CMD, 1);
    spi_send_data_cmd((uint8_t []){0xF0, 0x09, 0x0B, 0x06, 0x04, 0x15, 0x2F, 0x54, 0x42, 0x3C, 0x17, 0x14, 0x18, 0x1B}, SPI_SEND_DATA, 14);

    spi_send_data_cmd((uint8_t []){0xe1}, SPI_SEND_CMD, 1);
    spi_send_data_cmd((uint8_t []){0xF0, 0x09, 0x0B, 0x06, 0x04, 0x03, 0x2D, 0x43, 0x42, 0x3B, 0x16, 0x14, 0x17, 0x1B}, SPI_SEND_DATA, 14);

    spi_send_data_cmd((uint8_t []){0xf0}, SPI_SEND_CMD, 1);
    spi_send_data_cmd((uint8_t []){0x3c}, SPI_SEND_DATA, 1);
    spi_send_data_cmd((uint8_t []){0xf0}, SPI_SEND_CMD, 1);
    spi_send_data_cmd((uint8_t []){0x69}, SPI_SEND_DATA, 1);
    spi_send_data_cmd((uint8_t []){0x3a}, SPI_SEND_CMD, 1);
    spi_send_data_cmd((uint8_t []){0x55}, SPI_SEND_DATA, 1);
    R_BSP_SoftwareDelay(120, BSP_DELAY_UNITS_MILLISECONDS);     //延时120ms

    spi_send_data_cmd((uint8_t []){0x29}, SPI_SEND_CMD, 1);

    /*rotation*/
    spi_send_data_cmd((uint8_t []){0x36}, SPI_SEND_CMD, 1);
    spi_send_data_cmd((uint8_t []){0x48}, SPI_SEND_DATA, 1);    // 0
#endif

}

static fsp_err_t spi_send_data_cmd(uint8_t * uc_data, bsp_io_level_t uc_cmd, uint32_t len)
{
    fsp_err_t err = FSP_SUCCESS;     // Error status

    /* Master send data to device */
    err = g_ioport.p_api->pinWrite(g_ioport.p_ctrl, LCD_DC_PIN, uc_cmd);
    if(FSP_SUCCESS != err)
    {
        printf ("%s %d\r\n", __FUNCTION__, __LINE__);
        return err;
    }

    err = g_spi1.p_api->write(g_spi1.p_ctrl, uc_data, len, SPI_BIT_WIDTH_8_BITS);
    if(FSP_SUCCESS != err)
    {
        printf ("%s %d\r\n", __FUNCTION__, __LINE__);
        return err;
    }

    spi1_wait_for_tx();

    return err;
}

static fsp_err_t spi_display_backlight_opt(bsp_io_level_t opt)
{
    fsp_err_t err = FSP_SUCCESS;     // Error status

    g_ioport.p_api->pinWrite((ioport_ctrl_t * const )&g_ioport.p_ctrl, LCD_PWM_PIN, opt);
    return err;
}


static fsp_err_t spi_display_reset(void)
{
    fsp_err_t err = FSP_SUCCESS;     // Error status

    g_ioport.p_api->pinWrite((ioport_ctrl_t * const )&g_ioport.p_ctrl, LCD_RESET_PIN, BSP_IO_LEVEL_LOW);
    R_BSP_SoftwareDelay(120, BSP_DELAY_UNITS_MILLISECONDS); //延时120ms
    g_ioport.p_api->pinWrite((ioport_ctrl_t * const )&g_ioport.p_ctrl, LCD_RESET_PIN, BSP_IO_LEVEL_HIGH);
    R_BSP_SoftwareDelay(120, BSP_DELAY_UNITS_MILLISECONDS); //延时120ms

    return err;
}

在e2studio中点击打开 02_dshanmcu_ra6m5_spi_display\dshanmcu_ra6m5\drivers\drv_spi_display.h 添加下面的代码:

#ifndef DRV_SPI_DISPLAY_H
#define DRV_SPI_DISPLAY_H

/***********************************************************************************************************************
 * Includes
 **********************************************************************************************************************/
#include "hal_data.h"

/**********************************************************************************************************************
 * Macro definitions
 **********************************************************************************************************************/
#define LCD_SCREEN_WIDTH        (320)
#define LCD_SCREEN_HEIGHT       (480)

#define LCD_COLOR_RED           (0xF800)
#define LCD_COLOR_GREEN         (0x07E0)
#define LCD_COLOR_BLUE          (0x001F)

/**********************************************************************************************************************
 * Typedef definitions
 **********************************************************************************************************************/

/***********************************************************************************************************************
 * Exported global variables
 **********************************************************************************************************************/

/***********************************************************************************************************************
 * Exported global functions (to be accessed by other files)
 **********************************************************************************************************************/

fsp_err_t drv_spi_display_init(void);

void spi_display_set_window(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);

fsp_err_t drv_spi_display_flush_data(uint8_t * data, uint32_t len);

#endif /*DRV_SPI_DISPLAY_H*/

4.4 编写app

02_dshanmcu_ra6m5_spi_display\dshanmcu_ra6m5\applications 目录下新建 app_spi_display_test.c 文件,如下图所示:

04_瑞萨GUI(LVGL)移植实战教程之驱动LCD屏(SPI),瑞萨MCU基础入门教程,单片机,嵌入式硬件,LVGL,瑞萨

打开 app_spi_display_test.c 添加如下代码:

/***********************************************************************************************************************
 * Includes
 **********************************************************************************************************************/
#include "app.h"
#include "drv_uart.h"
#include "drv_spi_display.h"
#include <stdio.h>

/**********************************************************************************************************************
 * Macro definitions
 **********************************************************************************************************************/

/**********************************************************************************************************************
 * Typedef definitions
 **********************************************************************************************************************/


/***********************************************************************************************************************
 * Private function prototypes
 **********************************************************************************************************************/
static void spi_display_show_color(uint16_t color_le);

/***********************************************************************************************************************
 * Private global variables
 **********************************************************************************************************************/

/***********************************************************************************************************************
 * Functions
 **********************************************************************************************************************/
void app_spi_display_test(void)
{
    fsp_err_t err;

    err = drv_uart_init();
    if(FSP_SUCCESS != err) __BKPT();

    err = drv_spi_display_init();
    if(FSP_SUCCESS != err)
    {
        printf ("%s %d\r\n", __FUNCTION__, __LINE__);
        __BKPT();
    }

    while(1)
    {
        spi_display_show_color((uint16_t)LCD_COLOR_RED);
        printf ("Full screen display in red\r\n");
        R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS); //延时500ms

        spi_display_show_color((uint16_t)LCD_COLOR_GREEN);
        printf ("Full screen display in green\r\n");
        R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS); //延时500ms

        spi_display_show_color((uint16_t)LCD_COLOR_BLUE);
        printf ("Full screen display in blue\r\n");
        R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS); //延时500ms
    }

}


static void spi_display_show_color(uint16_t color_le)
{
    uint8_t color_be[2];
    color_be [0] = (uint8_t)((color_le & 0xff00) >> 8);
    color_be [1] = (uint8_t)(color_le & 0xff);

    spi_display_set_window(0, 0, LCD_SCREEN_WIDTH, LCD_SCREEN_HEIGHT);

    for(uint16_t x = 0; x < LCD_SCREEN_WIDTH; x++)
        for(uint16_t y = 0; y < LCD_SCREEN_HEIGHT; y++)
            drv_spi_display_flush_data(color_be, 2);
}
/***********************************************************************************************************************
 * Private Functions
 **********************************************************************************************************************/

app.h 改为如下代码:

#ifndef APP_TEST_H
#define APP_TEST_H

/***********************************************************************************************************************
 * Includes
 **********************************************************************************************************************/
#include "hal_data.h"

/**********************************************************************************************************************
 * Macro definitions
 **********************************************************************************************************************/

/**********************************************************************************************************************
 * Typedef definitions
 **********************************************************************************************************************/

/***********************************************************************************************************************
 * Exported global variables
 **********************************************************************************************************************/

/***********************************************************************************************************************
 * Exported global functions (to be accessed by other files)
 **********************************************************************************************************************/

void app_uart_test(void);

void app_i2c_touchpad_test(void);

void app_spi_display_test(void);

#endif /*APP_TEST_H*/

4.5 调用app

打开 02_dshanmcu_ra6m5_spi_display\src\hal_entry.c ,按照如下步骤进行修改:

hal_entry 函数修改为如下所示的代码:

void hal_entry(void)
{
    /* TODO: add your own code here */
    //app_uart_test();
    //app_i2c_touchpad_test();
    app_spi_display_test();

#if BSP_TZ_SECURE_BUILD
    /* Enter non-secure code */
    R_BSP_NonSecureEnter();
#endif
}

4.6 验证效果

点击编译按钮,再点击 debug 按钮,将程序烧写到开发板中。会看到屏幕依次循环刷红、绿、蓝三种颜色。

【拓展】为什么要交换RGB565颜色数据两个字节的顺序

04_瑞萨GUI(LVGL)移植实战教程之驱动LCD屏(SPI),瑞萨MCU基础入门教程,单片机,嵌入式硬件,LVGL,瑞萨文章来源地址https://www.toymoban.com/news/detail-704760.html

本节完

到了这里,关于04_瑞萨GUI(LVGL)移植实战教程之驱动LCD屏(SPI)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于驱动中景园LCD和LVGL踩的一些坑

    我使用的是中景园的1.3寸,240*240的LCD,主控是STM32L152系列 https://item.taobao.com/item.htm?spm=3688y.1.14.16.1916264bJ5QnqCid=565591692266ns=1abbucket=2#detail 开始以为驱动这个屏幕应该不难,因为有例程,结果第一坑就来了。我使用的是STM32L152系列,刚好有个PB12~PB15这对SPI2引脚引出,就把屏幕接

    2024年02月06日
    浏览(27)
  • FPGA驱动SPI接口的LCD(三)——LCD的初始化

    LCD初始化函数 void LCD_Init(void);  首先是LCD的复位 void LCD_RESET(void) {     LCD_RST_CLR;        //拉低复位引脚     Delay_Ms(100);        //延时100ms         LCD_RST_SET;        //拉高复位引脚     Delay_Ms(50);        //延时50ms } 向LCD屏幕写入一个8位命令 void LCD_WR_REG(u8 data) {     

    2024年02月01日
    浏览(39)
  • U-Boot移植 (2)- LCD 驱动修改和网络驱动修改

    链接: C/C++Linux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂 一般 uboot 中修改驱动基本都是在 xxx.h 和 xxx.c 这两个文件中进行的, xxx 为板子名称,即 board/freescale/mx6ull_myboard/mx6ull_myboard.c 和 include/configs/mx6ull_myboard.h 这两个文件。 一般修改 LCD 驱动重点注意以下

    2024年02月12日
    浏览(56)
  • STM32 RGB屏幕驱动+LVGL移植 从底层到应用小项目

    项目使用正点原子STM32F767阿波罗开发板+IPS TFT-LCD屏幕(非正点原子屏幕)进行开发,应用层移植轻量级GUI库LVGL实现列表按键点击,切换,显示当前内部工作电压功能。重点在于对于RGB屏幕驱动普适性的学习和LVGL开发的理解。希望我实习期间的项目学习过程能对大家有所帮助

    2024年02月15日
    浏览(34)
  • stm32 hal库硬件spi(软件spi)驱动1.8寸tft—lcd屏幕

    屏幕是嵌入式开发中的一个重要的部分,cdsn上有许多解释原理的,还有很多是采用正点原子的屏幕来驱动的,对于刚刚入门不久的我们可能没有资金去购买较为昂贵的屏幕。而对于底层原理我们暂时也不必了解的那么深入,能点亮屏幕就是我们最大的快乐。 除了中景园的资

    2024年02月03日
    浏览(50)
  • linux驱动开发 ST7789 LCD驱动移植(I.MX6ULL平台)

    前言 I.MX6ULL的板子未选配RGB的屏幕,无法在板子上进行GUI的开发调试,不过手头上有块控制器为ST7789V3的LCD屏幕(1.3inch),通过简易接线后可以很方便进行驱动的移植 如有异议,欢迎留言指正 ST7789 LCD控制器 ST7789是一款单芯片TFT-LCD控制器,支持并口与SPI通信方式 特性 控制器支

    2023年04月09日
    浏览(81)
  • STM32H5开发(6)----SPI驱动TFT-LCD屏

    在嵌入式领域,TFT-LCD屏是最常用的显示解决方案之一,因为它们提供了丰富的颜色和高分辨率的图像显示能力。STM32H5作为ST的高性能微控制器系列,具备了强大的处理能力和多种通信接口,非常适合于驱动TFT-LCD显示屏,该液晶屏st7796或者ILI9488驱动芯片,这两个屏幕都是兼容

    2024年02月05日
    浏览(41)
  • 权智A133P 安卓10移植SPI转串WK2124驱动

    主控CPU通过SPI总线与WK2XXX芯相连接。WK2XXX控制4个UART的数据收发。 其中重要的参数有CS片选线和IRQ中断引脚。 当WK2XXX驱动在内核注册成功后,会在/dev目录下面生成ttysWK0,ttysWK1,ttysWK2,ttysWK3节点。上层通过open,read,write调用ttysWK。 一般来说 tty 架构可以分成两层:一层是下层我们

    2024年02月16日
    浏览(34)
  • 1.8寸TFT LCD128X160 ST7735S SPI串口屏驱动示例

    🌼1.8寸TFT LCD128X160 ST7735S SPI串口屏 📚屏幕驱动资料1 以下是由中景园提供的,里面包含了: 由于购买的是合宙的1.8寸TFT LCD128X160 ST7735S SPI串口屏随同ESP32C3一起购买的,价格是9.9RMB,比起中景园的相同规格的屏幕是16.5RMB,性价比还是很高的。 🛠汉字取模方式和软件 🔧 PCto

    2024年01月22日
    浏览(39)
  • STM32移植LVGL8.0.2超详细的保姆级教程附移植好的工程文件

    网上教程那么多,为什么你要写这个教程? 问的好,csnd上很多类似的教程,他们写的都很好,但是有些过于简洁,对刚上手的小伙伴不太友好,移植到一半遇到bug就想放弃。一些第三方的教程很详细,但是由于lvgl的版本迭代很快,移植的过程有了一些变化,所谓失之毫厘差

    2024年02月03日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包