问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

ESP32C6使用ESP-IDF5.4驱动ST7789V屏幕的完整指南

创作时间:
作者:
@小白创作中心

ESP32C6使用ESP-IDF5.4驱动ST7789V屏幕的完整指南

引用
CSDN
1.
https://m.blog.csdn.net/u011493046/article/details/145658273

本文详细介绍了如何使用ESP-IDF 5.4框架在ESP32C6开发板上驱动ST7789V液晶显示屏。从硬件连接到软件配置,再到具体的代码修改和调试,提供了完整的步骤和解决方案。

前言

没想到这个系列还有续集,这次是为了WIFI6站未来,再包一顿饺子。PCB是自己画的,屏幕和esp32c6核心板都是某信买的。本文主要用于记录整个适配的过程,仅供参考。

效果



硬件

如标题所示,主要用到的是下面这两个器件
ESP32-C6是乐鑫科技首款集成Wi-Fi 6+Bluetooth 5(LE)的32位RISC-V SoC,具有极低功耗和高性价比,能够大幅提升物联网设备的Wi-Fi传输效率,提供安全可靠的连接性能。

硬件连接如下所示

软件环境依赖

  • ESP-IDF 5.4
  • Git
  • VSCODE

驱动移植适配

根据本教程操作,不到1小时轻松点亮

1、获取示例工程

注意:这步需要能够正常访问Github,如果拉取代码失败需要检查网络环境。我拉取的是master分支,不同版本可能会有差异

git clone --recurse-submodules https://github.com/lvgl/lv_port_esp32.git

成功后如下图所示

2、配置项目

芯片平台配置

点一下下面的芯片平台和端口,给改成ESP32C6
下载调试端口根据实际情况修改,我这是直接用的USB,没用usb转串口(没用CH340)
改好长这样

LVGL配置

改屏幕的基本参数,我这个屏幕的话是改成240*240


这款屏幕用这套参数


下面这个参数控制要不要显示cpu占用率和FPS

ST7789屏幕驱动配置

实际验证ST7789V这个驱动芯片可以直接使用官方的驱动进行驱动,需要额外开发的代码很少,先改SDK的默认配置,如下所示
接下来就是根据硬件电路的连接调整对应的功能引脚配置,参考如下:
调完记得点下保存

3、编译&移植项目

修改完上述的问题后可以尝试进行首次编译,不出意外应该会报下面的错

接口改名

D:/CSDN/lv_port_esp32/components/lvgl_esp32_drivers/lvgl_tft/st7789.c: In function 'st7789_init':
D:/CSDN/lv_port_esp32/components/lvgl_esp32_drivers/lvgl_tft/st7789.c:91:5: error: implicit declaration of function 'gpio_pad_select_gpio'; did you mean 'esp_rom_gpio_pad_select_gpio'? [-Wimplicit-function-declaration]
   91 |     gpio_pad_select_gpio(ST7789_DC);
      |     ^~~~~~~~~~~~~~~~~~~~
      |     esp_rom_gpio_pad_select_gpio
D:/CSDN/lv_port_esp32/components/lvgl_esp32_drivers/lvgl_tft/st7789.c:107:22: error: 'portTICK_RATE_MS' undeclared (first use in this function); did you mean 'portTICK_PERIOD_MS'?
  107 |     vTaskDelay(100 / portTICK_RATE_MS);
      |                      ^~~~~~~~~~~~~~~~
      |                      portTICK_PERIOD_MS

这个是因为demo项目是基于ESP-IDF的4.4,而在ESP-IDF5.x中,这个函数和定义名已经改了,需要将
gpio_pad_select_gpio
全局替换成
esp_rom_gpio_pad_select_gpio
,如下图所示
portTICK_RATE_MS
也需要替换为新版本库中的
portTICK_PERIOD_MS

SPI硬件适配

这部分代码报错是因为demo不支持ESP32C6导致的,差异主要是硬件上带来的,需要修改代码逻辑以支持

In file included from D:/CSDN/lv_port_esp32/components/lvgl_esp32_drivers/lvgl_helpers.c:11:
D:/CSDN/lv_port_esp32/components/lvgl_esp32_drivers/lvgl_helpers.c: In function 'lvgl_spi_driver_init':
D:/CSDN/lv_port_esp32/components/lvgl_esp32_drivers/lvgl_helpers.c:219:51: error: 'spi_names' undeclared (first use in this function)
  219 |     ESP_LOGI(TAG, "Configuring SPI host %s (%d)", spi_names[host], host);
      |                                                   ^~~~~~~~~

以上的报错需要修改
components/lvgl_esp32_drivers/lvgl_helpers.c
,异常的原因是没有支持ESP32C6的SPI通道

In file included from D:/CSDN/lv_port_esp32/components/lvgl_esp32_drivers/lvgl_helpers.h:17,
                 from D:/CSDN/lv_port_esp32/components/lvgl_esp32_drivers/lvgl_helpers.c:10:
D:/CSDN/lv_port_esp32/components/lvgl_esp32_drivers/lvgl_helpers.c: In function 'lvgl_driver_init':
D:/CSDN/lv_port_esp32/components/lvgl_esp32_drivers/lvgl_spi_conf.h:68:22: error: 'HSPI_HOST' undeclared (first use in this function); did you mean 'SPI2_HOST'?
   68 | #define TFT_SPI_HOST HSPI_HOST
      |                      ^~~~~~~~~

这部分需要修改
components\lvgl_esp32_drivers\lvgl_spi_conf.h
,VSPI和HSPI在ESP32C6的库里面没定义,这里直接改成1就行

库编译问题

D:/CSDN/lv_port_esp32/main/main.c: In function 'guiTask':
D:/CSDN/lv_port_esp32/main/main.c:142:11: error: unknown type name 'esp_timer_create_args_t'
  142 |     const esp_timer_create_args_t periodic_timer_args = {
      |           ^~~~~~~~~~~~~~~~~~~~~~~

以上问题在
main.c
里面多加个
esp_timer.h
头文件

4、解决运行时异常

完成上述步骤后,不出意外下载后应该会出现内核panic(单片机的赛博内核崩了)
这个异常的原因是运行时的CPU内核配置有问题,C6是个单核心处理器,只有CPU0,demo里面是将ui放在CPU1上运行导致的异常


修改完不出意外又崩了
这个问题是SPI通道配置的问题,C6上使用SPI+DMA需要将
components\lvgl_esp32_drivers\lvgl_helpers.c
中的这部分代码改为自动DMA通道
SPI_DMA_CH_AUTO
修改完上述问题后,再次烧录就不会再报错了

5、屏幕驱动调整

如果你和我用的是同款屏幕,到这里不出意外的话这个屏幕应该还是黑着的,只有背光亮了
这一步我一度怀疑是我的硬件有问题,毕竟代码运行没有报错,后面我实际用示波器测量了SPI上数据和时钟线的波形,发现实际的波形与屏幕手册上的不符合,需要对下面的代码做调整(说好的ST7789兼容ST7789V呢…😅😅😅)
改好后再下载,屏幕轻松点亮,默认跑的是demo

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号