当前位置: 首页 > news >正文

解决 Arduino + ESP32C3+TFT_eSPI + ST7735 遇到的一些问题

开发环境

  • 合宙 ESP32C3 简约版
  • 合宙1.8寸 128x160 ST7735
  • PlatfromIO + Arduino
  • TFT_eSPI@^2.5.43

IMG_2163

UserSetup.h

首先贴一下点亮时的 UserSetup.h

#define USER_SETUP_INFO "User_Setup"
#define ST7735_DRIVER      // Define additional parameters below for this display
#define TFT_RGB_ORDER TFT_RGB  // Colour order Red-Green-Blue
#define TFT_WIDTH  128
#define TFT_HEIGHT 160
#define ST7735_REDTAB
#define TFT_BACKLIGHT_ON HIGH  // Level to turn ON back-light (HIGH or LOW)#define TFT_MOSI 3 // In some display driver board, it might be written as "SDA" and so on.
#define TFT_MISO 5 // 避 MOSI 锋芒
#define TFT_SCLK 2
#define TFT_CS   7  // Chip select control pin
#define TFT_DC   6  // Data Command control pin
#define TFT_RST  10  // Reset pin (could connect to Arduino RESET pin)
#define TFT_BL   11  // LED back-light#define LOAD_GLCD   // Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH
#define LOAD_FONT2  // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters
#define LOAD_FONT4  // Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters
#define LOAD_FONT6  // Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm
#define LOAD_FONT7  // Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:-.
#define LOAD_FONT8  // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-.
#define LOAD_GFXFF  // FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts
#define SMOOTH_FONT#define SPI_FREQUENCY  27000000#define SPI_READ_FREQUENCY  20000000#define SPI_TOUCH_FREQUENCY  2500000

本来想用 TFT_eSPI 试着点亮一下吃灰的合宙屏幕,结果芯片无限重启,在网上搜索一番,发现也有很多遇到相同的情况,在此整理一下

一 无限重启问题

找到 TFT_eSPi 库,修改 Processors 里的 TFT_eSPI_ESP32_C3.h 文件:
第一个修改 33行左右(后来我验证一下不改好像也没事,原理我也不懂):

#ifndef REG_SPI_BASE     #define REG_SPI_BASE(i) DR_REG_SPI2_BASE 
#endif

改为:

#ifdef REG_SPI_BASE#undef REG_SPI_BASE
#endif#define REG_SPI_BASE(i) (((i)==2) ? (DR_REG_SPI2_BASE) : (DR_REG_SPI0_BASE - ((i) * 0x1000)))

第二处修改 71行左右(此处修改完后不再无限重启):

#define SPI_PORT SPI2_HOST

改为:

#if ESP_ARDUINO_VERSION_MAJOR < 3#define SPI_PORT SPI2_HOST
#else#define SPI_PORT 2
#endif

二 白屏

经过第一步解决了芯片无限重启的问题,但是屏幕还是白屏,查看串口输出一段信息后就不再有动静了

ESP-ROM:esp32c3-api1-20210207  
Build:Feb  7 2021  
rst:0x15 (USB_UART_CHIP_RESET),boot:0xc (SPI_FAST_FLASH_BOOT)  
Saved PC:0x40383332  
SPIWP:0xee  
mode:DIO, clock div:1  
load:0x3fcd5820,len:0x1054  
load:0x403cc710,len:0x9d8  
load:0x403ce710,len:0x2e60  
entry 0x403cc710

先在 platformio.ini 中开启 CDC,这样合宙C3简约版才能通过USB打印串口信息

build_flags = -D ARDUINO_USB_CDC_ON_BOOT=1

用串口打印调试的老办法,发现程序是在 tft.init() 时 writecommand 这个函数卡住的,于是串口输出一下MOSI和MISO的引脚看看

Serial.println(TFT_MOSI);
Serial.println(TFT_MISO);

结果发现两个都是 3,默认下MISO设置为 3,把它修改为其它不用的引脚,再次烧录,点亮了。

三 图片颜色

选一张图片调整为 128x160,再用 lcd-image-converter 转换为 RGB565 C数组,转换得的数组签名如下

static const uint16_t image_data_Image[20480] = {。。。}

点亮之后,试着显示一张图片,发现图片显示一堆堆色块,勉强能看出个形状
在 User_Setup.h 中尝试修改一下设置,多次尝试下,总该有合适的

// 76行#define TFT_RGB_ORDER TFT_RGB  // Colour order Red-Green-Blue
//  #define TFT_RGB_ORDER TFT_BGR  // Colour order Blue-Green-Red// 102行
// #define ST7735_INITB
// #define ST7735_GREENTAB
// #define ST7735_GREENTAB2
// #define ST7735_GREENTAB3
// #define ST7735_GREENTAB128    // For 128 x 128 display
// #define ST7735_GREENTAB160x80 // For 160 x 80 display (BGR, inverted, 26 offset)
#define ST7735_ROBOTLCD       // For some RobotLCD Arduino shields (128x160, BGR, https://docs.arduino.cc/retired/getting-started-guides/TFT)
// #define ST7735_REDTAB
// #define ST7735_BLACKTAB
// #define ST7735_REDTAB160x80   // For 160 x 80 display with 24 pixel offset//116行
// #define TFT_INVERSION_ON
// #define TFT_INVERSION_OFF

开启 SwapBytes

  tft.setSwapBytes(true);tft.pushImage(0, 0, 128, 160, image_data_Image);

经过一番折腾,终于能正常显示图片了。

http://www.jsqmd.com/news/65083/

相关文章:

  • 完整教程:指针,数组,变量
  • 2025年度有实力的空气能十大品牌推荐:看哪家品牌售后服务优
  • 2025年评价高的洁净室吊顶FFU龙骨实力厂家TOP推荐榜
  • 2025年知名的抽屉阻尼托底轨/反弹阻尼托底轨厂家推荐及选购指南
  • 基本dos命令
  • 2025年知名的缓冲隐藏轨厂家实力及用户口碑排行榜
  • 2025年口碑好的电缆桥架小桥架/大跨距电缆桥架最新TOP厂家排名
  • 河北唐山市滦南县农村自建房公司深度测评,滦南县地区靠谱自建房公司权威度对比排行榜
  • 2025年度浙江省专升本机构TOP5权威测评:老牌机构与口碑
  • 2025年知名的两轴自动滚丝机厂家最新热销排行
  • 在河北唐山市滦南县老家农村盖房子,自建房公司哪家靠谱?滦南县靠谱自建房公司TOP6实用选择指南
  • 河北唐山滦南县农村自建房口碑推荐排行榜 2026年滦南县自建房公司权威测评优选
  • 2025年知名的多媒体沙盘模型厂家最新TOP排行榜
  • 2025年质量好的镀锌钢格栅排水沟厂家最新实力排行
  • 在天津市武清区老家农村盖房子,靠谱的自建房公司口碑推荐。天津市武清区自建房公司/机构权威测评推荐排行榜
  • 天津市武清区农村自建房找谁好?天津市武清区自建房公司/机构深度评测口碑推荐榜
  • 2025年知名的风管包裹防火板用户好评厂家排行
  • 2025年靠谱的胸针铆钉机厂家最新TOP排行榜
  • 在河北保定市涞源县老家农村盖房子,自建房公司哪家靠谱?涞源县靠谱自建房公司TOP6实用选择指南
  • 2025年12月能源中心自控系统,能耗管理自控系统,WEBS楼宇自控系统厂家推荐,工业级稳定性与节能效率双优榜!
  • 2025年热门的Z型输送机/全密封输送机优质厂家推荐榜单
  • 2025年12月自控系统,能源管理电力监控系统,电力监控能碳管理自控系统厂家推荐,工业电力监控核心品牌解析!
  • 固安县自建房找谁好?河北廊坊固安县自建房公司 / 机构深度评测口碑推荐榜​
  • 河北保定涞源县农村自建房公司实力TOP6排行榜。2026年涞源县自建房公司权威测评优选
  • 2025年耐用的显示器支架实力厂家TOP推荐榜
  • 完整教程:第十章、GPT1:Improving Language Understanding by Generative Pre-Training(代码部分)
  • 2025年性价比高的大单槽/厨房水槽大单槽厂家最新权威实力榜
  • 2026年河北省邢台市南宫市农村自建房推荐榜,图南建房宝领衔 六家实力公司赋能乡村宜居生活
  • 2025年云南地区AI广告企业排行榜,精选AI广告服务公司推
  • AI Agent 之 ReAct 范式:推理与行动的完美结合 - 详解