实战目标
- 实现屏幕显示
- 实现屏幕触摸
实战中使用的是聆思命令行指令和sample实例,可以参考《聆思CSK6开发工具简介》进行一键部署。
进行本文的学习前可以先进行《Zephyr设备树保姆级上手教程【下】》中编写LCD显示屏节点的实践。
CSK6 显示套件信息
- 显示屏型号:ST7789V
- 尺 寸:2.8寸
- 分辨率:320*240
- 触摸屏型号:FT5336
实现屏幕显示
相关文件
以下为配置相关的文件,文件的修改和使用详解可以点击【导读目录】获取
- CSK6 SDK中将显示模块定义为Display。
- LCD显示屏Kconfig文件:csk6-sdk/zephyr/drivers/display/Kconfig.st7789v
- LCD显示屏设备树绑定文件:csk6-sdk/zephyr/dts/bindings/display/sitronix,st7789v.yaml
- LCD显示屏设备树配置文件:lvgl_demo/boards/csk6011a_nano.overlay
- LCD显示屏驱动文件: csk6-sdk/zephyr/drivers/display/display_st7789v.c csk6-sdk/zephyr/drivers/display/display_st7789v.h
驱动调用/配置
我们以应用层调用display_write接口写入颜色块数据到显示屏的实现过程为示例看驱动的调用流程。 显示屏的驱动中实现了display_driver_api接口,并通过Include/drivers/display.h封装调用接口供上层应用使用。
注意: 在csk6 sdk的drivers/display目录中可看到sdk已完成了ST7789V、ILI9844等型号屏显设备驱动的适配,开发者只需要在应用开发中完成驱动的配置即可使用显示屏功能。
创建Sample
CSK6 SDK提供了Display的sample,在这个Display例程中,主程序对显示屏进行了初始化,并依次展示简单图形的绘制和图形的动态灰度调整功能。
- Sample的获取方式:lisa zep create
- Sample路径:boards → csk6 → driver → display_kscan
ST7789V 显示屏SPI引脚定义:
- 打开display_kscan\boards\csk6011a_nano.overlay 文件;
- 将&pinctrl 的配置替换为以下内容后保存。
&csk6011a_nano_pinctrl{
pinctrl_spi0_sclk_default: spi0_sclk_default {
pinctrls = <&pinmuxb 1 6>;
};
pinctrl_spi0_mosi_default: spi0_mosi_default {
pinctrls = <&pinmuxb 10 6>;
};
pinctrl_spi0_miso_default: spi0_miso_default {
pinctrls = <&pinmuxa 17 6>;
};
pinctrl_spi0_cs_default: spi0_cs_default {
pinctrls = <&pinmuxb 0 6>;
};
};
验证配置:
进入display_kscan目录,执行编译和烧录指令后可以看到如下界面,且右上角色块循环变化颜色
- 执行编译:lisa zep build -b csk6011a_nano
- 烧录指令:lisa zep flash
添加显示屏自定义驱动
在实际项目中我们可以把LCD屏的驱动放在应用项目中去维护,按以下几个步骤就可以实现。(详细讲解请见相关视频)
1.添加自定义LCD 屏的设备树绑定文件: sitronix,st7789v.yaml
2.在应用项目下增加自定义LCD 屏的驱动文件:
- display_st7789v.c
- display_st7789v.h
3.在应用项目下增加自定义LCD 屏的Kconfig文件:Kconfig
4.在CMakeLists.txt添加屏幕驱动的文件路径
list(APPEND ZEPHYR_EXTRA_MODULES
${CMAKE_CURRENT_SOURCE_DIR}/drivers/st7789v
)
5.在应用项目下boards/csk6011a_nano.overlay增加自定义LCD 屏的设备树配置。
6.添加的文件结构如下所示
实现屏幕触摸
相关文件
以下为配置相关的文件,文件的修改和使用可以参考视频解说:
- CSK6 SDK中将触摸模块定义为Kscan(keyboard scan matrix)。
- 触摸屏Kconfig文件:csk6-sdk/zephyr/drivers/kscan/Kconfig.ft5336
- 触摸屏设备树绑定文件:csk6-sdk/zephyr/dts/bindings/kscan/ focaltech,ft5336.yaml
- 触摸屏设备树配置文件:lvgl_demo/boards/csk6011a_nano.overlay
- 触摸屏驱动文件: csk6-sdk/zephyr/drivers/kscan/kscan_ft5336.c csk6-sdk/zephyr/drivers/kscan/kscan_ft5336.h
驱动调用/配置
在csk6 sdk的drivers/display目录中可看到sdk已完成了BL6XXX(kscan_bl6xxx.c) 、ft5336(kscan_ft5336.c)等型号触摸屏设备驱动的适配,开发者只需要在应用开发中完成驱动的配置即可使用触摸屏功能。 下面是应用层通过触摸回调接口获取触摸点坐标的实现过程。
创建Sample
CSK6 SDK提供了Kscan的sample,在这个Kscan例程中,主程序对触摸屏初始化,注册触摸事件的回调,通过回调结果获取触摸点的坐标并输出日志。
- sample的获取方式:lisa zep create
- Sample路径:boards → csk6 → driver → display_kscan
FT5336 触摸屏IIC引脚定义
overlay文件修改参考
&csk6011a_nano_pinctrl{
pinctrl_i2c0_scl_default: i2c0_scl_default{
pinctrls = <I2C0_SCL_GPIOB_04>;
};
pinctrl_i2c0_sda_default: i2c0_sda_default{
pinctrls = <I2C0_SDA_GPIOB_03>;
};
};
示例代码获取地址:https://cloud.listenai.com/listenai_xqqin/lvgl_demo或通过支持简介获得对应代码支持
触摸屏自定义驱动的添加
1.添加自定义触摸屏的设备树绑定文件:focaltech,ft5336c.yaml
2.在应用项目下增加自定义触摸屏的驱动文件: kscan_ft5336.c
3.在应用项目下增加自定义触摸屏的Kconfig文件:Kconfig
4.在CMakeLists.txt添加屏幕驱动的文件路径 list(APPEND ZEPHYR_EXTRA_MODULES ${CMAKE_CURRENT_SOURCE_DIR}/drivers/ft5336 )
5.在应用项目下boards/csk6011a_nano.overlay增加自定义触摸屏的设备树配置。
6.编译烧录后连接串口,触摸屏幕后会看到串口输出的日志中会出现如下图所示的坐标信息
更多学习资源
如果需要获取本教程相关的学习资源、代码,
或者了解更多与嵌入式开发、AI芯片相关的其他课程,可以点击查看目录导航。