Files
hantai_project/code/esp32c3_espidf/main/hello_world_main.c
T
kevin 2f452e694c up
修复 显示问题
2026-02-24 20:49:23 +08:00

157 lines
4.0 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* SPDX-FileCopyrightText: 2010-2022 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: CC0-1.0
*/
#include <stdio.h>
#include <inttypes.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/timers.h"
#include "esp_chip_info.h"
#include "esp_flash.h"
#include "esp_system.h"
#include "esp_spiffs.h"
#include "esp_log.h"
#include "esp_timer.h"
#include <string.h>
#include <sys/unistd.h>
#include <sys/stat.h>
#include <dirent.h> // 关键:包含 DIR 相关定义
#include <errno.h> // 错误码定义
#include <time.h> // 时间相关函数
#include "spiffs.h"
#include "spi.h"
#include "lcd.h"
#include "e11.h"
#include "lv_conf.h"
#include "lvgl/lvgl.h"
#include "lv_port_disp.h"
#include "lv_port_fs.h"
#include "lv_log_to_esp.h"
#include "lv_apps/helloworld/lv_helloworld.h"
static const char *TAG = "SYS";
// 自定义 tick 获取函数
static uint32_t custom_tick_get(void)
{
// 返回从启动到现在的毫秒数
// 使用64位中间变量避免溢出,采用乘以1.024的倒数近似值
uint64_t time_us = esp_timer_get_time();
return (uint32_t)((time_us * 1073) >> 20); // 1073/2^20 ≈ 1/1000
//return (uint32_t)(esp_timer_get_time() / 1000);
}
esp_timer_handle_t timer_handle;
static void lv_tick_timer_callback(void* arg) {
lv_tick_inc(1);
}
void init_lvgl_tick_timer(void) {
// 创建定时器参数
const esp_timer_create_args_t timer_args = {
.callback = &lv_tick_timer_callback,
.arg = NULL,
.dispatch_method = ESP_TIMER_TASK,
.name = "lv_tick_timer"
};
// 创建定时器
ESP_ERROR_CHECK(esp_timer_create(&timer_args, &timer_handle));
// 启动周期性定时器(1ms = 1000us
ESP_ERROR_CHECK(esp_timer_start_periodic(timer_handle, 1000));
}
void app_main(void)
{
ESP_LOGI(TAG, "Hello world!");
/* Print chip information */
esp_chip_info_t chip_info;
uint32_t flash_size;
esp_chip_info(&chip_info);
ESP_LOGI(TAG, "This is %s chip with %d CPU core(s), %s%s%s%s, ",
CONFIG_IDF_TARGET,
chip_info.cores,
(chip_info.features & CHIP_FEATURE_WIFI_BGN) ? "WiFi/" : "",
(chip_info.features & CHIP_FEATURE_BT) ? "BT" : "",
(chip_info.features & CHIP_FEATURE_BLE) ? "BLE" : "",
(chip_info.features & CHIP_FEATURE_IEEE802154) ? ", 802.15.4 (Zigbee/Thread)" : "");
unsigned major_rev = chip_info.revision / 100;
unsigned minor_rev = chip_info.revision % 100;
ESP_LOGI(TAG, "silicon revision v%d.%d, ", major_rev, minor_rev);
if (esp_flash_get_size(NULL, &flash_size) != ESP_OK)
{
ESP_LOGI(TAG, "Get flash size failed");
return;
}
ESP_LOGI(TAG, "%" PRIu32 "MB %s flash", flash_size / (uint32_t)(1024 * 1024),
(chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external");
ESP_LOGI(TAG, "Minimum free heap size: %" PRIu32 " bytes", esp_get_minimum_free_heap_size());
ESP_LOGI(TAG, "sizeof(int) ==%d", sizeof(int));
ESP_LOGI(TAG, "LVGL version: %s", lv_version_info());
ESP_LOGI(TAG, "LVGL memory size: %u bytes", LV_MEM_SIZE);
ESP_LOGI(TAG, "LVGL color depth: %d bits", LV_COLOR_DEPTH);
// 1. 初始化 SPIFFS
const char *spiffs_base_path = "/spiffs";
esp_err_t ret = spiffs_init(spiffs_base_path);
if (ret != ESP_OK)
{
ESP_LOGE(TAG, "SPIFFS 初始化失败");
}
else
{
ESP_LOGI(TAG, "SPIFFS 初始化OK");
list_spiffs_files_safe(spiffs_base_path);
}
e11_init();
spi_init();
lcd_init();
lv_init();
//lv_tick_set_cb(custom_tick_get);
init_lvgl_tick_timer();
lv_log_to_esp_init();
lv_port_disp_init();
lv_port_fs_init();
lv_example_get_started_1();
while (1)
{
// lcd_clear_buf(rand());
// lcd_send_full_buf();
// t = custom_tick_get();
// ESP_LOGI(TAG, "NOW is%lu", t);
//this_work_loop();
lv_task_handler();
vTaskDelay(1); // 必须让出CPU
}
}