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*

相关推荐
一点一木3 小时前
深度体验TRAE SOLO移动端7天:作为独立开发者,我把工作流揣进了兜里
前端·人工智能·trae
Lee川4 小时前
mini-cursor 揭秘:从 Tool 定义到 Agent 循环的完整实现
前端·人工智能·后端
weelinking4 小时前
【产品】00_产品经理用Claude实现产品系列介绍
数据库·人工智能·sql·数据挖掘·github·产品经理
Agent产品评测局4 小时前
制造业模具管理AI系统,主流产品能力对比详解:2026年智能制造选型深度洞察
人工智能·ai·chatgpt·制造
研华科技Advantech5 小时前
如何用一套实训设备,打通工业AI预测性维护技术全流程?
人工智能
Lab_AI5 小时前
AI for Science: MaXFlow AI Agent+ 报告体验双升级,让AI智能体更高效易用!
人工智能·ai for science·ai agent·ai智能体
李坤5 小时前
让 Codex 和 Claude 互相 Review:告别手动复制
人工智能·openai·claude
南屹川6 小时前
【API设计】GraphQL实战:从REST到GraphQL的演进
人工智能
KJ_BioMed6 小时前
当计算生物学遇上生成式AI:从头设计生物分子的“新范式”初探
人工智能·从头设计·生命科学·生物医药·科研干货·科晶生物
明月醉窗台6 小时前
深度学习(17)YOLO训练中的超参数详解
人工智能·深度学习·yolo