基于ESP32的8位MCU并口硬件与软件设计实现(ST7789V驱动)

ESP购买链接:https://item.taobao.com/item.htm?spm=a21n57.1.0.0.ec89523cf3YSyG&id=599333795323&ns=1&abbucket=6#detail
屏幕购买链接:【淘宝】https://m.tb.cn/h.567SPlX?tk=8PZlWYP7BOE CZ3457 「2.4寸TFT显示屏24p插接MCU并口8位16位工控品质7789推荐LCD液晶屏」
点击链接直接打开 或者 淘宝搜索直接打开

最终效果图:
效果图

第一部分:下载电路

下载电路
上图为程序自动下载电路,无需按下boot键即可下载程序。设计时注意SS8050射极连接方式不要颠倒了。此处的EN_RST脚还需加电容与电阻构成缓启动电路,在电源供电后缓慢使能,保证CPU正常启动。此处两个0R电阻为了调试方便所设,可以不加。
使能脚设计
官方推荐EN_RST引脚(即使能重启脚,又名EN脚或RST脚)所接电容电阻值为:10kR、1uF。选择1uF电容时注意封装尺寸,因为1uF电容小封装高耐压型号较少。
CH340C芯片
此处采用Type-C接口进行USB连接,功能主要为程序下载功能。此处CH340C采用3.3V供电,因此V3脚亦应当接3.3v(根据数据手册)。RTS与DTR用于控制一键下载电路。
最最最重要的是!!!!!!,想要使用一键下载电路 IO2引脚一定要悬空,如果IO2做了其他功能用一定要加上下面这部分电路,进行手动BOOT下载
手动BOOT电路
因为根据官方数据手册,下载时各个引脚电平如下:

官方IO2定义
因此,如果IO2在外部被上拉,则会报错下载模式错误(0x3b)。

第二部分:电源设计

降压电路
降压电路采用较为通用的AMS117电路,可供LCD与ESP32供电,ESP32功耗3.3V下24mA,LCD功耗3.3V下220mA

第三部分:LCD外围电路设计

背光电路采用从AMS117处引出的3.3V电压进行供电,通过一个PMOS进行开闭,高电平时开启。
背光电路
除去一些基础引脚直接接入ESP32外,某些引脚进行了上拉或下载操作,例如下图所示,将RST(LCD重置引脚)进行上拉,将CS(LCD片选引脚进行下拉),由于读取功能使用不到,此处#RD引脚进行上拉禁止,#WR作为PCLK时钟线使用。
LCD接口

第四部分:结果视频

视频效果Bilibli观看

第五部分:软件部分开发

基于官方LCD-i80工程进行修改。主要修改部分为:

#define EXAMPLE_LCD_BK_LIGHT_ON_LEVEL 1
#define EXAMPLE_LCD_BK_LIGHT_OFF_LEVEL !EXAMPLE_LCD_BK_LIGHT_ON_LEVEL
#define EXAMPLE_PIN_NUM_DATA0 32
#define EXAMPLE_PIN_NUM_DATA1 33
#define EXAMPLE_PIN_NUM_DATA2 25
#define EXAMPLE_PIN_NUM_DATA3 26
#define EXAMPLE_PIN_NUM_DATA4 27
#define EXAMPLE_PIN_NUM_DATA5 14
#define EXAMPLE_PIN_NUM_DATA6 12
#define EXAMPLE_PIN_NUM_DATA7 13
#if CONFIG_EXAMPLE_LCD_I80_BUS_WIDTH > 8
#define EXAMPLE_PIN_NUM_DATA8 14
#define EXAMPLE_PIN_NUM_DATA9 15
#define EXAMPLE_PIN_NUM_DATA10 16
#define EXAMPLE_PIN_NUM_DATA11 17
#define EXAMPLE_PIN_NUM_DATA12 18
#define EXAMPLE_PIN_NUM_DATA13 19
#define EXAMPLE_PIN_NUM_DATA14 20
#define EXAMPLE_PIN_NUM_DATA15 21
#endif
#define EXAMPLE_PIN_NUM_PCLK 17
#define EXAMPLE_PIN_NUM_CS 4
#define EXAMPLE_PIN_NUM_DC 16
#define EXAMPLE_PIN_NUM_RST 18
#define EXAMPLE_PIN_NUM_BK_LIGHT 5

// The pixel number in horizontal and vertical
#define EXAMPLE_LCD_H_RES 240
#define EXAMPLE_LCD_V_RES 320

根据原理图修改引脚功能定义
重要的是:需要将示例中的上方20pix的gap改为零,同时如果出现显示镜像的问题通过以下函数进行修改。

#if CONFIG_EXAMPLE_LCD_I80_CONTROLLER_ST7789
    ESP_LOGI(TAG, "Install LCD driver of st7789");
    esp_lcd_panel_dev_config_t panel_config = {
        .reset_gpio_num = EXAMPLE_PIN_NUM_RST,
        .rgb_endian = LCD_RGB_ENDIAN_RGB,
        .bits_per_pixel = 16,
    };
    ESP_ERROR_CHECK(esp_lcd_new_panel_st7789(io_handle, &panel_config, &panel_handle));

    esp_lcd_panel_reset(panel_handle);
    esp_lcd_panel_init(panel_handle);
    // Set inversion, x/y coordinate order, x/y mirror according to your LCD module spec
    // the gap is LCD panel specific, even panels with the same driver IC, can have different gap value
    esp_lcd_panel_mirror(panel_handle, true, false);
    esp_lcd_panel_invert_color(panel_handle, false);
    esp_lcd_panel_swap_xy(panel_handle, false);
    esp_lcd_panel_set_gap(panel_handle, 0, 0);

如果采用不同驱动芯片可前往panel初始化的函数内进行修改。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
驱动 ST7789 显示屏,您需要使用 ESP32 的 SPI 接口。以下是基本步骤: 1. 首先,您需要连接 ESP32 和 ST7789。连接方式如下: - SCL -> SPI_CLK - SDA -> SPI_MOSI - CS -> SPI_CS - RES -> ESP32 GPIO - DC -> ESP32 GPIO - BLK -> 3.3V 2. 您需要在 ESP32 上安装 SPI 库。您可以通过 Arduino IDE 的“库管理器”搜索并安装它。 3. 在您的 Arduino 代码中,您需要包含 SPI 库的头文件和 ST7789 库的头文件。 4. 您需要初始化 SPI 总线,设置 SPI 模式和数据位宽,以及设置 CS 引脚的状态。 5. 您需要初始化 ST7789 显示屏,设置显示模式、方向和像素格式等参数。 6. 您可以使用 ST7789 库提供的函数来绘制图形和文本。 下面是一个简单的示例代码: ```C++ #include <SPI.h> #include <ST7789.h> #define ST7789_CS 5 #define ST7789_DC 16 #define ST7789_RST 17 ST7789 display = ST7789(ST7789_CS, ST7789_DC, ST7789_RST); void setup() { Serial.begin(115200); // 初始化 SPI 总线 SPI.begin(); // 设置 SPI 模式和数据位宽 SPI.beginTransaction(SPISettings(4000000, MSBFIRST, SPI_MODE0)); // 设置 CS 引脚的状态 pinMode(ST7789_CS, OUTPUT); digitalWrite(ST7789_CS, LOW); // 初始化 ST7789 显示屏 display.init(240, 240); display.setRotation(1); display.fillScreen(ST7789_BLACK); } void loop() { // 在屏幕上显示 Hello World! display.setCursor(0, 0); display.setTextColor(ST7789_WHITE); display.setTextSize(2); display.println("Hello World!"); delay(1000); } ``` 这个示例代码使用了 ST7789 库来驱动 ST7789 显示屏。在 `setup()` 函数中,我们初始化了 SPI 总线并设置 CS 引脚的状态。然后,我们初始化了 ST7789 显示屏,并将其旋转了 90 度。在 `loop()` 函数中,我们在屏幕上显示了一段文字。您可以根据需要修改代码以绘制不同的图形和文本。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值