【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


浙公网安备 33010602011771号