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

ESP购买链接:https://s.click.taobao.com/cxaDmvt
屏幕购买链接:https://s.click.taobao.com/U1WCmvt

最终效果图:
效果图

第一部分:下载电路

下载电路
上图为程序自动下载电路,无需按下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初始化的函数内进行修改。

物联沃分享整理
物联沃-IOTWORD物联网 » 基于ESP32的8位MCU并口硬件与软件设计实现(使用ST7789V驱动器)

发表评论