esp32 arduino环境的搭建

esp32库下载失败问题:

Arduino-esp32-3.1.1版本离线安装(附安装包)|支持esp32P4、S3、C6等芯片解决下载慢问题_esp32 3.1.1-CSDN博客

esp32串口没有打印问题:

烧录flash可能会占用默认的调试串口,导致 Serial.print() 失效。

复制代码
/**
 * ESP32 N16R8 串口强力验证代码
 * 此代码将测试多个可能的串口并打印详细信息
 */

// 定义不同串口的引脚(根据你的开发板手册调整,以下是常见配置)
#define UART0_TX_PIN 1  // GPIO1, 通常是下载和默认打印引脚
#define UART0_RX_PIN 3  // GPIO3
// 硬件串口1通常被闪存占用,所以我们主要测试串口2
#define UART2_TX_PIN 17 // GPIO17
#define UART2_RX_PIN 16 // GPIO16

// 声明使用硬件串口2
HardwareSerial SerialPort(2); // 使用UART2

void setup() {
  // 1. 首先尝试初始化传统的Serial(通常是UART0,连接USB转串口芯片)
  Serial.begin(115200);
  
  // 给串口一点启动时间
  delay(500); 

  // 2. 检查Serial是否初始化成功
  if(!Serial) { 
    // 如果Serial失败,尝试使用预定义的引脚初始化Serial2作为主调试口
    SerialPort.begin(115200, SERIAL_8N1, UART2_RX_PIN, UART2_TX_PIN);
    
    // 在Serial2上打印错误信息(你需要用杜邦线连接这些引脚到USB转串口工具才能看到)
    SerialPort.println("错误:默认Serial(USB)端口初始化失败!");
    SerialPort.println("正在使用Serial2(UART2)进行通信。");
    SerialPort.println("请将USB转串口工具的RX连接到GPIO17,TX连接到GPIO16");
    
    // 同时尝试用Serial打印(可能仍无效,但尝试一下)
    Serial.println("此消息可能看不到,如果上面提示失败"); 
  } else {
    // 3. 如果Serial成功,打印基础信息
    Serial.println("======= ESP32 N16R8 串口测试 =======");
    Serial.print("芯片型号: ");
    Serial.println(ESP.getChipModel());
    Serial.print("CPU频率: ");
    Serial.print(ESP.getCpuFreqMHz());
    Serial.println(" MHz");
    Serial.print("闪存大小: ");
    Serial.print(ESP.getFlashChipSize() / (1024 * 1024));
    Serial.println(" MB");
    Serial.print("Free Heap: ");
    Serial.print(ESP.getFreeHeap());
    Serial.println(" bytes");
    Serial.println("=====================================");
    Serial.println("如果看到此信息,说明默认串口(Serial)工作正常!");
    Serial.println("");
  }
}

void loop() {
  // 根据哪个串口可用,就在哪个串口上循环打印
  if (Serial) { // 如果Serial可用
    Serial.printf("[%lu] Serial端口运行正常,Free Heap: %d bytes\n", millis(), ESP.getFreeHeap());
    delay(2000); // 每2秒打印一次
  } else { // 如果Serial不可用,使用SerialPort
    SerialPort.printf("[%lu] 正在通过Serial2(UART2)通信\n", millis());
    delay(2000);
  }
}

🧩 SERIAL_8N1 让我们来解码一下:

  1. 数据位 8N1 表示:8 位数据,N 无校验,1位停止位。

  2. 对应到上面的位:

    • 数据位 8 = 0x3 << 18 = 0xc0000

    • 无校验 N = 0x0 << 15 = 0x0

    • 停止位 1 = 0x1 << 12 = 0x1000

  3. 把它们加起来:0xc0000 + 0x0 + 0x1000 = 0xc1000

  4. 最后加上模式标志 0x80000000x8000000 + 0xc1000 = **0x8000c1000*

相关推荐
SmartBrain2 小时前
Qwen3-VL 模型架构及原理详解
人工智能·语言模型·架构·aigc
renhongxia12 小时前
AI算法实战:逻辑回归在风控场景中的应用
人工智能·深度学习·算法·机器学习·信息可视化·语言模型·逻辑回归
民乐团扒谱机2 小时前
【AI笔记】精密光时频传递技术核心内容总结
人工智能·算法·光学频率梳
不惑_2 小时前
通俗理解GAN的训练过程
人工智能·神经网络·生成对抗网络
OpenCSG3 小时前
对比分析:CSGHub vs. Hugging Face:模型管理平台选型对
人工智能·架构·开源
云上凯歌3 小时前
传统老旧系统的“AI 涅槃”:从零构建企业级 Agent 集群实战指南
人工智能
cskywit3 小时前
破解红外“魅影”难题:WMRNet 如何以频率分析与二阶差分重塑小目标检测?
人工智能·深度学习
无名修道院3 小时前
AI大模型应用开发-RAG 基础:向量数据库(FAISS/Milvus)、文本拆分、相似性搜索(“让模型查资料再回答”)
人工智能·向量数据库·rag·ai大模型应用开发
自可乐3 小时前
Milvus向量数据库/RAG基础设施学习教程
数据库·人工智能·python·milvus