提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
记录一下,对知识的整理和复习,方便你我他。。。
只是记录的外设的API函数的使用,外设知识不介绍。
IDF版本V5.1.2
一、需要的头文件
#include "esp_system.h"
#include "esp_idf_version.h"
#include "esp_chip_info.h"
#include "esp_flash.h"
二、API
2.1 esp_system.h
/*
函数: esp_restart
功能: 软件复位ESP
输入:
返回值:
*/
void esp_restart(void)
/*
函数: esp_reset_reason
功能: 获取上一次复位的原因
输入:
返回值: 上一次复位的枚举值
*/
esp_reset_reason_t esp_reset_reason(void)
2.2 esp_idf_version.h
/*
函数: esp_get_idf_version
功能: 获取SDK(IDF)的版本信息
输入:
返回值: 版本信息
*/
const char* esp_get_idf_version(void)
2.3 esp_chip_info.h
/*
函数: esp_chip_info
功能: 获取芯片的信息
输入: out_info:保存信息的结构体变量
返回值:
*/
void esp_chip_info(esp_chip_info_t* out_info)
2.4 esp_flash.h
/*
函数: esp_flash_get_size
功能: 返回 menuconfig 中设置的 flash 芯片容量(以字节为单位)
输入: chip:NULL;out_size:保存读取到的flash大小的地址
返回值: ESP_OK -> 成功,other -> 失败
*/
esp_err_t IRAM_ATTR esp_flash_get_size(esp_flash_t *chip, uint32_t *out_size)
/*
函数: esp_flash_get_size
功能: 返回 实际的 flash 芯片容量(以字节为单位)
输入: chip:NULL;out_size:保存读取到的flash大小的地址
返回值: ESP_OK -> 成功,other -> 失败
*/
esp_err_t IRAM_ATTR esp_flash_get_physical_size(esp_flash_t *chip, uint32_t *flash_size)
三、代码
#include <stdio.h>
#include "esp_log.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_idf_version.h"
#include "esp_chip_info.h"
#include "esp_flash.h"
void app_main(void)
{
char *tag = "main";
esp_log_level_set(tag, ESP_LOG_DEBUG); //设置日志等级
switch(esp_reset_reason())//获取上一次复位的原因
{
case ESP_RST_UNKNOWN:
{
ESP_LOGD(tag, "ESP_RST_UNKNOWN,复位原因无法确定");
break;
}
case ESP_RST_POWERON:
{
ESP_LOGD(tag, "ESP_RST_POWERON, 上电事件导致的复位");
break;
}
case ESP_RST_EXT:
{
ESP_LOGD(tag, "ESP_RST_EXT, 外部引脚复位(不适用于ESP32)");
break;
}
case ESP_RST_SW:
{
ESP_LOGD(tag, "ESP_RST_SW, 软件复位通过esp_restart");
break;
}
case ESP_RST_PANIC:
{
ESP_LOGD(tag, "ESP_RST_PANIC, 由于异常/恐慌导致软件复位");
break;
}
case ESP_RST_INT_WDT:
{
ESP_LOGD(tag, "ESP_RST_INT_WDT, 由于中断看门狗而复位(软件或硬件)");
break;
}
case ESP_RST_TASK_WDT:
{
ESP_LOGD(tag, "ESP_RST_TASK_WDT, 由于任务看门狗而复位");
break;
}
case ESP_RST_WDT:
{
ESP_LOGD(tag, "ESP_RST_WDT, 由于其他看门狗复位");
break;
}
case ESP_RST_DEEPSLEEP:
{
ESP_LOGD(tag, "ESP_RST_DEEPSLEEP, 退出深度睡眠模式后复位");
break;
}
case ESP_RST_BROWNOUT:
{
ESP_LOGD(tag, "ESP_RST_BROWNOUT, 断电复位(软件或硬件)");
break;
}
case ESP_RST_SDIO:
{
ESP_LOGD(tag, "ESP_RST_SDIO, 通过SDIO复位");
break;
}
default: break;
}
// vTaskDelay(10000);
//esp_restart();//复位ESP32
ESP_LOGD(tag, "SDK版本号 : %s",esp_get_idf_version());//获取SDK(IDF)的版本信息
esp_chip_info_t EspInfo;
esp_chip_info(&EspInfo);
switch(EspInfo.model)//模组
{
case CHIP_ESP32:
{
ESP_LOGD(tag, "模组:ESP32");
break;
}
case CHIP_ESP32S2:
{
ESP_LOGD(tag, "模组:ESP32S2");
break;
}
case CHIP_ESP32S3:
{
ESP_LOGD(tag, "模组:ESP32S3");
break;
}
case CHIP_ESP32C3:
{
ESP_LOGD(tag, "模组:ESP32C3");
break;
}
case CHIP_ESP32C2:
{
ESP_LOGD(tag, "模组:ESP32C2");
break;
}
case CHIP_ESP32C6:
{
ESP_LOGD(tag, "模组:ESP32C6");
break;
}
case CHIP_ESP32H2:
{
ESP_LOGD(tag, "模组:ESP32H2");
break;
}
case CHIP_POSIX_LINUX:
{
ESP_LOGD(tag, "模组:POSIX_LINUX");
break;
}
default: break;
}
ESP_LOGD(tag, "CPU核心数:%d",EspInfo.cores);
ESP_LOGD(tag, "芯片版本号:%d",EspInfo.revision);
ESP_LOGD(tag, "CHIP_FEATURE_x功能标志,%lX",EspInfo.features);//features是uint32_t类型
if(EspInfo.features & 0x01) ESP_LOGD(tag, "芯片内嵌flash");
if((EspInfo.features >> 1) & 0x01) ESP_LOGD(tag, "芯片有 2.4GHz WiFi");
if((EspInfo.features >> 4) & 0x01) ESP_LOGD(tag, "芯片有 蓝牙低功耗");
if((EspInfo.features >> 5) & 0x01) ESP_LOGD(tag, "芯片有 蓝牙");
if((EspInfo.features >> 6) & 0x01) ESP_LOGD(tag, "芯片有 IEEE 802.15.4");
if((EspInfo.features >> 7) & 0x01) ESP_LOGD(tag, "芯片内嵌虚拟SRAM");
uint32_t size1;
uint32_t size2;
esp_flash_get_size(NULL, &size1);//可通过配置项自定义的flash大小
esp_flash_get_physical_size(NULL, &size2);//实际的flash大小
ESP_LOGD(tag, "Flash 容量 %ld MB", size1 / (1024 * 1024));
ESP_LOGD(tag, "Flash 容量 %ld MB", size2 / (1024 * 1024));
}
四、运行结果
五、补充
- 在打印 uint32_t 类型的变量的时候要使用 %ld
- idf5.0以下的版本,获取flash大小的函数和头文件路径可能不一样
- 通过配置项的flash大小