【NCS随笔】使用nRF54L15移植LVGL驱动ST7789屏幕

【NCS随笔】使用nRF54L15移植LVGL驱动ST7789屏幕

本文章使用nRF54L15,移植了LVGL驱动ST7789屏幕
个人资料联系我获取源码

nRF54L15作为Nordic新的旗舰芯片,支持最大32M的SPI和64M的sQSPI,今天分享一下使用32M的SPI添加LVGL组件驱动ST7789芯片

一、使用的外设

驱动是使用 nRF54L15 的高速SPI00 ,速率可以达到32M

需要注意的是,使用SPI00,
第一点,GPIO一点需要是使用P2的特定引脚,具体可以看我的博客
Nordic随笔】nRF54L15的引脚说明

第二点,需要使用高驱动模式

&pinctrl {

    spi21_default: spi21_default {
        group1 {
            psels = <NRF_PSEL(SPIM_MISO, 1, 14)>,
                    <NRF_PSEL(SPIM_MOSI, 1, 13)>,
                    <NRF_PSEL(SPIM_SCK, 1, 11)>;
            nordic,drive-mode = <NRF_DRIVE_H0H1>;
        };
    };

    spi21_sleep: spi21_sleep {
        group1 {
            psels = <NRF_PSEL(SPIM_MISO, 1, 14)>,
                    <NRF_PSEL(SPIM_MOSI, 1, 13)>,
                    <NRF_PSEL(SPIM_SCK, 1, 11)>;
            low-power-enable;
        };
    };
}

二、使用的初始代码

v3.1.0\zephyr\samples\subsys\display\lvgl
需要需要在这个例程添加驱动屏幕的设备树即可

三、修改设备树

添加spi设备

添加st7789节点

将display的节点改成st7789

/ {

	/delete-node/ leds;
	/delete-node/ buttons;
	/delete-node/ aliases;

    chosen {
        zephyr,display = &st7789v;
        // nordic,pm-ext-flash = &zd26q16;
        // user,ext-flash = &zd26q16;
    };


    mipi_dbi
    {
    compatible = "zephyr,mipi-dbi-spi";
    // spi-dev = <&spi21>;                          /* 你的 SPI 控制器 */
    spi-dev = <&spi00>;                          /* 你的 SPI 控制器 */
    dc-gpios = <&gpio1 5 GPIO_ACTIVE_HIGH>;
    reset-gpios = <&gpio1 6 GPIO_ACTIVE_LOW>;
    
    #address-cells = <1>;
    #size-cells = <0>;
    write-only;
    st7789v: st7789v@0 {
        compatible = "sitronix,st7789v";
        reg = <0>;
        mipi-max-frequency = <32000000>;
        mipi-mode = "MIPI_DBI_MODE_SPI_4WIRE";   /* 必须添加 */

        width  = <240>;
        height = <320>;
        x-offset = <0>;
        y-offset = <0>;

        vcom  = <0x3f>;
        gctrl = <0x35>;
        vrhs  = <0x12>;
        vdvs  = <0x20>;
        mdac  = <0x00>;
        gamma = <0x01>;
        colmod = <0x05>;     /* 16‑bit RGB565,对应你写的 COLMOD 0x55 */
        lcm   = <0x2c>;

        porch-param  = [0c 0c 00 33 33];
        cmd2en-param = [5a 69 02 01];
        pwctrl1-param = [a4 a1];
        pvgam-param   = [D0 04 0D 11 13 2B 3F 54 4C 18 0D 0B 1F 23];
        nvgam-param   = [D0 04 0C 11 13 2C 3F 44 51 2F 1F 1F 20 23];
        ram-param     = [00 F0];
        rgb-param     = [CD 08 14];

        };

    };

	control_pins {
		compatible = "dev-gpios";
		backlight_pin: backlight_pin {
			gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
			label = "back light pin";
		};
    };
};

SPI:

&spi00 {
    //cs-gpios = <&gpio2 5 GPIO_ACTIVE_LOW>;
      cs-gpios = <&gpio1 12 GPIO_ACTIVE_LOW>;
    pinctrl-0 = <&spi00_default>;
    pinctrl-1 = <&spi00_sleep>;
    max-frequency = <DT_FREQ_M(32)>;
};

四、测试

屏幕是320*240的,刷新率有点低,大屏估计得用QSPI
image

你的点赞、收藏和评论是对我最大的支持,有问题多多指教,如果有需要Nordic开发板、Nordic的芯片以及Nordic技术支持的可以在个人资料获取我的联系方式,感谢读者支持!
posted @ 2025-12-19 16:40  TedLee  阅读(0)  评论(0)    收藏  举报