ESP32-C3 LVGL(未完成)

一、Clone lvgl-esp32的支持包

网址在 https://github.com/lvgl/lv_port_esp32
git clone --recurse-submodules https://github.com/lvgl/lv_port_esp32.git,
可以参考READ ME来做

二、移动components

lv_port_esp32\components移动到esp-idf的get start 例子中
在这里插入图片描述

三、兼容修改

因为这个库,只支持esp32和s2,所以需要做一些兼容改动,使其兼容C3
另外,对于st7735s,这个驱动其实有些显示问题,还没解决
参考github的issue https://github.com/lvgl/lvgl/issues/532

  1. lvgl_spi_config.h中 将 TFT_SPI_HOST 改成 SPI2_HOST
#if defined (CONFIG_LV_TFT_DISPLAY_SPI_HSPI)
#define TFT_SPI_HOST SPI2_HOST
#elif defined (CONFIG_LV_TFT_DISPLAY_SPI_VSPI)
#define TFT_SPI_HOST VSPI_HOST
#elif defined (CONFIG_LV_TFT_DISPLAY_SPI_FSPI)
#define TFT_SPI_HOST FSPI_HOST
#endif
  1. lvgl_helpers.c中,增加esp32-c3的spi_name
#if defined (CONFIG_IDF_TARGET_ESP32)
    assert((SPI_HOST <= host) && (VSPI_HOST >= host));
    const char *spi_names[] = {
        "SPI_HOST", "HSPI_HOST", "VSPI_HOST"
    };
#elif defined (CONFIG_IDF_TARGET_ESP32S2)
    assert((SPI_HOST <= host) && (HSPI_HOST >= host));
    const char *spi_names[] = {
        "SPI_HOST", "", ""
    };
#elif defined (CONFIG_IDF_TARGET_ESP32C3)
const char *spi_names[] = {
	"SPI2_HOST", "", ""
};
#endif
  1. 对于一些初始化函数,例如我需要修改st7735s的初始化
    D:\ubshare\esp-idf\examples\lvgl_c3\components\lvgl_esp32_drivers\lvgl_tft\st7735s.c
void st7735s_init(void)
{
#ifdef CONFIG_LV_M5STICKC_HANDLE_AXP192
    i2c_master_init();
    axp192_init();
#endif

    lcd_init_cmd_t init_cmds[]={
		{ST7735_SWRESET, {0}, 0x80},         		// Software reset, 0 args, w/delay 150
		{ST7735_SLPOUT, {0}, 0x80},                 // Out of sleep mode, 0 args, w/delay 500
		//{ST7735_FRMCTR1, {0x01, 0x2C, 0x2D}, 3},    // Frame rate ctrl - normal mode, 3 args: Rate = fosc/(1x2+40) * (LINE+2C+2D)
		{ST7735_FRMCTR1, {0x02, 0x35, 0x36}, 3},    // Frame rate ctrl - normal mode, 3 args: Rate = fosc/(1x2+40) * (LINE+2C+2D)
		//{ST7735_FRMCTR2, {0x01, 0x2C, 0x2D}, 3},    // Frame rate control - idle mode, 3 args:Rate = fosc/(1x2+40) * (LINE+2C+2D)
		{ST7735_FRMCTR2, {0x02, 0x35, 0x36}, 3},    // Frame rate control - idle mode, 3 args:Rate = fosc/(1x2+40) * (LINE+2C+2D)
		//{ST7735_FRMCTR3, {0x01, 0x2C, 0x2D,0x01, 0x2C, 0x2D}, 6}, //Frame rate ctrl - partial mode, 6 args:Dot inversion mode. Line inversion mode
		{ST7735_FRMCTR3, {0x02, 0x35, 0x36,0x02, 0x35, 0x36}, 6},
		//{ST7735_INVCTR, {0x07}, 1},                 // Display inversion ctrl, 1 arg, no delay:No inversion
		{ST7735_INVCTR, {0x03}, 1},                 // Display inversion ctrl, 1 arg, no delay:No inversion
		
		{ST7735_PWCTR1, {0xA2,0x02, 0x84}, 3},      // Power control, 3 args, no delay:-4.6V AUTO mode
		
		{ST7735_PWCTR2, {0xC5}, 1},                 // Power control, 1 arg, no delay:VGH25 = 2.4C VGSEL = -10 VGH = 3 * AVDD
		//{ST7735_PWCTR3, {0x0A, 0x00}, 2},           // Power control, 2 args, no delay: Opamp current small, Boost frequency
		{ST7735_PWCTR3, {0x0d, 0x00}, 2},           // Power control, 2 args, no delay: Opamp current small, Boost frequency
		
		//{ST7735_PWCTR4, {0x8A,0x2A }, 2},           // Power control, 2 args, no delay: BCLK/2, Opamp current small & Medium low
		{ST7735_PWCTR4, {0x8D,0x2A }, 2},           // Power control, 2 args, no delay: BCLK/2, Opamp current small & Medium low
		
		//{ST7735_PWCTR5, {0x8A, 0xEE}, 2},           // Power control, 2 args, no delay:
		{ST7735_PWCTR5, {0x8d, 0xEE}, 2},           // Power control, 2 args, no delay:
		
		//{ST7735_VMCTR1, {0x0E}, 1},                 // Power control, 1 arg, no delay:
		{ST7735_VMCTR1, {0x03}, 1},                 // Power control, 1 arg, no delay:
#if ST7735S_INVERT_COLORS == 1
		{ST7735_INVON, {0}, 0},                     // set inverted mode
#else
 		{ST7735_INVOFF, {0}, 0},                    // set non-inverted mode
#endif

		{ST7735_COLMOD, {0x05}, 1},               	// set color mode, 1 arg, no delay: 16-bit color
		/*
		{ST7735_GMCTRP1, {0x02, 0x1c, 0x07, 0x12,
			0x37, 0x32, 0x29, 0x2d,
			0x29, 0x25, 0x2B, 0x39,
			0x00, 0x01, 0x03, 0x10}, 16},           // 16 args, no delay:
	*/		

	
		{ST7735_GMCTRP1, {0x12, 0x1c, 0x10, 0x18,
			0x33, 0x2c, 0x25, 0x28,
			0x28, 0x27, 0x2f, 0x3C,
			0x00, 0x03, 0x03, 0x10}, 16},           // 16 args, no delay:
			
			
			/*
		{ST7735_GMCTRN1, {0x03, 0x1d, 0x07, 0x06,
			0x2E, 0x2C, 0x29, 0x2D,
			0x2E, 0x2E, 0x37, 0x3F,
			0x00, 0x00, 0x02, 0x10}, 16},           // 16 args, no delay:
			*/
		{ST7735_GMCTRN1, {0x12, 0x1c, 0x10, 0x18,
			0x2d, 0x28, 0x23, 0x28,
			0x28, 0x26, 0x2f, 0x3B,
			0x00, 0x03, 0x03, 0x10}, 16},           // 16 args, no delay:
		{ST7735_NORON, {0}, TFT_INIT_DELAY},       	// Normal display on, no args, w/delay 10 ms delay
		{ST7735_DISPON, {0}, TFT_INIT_DELAY},       // Main screen turn on, no args w/delay 100 ms delay
		{0, {0}, 0xff}
    };

	//Initialize non-SPI GPIOs
        gpio_pad_select_gpio(ST7735S_DC);
	gpio_set_direction(ST7735S_DC, GPIO_MODE_OUTPUT);
        gpio_pad_select_gpio(ST7735S_RST);
	gpio_set_direction(ST7735S_RST, GPIO_MODE_OUTPUT);

	//Reset the display
	gpio_set_level(ST7735S_RST, 0);
	vTaskDelay(100 / portTICK_RATE_MS);
	gpio_set_level(ST7735S_RST, 1);
	vTaskDelay(100 / portTICK_RATE_MS);

	ESP_LOGI(TAG, "ST7735S initialization.");

	//Send all the commands
	uint16_t cmd = 0;
	while (init_cmds[cmd].databytes!=0xff) {
		st7735s_send_cmd(init_cmds[cmd].cmd);
		st7735s_send_data(init_cmds[cmd].data, init_cmds[cmd].databytes&0x1F);
		if (init_cmds[cmd].databytes & 0x80) {
			vTaskDelay(100 / portTICK_RATE_MS);
		}
		cmd++;
	}

#if (CONFIG_LV_DISPLAY_ORIENTATION == 0) || (CONFIG_LV_DISPLAY_ORIENTATION == 1)
	st7735s_portrait_mode = 1;
#else
	st7735s_portrait_mode = 0;
#endif

    st7735s_set_orientation(CONFIG_LV_DISPLAY_ORIENTATION);
}
  1. D:\ubshare\esp-idf\examples\lvgl_c3\components\lvgl_esp32_drivers\lvgl_tft\disp_spi.c
    中,可以修改一下时钟频率
void disp_spi_add_device(spi_host_device_t host)
{
    disp_spi_add_device_with_speed(host, SPI_TFT_CLOCK_SPEED_HZ);
}
  1. 设置坐标函数,需要修改
void st7735s_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * color_map)
{
	uint8_t data[4];
	
	#if 0
	/*Column addresses*/
	st7735s_send_cmd(0x2A);
	data[0] = (area->x1 >> 8) & 0xFF;
	data[1] = (area->x1 & 0xFF) + (st7735s_portrait_mode ? COLSTART : ROWSTART);
	data[2] = (area->x2 >> 8) & 0xFF;
	data[3] = (area->x2 & 0xFF) + (st7735s_portrait_mode ? COLSTART : ROWSTART);
	st7735s_send_data(data, 4);

	/*Page addresses*/
	st7735s_send_cmd(0x2B);
	data[0] = (area->y1 >> 8) & 0xFF;
	data[1] = (area->y1 & 0xFF) + (st7735s_portrait_mode ? ROWSTART : COLSTART);
	data[2] = (area->y2 >> 8) & 0xFF;
	data[3] = (area->y2 & 0xFF) + (st7735s_portrait_mode ? ROWSTART : COLSTART);
	st7735s_send_data(data, 4);
	
	#else
    uint16_t offsetx1 = area->x1;
    uint16_t offsetx2 = area->x2;
    uint16_t offsety1 = area->y1;
    uint16_t offsety2 = area->y2;
	
    /*Column addresses*/
    st7735s_send_cmd(0x2A);
    data[0] = (offsetx1 >> 8) & 0xFF;
    data[1] = offsetx1 & 0xFF;
    data[2] = (offsetx2 >> 8) & 0xFF;
    data[3] = offsetx2 & 0xFF;
    st7735s_send_data(data, 4);

    /*Page addresses*/
    st7735s_send_cmd(0x2B);
    data[0] = (offsety1 >> 8) & 0xFF;
    data[1] = offsety1 & 0xFF;
    data[2] = (offsety2 >> 8) & 0xFF;
    data[3] = offsety2 & 0xFF;
    st7735s_send_data(data, 4);
	
	
	#endif

	/*Memory write*/
	st7735s_send_cmd(0x2C);

	uint32_t size = lv_area_get_width(area) * lv_area_get_height(area);
	//printf("size = %d %d %d \r\n",size,lv_area_get_width(area),lv_area_get_height(area));
	
	st7735s_send_color((void*)color_map, size * 2);
}

四、LVGL配置

idf.py menuconfig配置
参考:

主要是配置一下使用的驱动芯片和引脚

五、整体代码(st7735s)

/**
 * @file st7735s.c
 *
 */

/*********************
 *      INCLUDES
 *********************/
#include "st7735s.h"
#include "disp_spi.h"
#include "driver/i2c.h"
#include "driver/gpio.h"
#include "esp_log.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"

/*********************
 *      DEFINES
 *********************/
 #define TAG "ST7735S"
 #define AXP192_I2C_ADDRESS                    0x34

/**********************
 *      TYPEDEFS
 **********************/

/*The LCD needs a bunch of command/argument values to be initialized. They are stored in this struct. */
typedef struct {
    uint8_t cmd;
    uint8_t data[16];
    uint8_t databytes; //No of data in data; bit 7 = delay after set; 0xFF = end of cmds.
} lcd_init_cmd_t;

/**********************
 *  STATIC PROTOTYPES
 **********************/
static void st7735s_send_cmd(uint8_t cmd);
static void st7735s_send_data(void * data, uint16_t length);
static void st7735s_send_color(void * data, uint16_t length);
static void st7735s_set_orientation(uint8_t orientation);
static void i2c_master_init();
static void axp192_write_byte(uint8_t addr, uint8_t data);
static void axp192_init();
static void axp192_sleep_in();
static void axp192_sleep_out();

/**********************
 *  STATIC VARIABLES
 **********************/
uint8_t st7735s_portrait_mode = 0;

/**********************
 *      MACROS
 **********************/

/**********************
 *   GLOBAL FUNCTIONS
 **********************/

void st7735s_init(void)
{
#ifdef CONFIG_LV_M5STICKC_HANDLE_AXP192
    i2c_master_init();
    axp192_init();
#endif

    lcd_init_cmd_t init_cmds[]={
		#if 0
		{ST7735_SWRESET, {0}, 0x80},         		// Software reset, 0 args, w/delay 150
		{ST7735_SLPOUT, {0}, 0x80},                 // Out of sleep mode, 0 args, w/delay 500
		{ST7735_FRMCTR1, {0x01, 0x2C, 0x2D}, 3},    // Frame rate ctrl - normal mode, 3 args: Rate = fosc/(1x2+40) * (LINE+2C+2D)
		{ST7735_FRMCTR2, {0x01, 0x2C, 0x2D}, 3},    // Frame rate control - idle mode, 3 args:Rate = fosc/(1x2+40) * (LINE+2C+2D)
		{ST7735_FRMCTR3, {0x01, 0x2C, 0x2D,0x01, 0x2C, 0x2D}, 6}, //Frame rate ctrl - partial mode, 6 args:Dot inversion mode. Line inversion mode
		{ST7735_INVCTR, {0x07}, 1},                 // Display inversion ctrl, 1 arg, no delay:No inversion
		{ST7735_PWCTR1, {0xA2,0x02, 0x84}, 3},      // Power control, 3 args, no delay:-4.6V AUTO mode
		{ST7735_PWCTR2, {0xC5}, 1},                 // Power control, 1 arg, no delay:VGH25 = 2.4C VGSEL = -10 VGH = 3 * AVDD
		{ST7735_PWCTR3, {0x0A, 0x00}, 2},           // Power control, 2 args, no delay: Opamp current small, Boost frequency
		{ST7735_PWCTR4, {0x8A,0x2A }, 2},           // Power control, 2 args, no delay: BCLK/2, Opamp current small & Medium low
		{ST7735_PWCTR5, {0x8A, 0xEE}, 2},           // Power control, 2 args, no delay:
		{ST7735_VMCTR1, {0x0E}, 1},                 // Power control, 1 arg, no delay:
#if ST7735S_INVERT_COLORS == 1
		{ST7735_INVON, {0}, 0},                     // set inverted mode
#else
 		{ST7735_INVOFF, {0}, 0},                    // set non-inverted mode
#endif
		{ST7735_COLMOD, {0x05}, 1},               	// set color mode, 1 arg, no delay: 16-bit color
		{ST7735_GMCTRP1, {0x02, 0x1c, 0x07, 0x12,
			0x37, 0x32, 0x29, 0x2d,
			0x29, 0x25, 0x2B, 0x39,
			0x00, 0x01, 0x03, 0x10}, 16},           // 16 args, no delay:
		{ST7735_GMCTRN1, {0x03, 0x1d, 0x07, 0x06,
			0x2E, 0x2C, 0x29, 0x2D,
			0x2E, 0x2E, 0x37, 0x3F,
			0x00, 0x00, 0x02, 0x10}, 16},           // 16 args, no delay:
		{ST7735_NORON, {0}, TFT_INIT_DELAY},       	// Normal display on, no args, w/delay 10 ms delay
		{ST7735_DISPON, {0}, TFT_INIT_DELAY},       // Main screen turn on, no args w/delay 100 ms delay
		{0, {0}, 0xff}
		#else
		//{ST7735_SWRESET, {0}, 0x80},         		// Software reset, 0 args, w/delay 150
		{ST7735_SLPOUT, {0}, 0x80},                 // Out of sleep mode, 0 args, w/delay 500
		//{ST7735_FRMCTR1, {0x01, 0x2C, 0x2D}, 3},    // Frame rate ctrl - normal mode, 3 args: Rate = fosc/(1x2+40) * (LINE+2C+2D)
		{ST7735_FRMCTR1, {0x02, 0x35, 0x36}, 3},    // Frame rate ctrl - normal mode, 3 args: Rate = fosc/(1x2+40) * (LINE+2C+2D)
		//{ST7735_FRMCTR2, {0x01, 0x2C, 0x2D}, 3},    // Frame rate control - idle mode, 3 args:Rate = fosc/(1x2+40) * (LINE+2C+2D)
		{ST7735_FRMCTR2, {0x02, 0x35, 0x36}, 3},    // Frame rate control - idle mode, 3 args:Rate = fosc/(1x2+40) * (LINE+2C+2D)
		//{ST7735_FRMCTR3, {0x01, 0x2C, 0x2D,0x01, 0x2C, 0x2D}, 6}, //Frame rate ctrl - partial mode, 6 args:Dot inversion mode. Line inversion mode
		{ST7735_FRMCTR3, {0x02, 0x35, 0x36,0x02, 0x35, 0x36}, 6},
		//{ST7735_INVCTR, {0x07}, 1},                 // Display inversion ctrl, 1 arg, no delay:No inversion
		{ST7735_INVCTR, {0x03}, 1},                 // Display inversion ctrl, 1 arg, no delay:No inversion
		
		{ST7735_PWCTR1, {0xA2,0x02, 0x84}, 3},      // Power control, 3 args, no delay:-4.6V AUTO mode
		
		{ST7735_PWCTR2, {0xC5}, 1},                 // Power control, 1 arg, no delay:VGH25 = 2.4C VGSEL = -10 VGH = 3 * AVDD
		//{ST7735_PWCTR3, {0x0A, 0x00}, 2},           // Power control, 2 args, no delay: Opamp current small, Boost frequency
		{ST7735_PWCTR3, {0x0d, 0x00}, 2},           // Power control, 2 args, no delay: Opamp current small, Boost frequency
		
		//{ST7735_PWCTR4, {0x8A,0x2A }, 2},           // Power control, 2 args, no delay: BCLK/2, Opamp current small & Medium low
		{ST7735_PWCTR4, {0x8D,0x2A }, 2},           // Power control, 2 args, no delay: BCLK/2, Opamp current small & Medium low
		
		//{ST7735_PWCTR5, {0x8A, 0xEE}, 2},           // Power control, 2 args, no delay:
		{ST7735_PWCTR5, {0x8d, 0xEE}, 2},           // Power control, 2 args, no delay:
		
		//{ST7735_VMCTR1, {0x0E}, 1},                 // Power control, 1 arg, no delay:
		{ST7735_VMCTR1, {0x03}, 1},                 // Power control, 1 arg, no delay:

 	//	{ST7735_INVOFF, {0}, 0},                    // set non-inverted mode
		
		{ST7735_COLMOD, {0x05}, 1},               	// set color mode, 1 arg, no delay: 16-bit color
		/*
		{ST7735_GMCTRP1, {0x02, 0x1c, 0x07, 0x12,
			0x37, 0x32, 0x29, 0x2d,
			0x29, 0x25, 0x2B, 0x39,
			0x00, 0x01, 0x03, 0x10}, 16},           // 16 args, no delay:
	*/		
		
		
		{TFT_MADCTL, {0x08}, 1}, //Set Scanning Direction
	
		{ST7735_GMCTRP1, {0x12, 0x1c, 0x10, 0x18,
			0x33, 0x2c, 0x25, 0x28,
			0x28, 0x27, 0x2f, 0x3C,
			0x00, 0x03, 0x03, 0x10}, 16},           // 16 args, no delay:
			
			
			/*
		{ST7735_GMCTRN1, {0x03, 0x1d, 0x07, 0x06,
			0x2E, 0x2C, 0x29, 0x2D,
			0x2E, 0x2E, 0x37, 0x3F,
			0x00, 0x00, 0x02, 0x10}, 16},           // 16 args, no delay:
			*/
		{ST7735_GMCTRN1, {0x12, 0x1c, 0x10, 0x18,
			0x2d, 0x28, 0x23, 0x28,
			0x28, 0x26, 0x2f, 0x3B,
			0x00, 0x03, 0x03, 0x10}, 16},           // 16 args, no delay:
			
			
		{ST7735_PTLAR, {0X00,0X00,0X00,0X80}, 3}, 
		{ST7735_PTLON, {0X0}, 0}, 
		
		
			
			
	//	{ST7735_NORON, {0}, TFT_INIT_DELAY},       	// Normal display on, no args, w/delay 10 ms delay
		{ST7735_DISPON, {0}, TFT_INIT_DELAY},       // Main screen turn on, no args w/delay 100 ms delay
		{0, {0}, 0xff}
		
		
		
		
		#endif
		
    };

	//Initialize non-SPI GPIOs
        gpio_pad_select_gpio(ST7735S_DC);
	gpio_set_direction(ST7735S_DC, GPIO_MODE_OUTPUT);
        gpio_pad_select_gpio(ST7735S_RST);
	gpio_set_direction(ST7735S_RST, GPIO_MODE_OUTPUT);

	//Reset the display
	gpio_set_level(ST7735S_RST, 0);
	vTaskDelay(100 / portTICK_RATE_MS);
	gpio_set_level(ST7735S_RST, 1);
	vTaskDelay(100 / portTICK_RATE_MS);

	ESP_LOGI(TAG, "ST7735S initialization.");

	//Send all the commands
	uint16_t cmd = 0;
	while (init_cmds[cmd].databytes!=0xff) {
		st7735s_send_cmd(init_cmds[cmd].cmd);
		st7735s_send_data(init_cmds[cmd].data, init_cmds[cmd].databytes&0x1F);
		if (init_cmds[cmd].databytes & 0x80) {
			vTaskDelay(100 / portTICK_RATE_MS);
		}
		cmd++;
	}

#if (CONFIG_LV_DISPLAY_ORIENTATION == 0) || (CONFIG_LV_DISPLAY_ORIENTATION == 1)
	st7735s_portrait_mode = 1;
#else
	st7735s_portrait_mode = 0;
#endif

    st7735s_set_orientation(CONFIG_LV_DISPLAY_ORIENTATION);
}

void st7735s_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * color_map)
{
	uint8_t data[4];
	
	#if 0
	/*Column addresses*/
	st7735s_send_cmd(0x2A);
	data[0] = (area->x1 >> 8) & 0xFF;
	data[1] = (area->x1 & 0xFF) + (st7735s_portrait_mode ? COLSTART : ROWSTART);
	data[2] = (area->x2 >> 8) & 0xFF;
	data[3] = (area->x2 & 0xFF) + (st7735s_portrait_mode ? COLSTART : ROWSTART);
	st7735s_send_data(data, 4);

	/*Page addresses*/
	st7735s_send_cmd(0x2B);
	data[0] = (area->y1 >> 8) & 0xFF;
	data[1] = (area->y1 & 0xFF) + (st7735s_portrait_mode ? ROWSTART : COLSTART);
	data[2] = (area->y2 >> 8) & 0xFF;
	data[3] = (area->y2 & 0xFF) + (st7735s_portrait_mode ? ROWSTART : COLSTART);
	st7735s_send_data(data, 4);
	
	#else
    uint16_t offsetx1 = area->x1;
    uint16_t offsetx2 = area->x2;
    uint16_t offsety1 = area->y1;
    uint16_t offsety2 = area->y2;
	
    /*Column addresses*/
    st7735s_send_cmd(0x2A);
    data[0] = (offsetx1 >> 8) & 0xFF;
    data[1] = offsetx1 & 0xFF;
    data[2] = (offsetx2 >> 8) & 0xFF;
    data[3] = offsetx2 & 0xFF;
    st7735s_send_data(data, 4);

    /*Page addresses*/
    st7735s_send_cmd(0x2B);
    data[0] = (offsety1 >> 8) & 0xFF;
    data[1] = offsety1 & 0xFF;
    data[2] = (offsety2 >> 8) & 0xFF;
    data[3] = offsety2 & 0xFF;
    st7735s_send_data(data, 4);
	
	
	#endif

	/*Memory write*/
	st7735s_send_cmd(0x2C);

	uint32_t size = lv_area_get_width(area) * lv_area_get_height(area);
	//printf("size = %d %d %d \r\n",size,lv_area_get_width(area),lv_area_get_height(area));
	
	st7735s_send_color((void*)color_map, size * 2);
}

void st7735s_sleep_in()
{
	st7735s_send_cmd(0x10);
	axp192_sleep_in();
}

void st7735s_sleep_out()
{
	axp192_sleep_out();
	st7735s_send_cmd(0x11);
}

/**********************
 *   STATIC FUNCTIONS
 **********************/

static void st7735s_send_cmd(uint8_t cmd)
{
	disp_wait_for_pending_transactions();
	gpio_set_level(ST7735S_DC, 0);	 /*Command mode*/
	disp_spi_send_data(&cmd, 1);
}

static void st7735s_send_data(void * data, uint16_t length)
{
	disp_wait_for_pending_transactions();
	gpio_set_level(ST7735S_DC, 1);	 /*Data mode*/
	disp_spi_send_data(data, length);
}

static void st7735s_send_color(void * data, uint16_t length)
{
	disp_wait_for_pending_transactions();
	gpio_set_level(ST7735S_DC, 1);   /*Data mode*/
	disp_spi_send_colors(data, length);
}

static void st7735s_set_orientation(uint8_t orientation)
{
    const char *orientation_str[] = {
        "PORTRAIT", "PORTRAIT_INVERTED", "LANDSCAPE", "LANDSCAPE_INVERTED"
    };

    ESP_LOGD(TAG, "Display orientation: %s", orientation_str[orientation]);

    /*
        Portrait:  0xC8 = ST77XX_MADCTL_MX | ST77XX_MADCTL_MY | ST77XX_MADCTL_BGR
        Landscape: 0xA8 = ST77XX_MADCTL_MY | ST77XX_MADCTL_MV | ST77XX_MADCTL_BGR
        Remark: "inverted" is ignored here
    */
    uint8_t data[] = {0xC8, 0xC8, 0xA8, 0xA8};

    ESP_LOGD(TAG, "0x36 command value: 0x%02X", data[orientation]);

    st7735s_send_cmd(ST7735_MADCTL);
    st7735s_send_data((void *) &data[orientation], 1);
}

static void i2c_master_init()
{
	i2c_config_t i2c_config = {
		.mode               = I2C_MODE_MASTER,
		.sda_io_num         = AXP192_SDA,
		.scl_io_num         = AXP192_SCL,
		.sda_pullup_en      = GPIO_PULLUP_ENABLE,
		.scl_pullup_en      = GPIO_PULLUP_ENABLE,
		.master.clk_speed   = 400000
	};
	i2c_param_config(I2C_NUM_0, &i2c_config);
	i2c_driver_install(I2C_NUM_0, I2C_MODE_MASTER, 0, 0, 0);
}

static void axp192_write_byte(uint8_t addr, uint8_t data)
{
	esp_err_t ret;
	i2c_cmd_handle_t cmd = i2c_cmd_link_create();

	i2c_master_start(cmd);
	i2c_master_write_byte(cmd, (AXP192_I2C_ADDRESS << 1) | I2C_MASTER_WRITE, true);
	i2c_master_write_byte(cmd, addr, true);
	i2c_master_write_byte(cmd, data, true);
	i2c_master_stop(cmd);

	ret = i2c_master_cmd_begin(I2C_NUM_0, cmd, 10/portTICK_PERIOD_MS);
	if (ret != ESP_OK) {
		ESP_LOGE(TAG, "AXP192 send failed. code: 0x%.2X", ret);
	}
	i2c_cmd_link_delete(cmd);
}

static void axp192_init()
{
	// information on how to init and use AXP192 ifor M5StickC taken from
	// 	https://forum.m5stack.com/topic/1025/m5stickc-turn-off-screen-completely

	axp192_write_byte(0x10, 0xFF);			// OLED_VPP Enable
	axp192_write_byte(0x28, 0xCC);			// Enable LDO2&LDO3, LED&TFT 3.0V
	axp192_sleep_out();
	ESP_LOGI(TAG, "AXP192 initialized, power enabled for LDO2 and LDO3");
}

static void axp192_sleep_in()
{
	axp192_write_byte(0x12, 0x4b);
}

static void axp192_sleep_out()
{
	axp192_write_byte(0x12, 0x4d);
}

六、Menuconfig配置

在这里插入图片描述
在这里插入图片描述

七、显示效果

在这里插入图片描述

八、整体LOG

+)·#?!?!?!傡峚蘟擣?)峚蘟岴SP-ROM:esp32c3-20200918
Build:Sep 18 2020
rst:0x1 (POWERON),boot:0xc (SPI_FAST_FLASH_BOOT)
SPIWP:0xee
mode:DOUT, clock div:1
load:0x3fcd6100,len:0x166c
load:0x403ce000,len:0x8c0
load:0x403d0000,len:0x2928
entry 0x403ce000
[0;32mI (32) boot: ESP-IDF v4.4-dev-1404-gc13afea-dirty 2nd stage bootloader[0m
[0;32mI (32) boot: compile time 07:51:37[0m
[0;32mI (32) boot: chip revision: 2[0m
[0;32mI (36) boot.esp32c3: SPI Speed      : 80MHz[0m
[0;32mI (41) boot.esp32c3: SPI Mode       : DOUT[0m
[0;32mI (45) boot.esp32c3: SPI Flash Size : 2MB[0m
[0;32mI (50) boot: Enabling RNG early entropy source...[0m
[0;32mI (56) boot: Partition Table:[0m
[0;32mI (59) boot: ## Label            Usage          Type ST Offset   Length[0m
[0;32mI (66) boot:  0 nvs              WiFi data        01 02 00009000 00006000[0m
[0;32mI (74) boot:  1 phy_init         RF data          01 01 0000f000 00001000[0m
[0;32mI (81) boot:  2 factory          factory app      00 00 00010000 00177000[0m
[0;32mI (89) boot: End of partition table[0m
[0;32mI (93) esp_image: segment 0: paddr=00010020 vaddr=3c060020 size=10120h ( 65824) map[0m
[0;32mI (112) esp_image: segment 1: paddr=00020148 vaddr=3fc8b400 size=015d0h (  5584) load[0m
[0;32mI (113) esp_image: segment 2: paddr=00021720 vaddr=40380000 size=0b288h ( 45704) load[0m
[0;32mI (127) esp_image: segment 3: paddr=0002c9b0 vaddr=50000000 size=00010h (    16) load[0m
[0;32mI (127) esp_image: segment 4: paddr=0002c9c8 vaddr=00000000 size=03650h ( 13904) [0m
[0;32mI (137) esp_image: segment 5: paddr=00030020 vaddr=42000020 size=537fch (342012) map[0m
[0;32mI (200) boot: Loaded app from partition at offset 0x10000[0m
[0;32mI (200) boot: Disabling RNG early entropy source...[0m
[0;32mI (212) cpu_start: Pro cpu up.[0m
[0;32mI (220) cpu_start: Pro cpu start user code[0m
[0;32mI (220) cpu_start: cpu freq: 160000000[0m
[0;32mI (220) cpu_start: Application information:[0m
[0;32mI (223) cpu_start: Project name:     hello-world[0m
[0;32mI (228) cpu_start: App version:      v4.4-dev-1404-gc13afea-dirty[0m
[0;32mI (235) cpu_start: Compile time:     Aug 13 2021 16:48:30[0m
[0;32mI (241) cpu_start: ELF file SHA256:  f68bc6d0eef9cb5f...[0m
[0;32mI (247) cpu_start: ESP-IDF:          v4.4-dev-1404-gc13afea-dirty[0m
[0;32mI (254) heap_init: Initializing. RAM available for dynamic allocation:[0m
[0;32mI (261) heap_init: At 3FC95EE0 len 0002A120 (168 KiB): DRAM[0m
[0;32mI (267) heap_init: At 3FCC0000 len 0001F260 (124 KiB): STACK/DRAM[0m
[0;32mI (274) heap_init: At 50000010 len 00001FF0 (7 KiB): RTCRAM[0m
[0;32mI (281) spi_flash: detected chip: generic[0m
[0;32mI (285) spi_flash: flash io: dio[0m
[0;32mI (289) sleep: Configure to isolate all GPIO pins in sleep state[0m
[0;32mI (296) sleep: Enable automatic switching of GPIO sleep configuration[0m
[0;32mI (303) cpu_start: Starting scheduler.[0m
Hello world!
This is esp32c3 chip with 1 CPU core(s), WiFi/BLE, silicon revision 2, 2MB external flash
Minimum free heap size: 290500 bytes
[0;32mI (336) lvgl_helpers: Display hor size: 128, ver size: 128[0m
[0;32mI (336) lvgl_helpers: Display buffer size: 5120[0m
[0;32mI (356) lvgl_helpers: Initializing SPI master for display[0m
[0;32mI (356) lvgl_helpers: Configuring SPI host  (1)[0m
[0;32mI (356) lvgl_helpers: MISO pin: -1, MOSI pin: 4, SCLK pin: 5, IO2/WP pin: -1, IO3/HD pin: -1[0m
[0;32mI (376) lvgl_helpers: Max transfer size: 10240 (bytes)[0m
[0;32mI (376) lvgl_helpers: Initializing SPI bus...[0m
[0;32mI (376) disp_spi: Adding SPI device[0m
[0;32mI (376) disp_spi: Clock speed: 10000000Hz, mode: 0, CS pin: 6[0m
[0;32mI (596) ST7735S: ST7735S initialization.[0m

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值