这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【瑞萨RA8D1LVGL/LWIP评测】基于ST7796SPI的LVGL的移植

共1条 1/1 1 跳转至

【瑞萨RA8D1LVGL/LWIP评测】基于ST7796SPI的LVGL的移植

高工
2026-01-20 08:12:52     打赏

【前言】

CPKEXP-EKRA8X1带了一个基于st7796的mipi屏,但是没有触摸屏,因此采用外接ST7796+GT911的屏来进行移植

【目标】

瑞萨RA8D1 LVGL移植,基于硬件SPI+st7796

【开发环境】

win11

【硬件】

1、CPKCOR-RA8D1B核心板

2、拓展板(CPKEXP-EKRA8X1)

3、ST7796 SPI屏

【开发工具】

1、keil+fsp

【工程准备】

准备一个基于ra8d1的led工程。

【硬件连接】

CPKEXP-EKRA8X1带有标准的arduino接口,因此采用其接口进行使用,结合开发板原图,我使用SPI1进行驱动,其连接如下:

P412——SCK

P410——MOSI

P413——CS

PA07——DC

P504——RST

P505——BLK

【RASC配置】

image.png

时钟极性配置为模式0,即空闲是SCK、MOSI均为低电平。

接下来配置DC、CS、RST、BLK为输出模式

image.png

【代码移植】

1、复制以前在瑞萨其余RA系列上驱动好的st7796的代码到工程中。

2、修改SPI实例

// SPI实例
extern spi_b_instance_ctrl_t g_spi1_ctrl;

ra8d1的spi驱动与其他的RA系列不同的是少了_b。

3、修改CS、DC、RST、BLK的宏定义

// 引脚操作宏定义
#define CS_SET     R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_13, BSP_IO_LEVEL_HIGH)
#define CS_CLR     R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_13, BSP_IO_LEVEL_LOW)
#define DC_SET     R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_10_PIN_07, BSP_IO_LEVEL_HIGH)
#define DC_CLR     R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_10_PIN_07, BSP_IO_LEVEL_LOW)
#define RST_SET    R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_05_PIN_04, BSP_IO_LEVEL_HIGH)
#define RST_CLR    R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_05_PIN_04, BSP_IO_LEVEL_LOW)
#define BL_SET     R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_05_PIN_05, BSP_IO_LEVEL_HIGH)
#define BL_CLR     R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_05_PIN_05, BSP_IO_LEVEL_LOW)

4、修改spi发送函数

// 发送命令
static void st7796_send_command(uint8_t cmd)
{
    DC_CLR;  // 命令模式
    CS_CLR;  // 选中LCD
    
    // 发送命令
    R_SPI_B_Write(&g_spi1_ctrl, &cmd, 1, SPI_BIT_WIDTH_8_BITS);
    
    // 等待发送完成
    SPIWaitgtc();

    CS_SET;  // 取消选中
}

【注】这里也是一样RA8D1的spi驱动有spi_b与spi_a的区别。

其余代码均不需要变动,代码我会附源码。

【添加LVGL】

在mkd的manage Run-Time Environment中钩选Essential与Porting

image.png

【注】在mdk的lvgl V9中,在编译是会报错:

assembling lv_blend_helium.S...
lv_blend_helium.S: error: A3903U: Argument 'NOT_SUPPORTED' not permitted for option 'cpu'.

【lvgl配置】

1、打开lv_port_display_template.h/c的#if 1,引入st7796的驱动头文件。

image.png

2、添加画点函数

st7796_draw_pixel(x, y, color_p->full);

【测试与验证】

在hal_entry.c中添加测试标签代码:

void hal_entry(void)
{


    /* LED type structure */
		st7796_init();
	  st7796_fill_screen(BLUE);
	  lv_init();
	
	  lv_port_disp_init(); 
	
		// --- 1. 创建标签对象 (只传入父对象) ---
		lv_obj_t * label = lv_label_create(lv_scr_act());

		// --- 2. 设置标签显示的文本 ---
		lv_label_set_text(label, "Hello World!");

		// --- 3. 让标签居中显示 ---
		lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);


    while (1)
    {
			  lv_timer_handler(); 
            R_BSP_SoftwareDelay(100u, BSP_DELAY_UNITS_MICROSECONDS);
    }
}

image.png

【总结】

通过RA生态的图形化配置与mdk的lvgl图形化配置,可以快速的移植基于spi_lcd的驱动。

【附工程源码】

LVGL_ST7796.zip





关键词: RA8D1LVGL     瑞萨     st7796    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]