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*

相关推荐
初恋叫萱萱4 小时前
深入解析 Rust + LLM 开发:手把手教你写一个 AI 运维助手
运维·人工智能·rust
AI大模型..4 小时前
Dify 本地部署安装教程(Windows + Docker),大模型入门到精通,收藏这篇就足够了!
人工智能·程序员·开源·llm·github·deepseek·本地化部署
小陈phd7 小时前
多模态大模型学习笔记(七)——多模态数据的表征与对齐
人工智能·算法·机器学习
摆烂小白敲代码7 小时前
腾讯云智能结构化OCR在物流行业的应用
大数据·人工智能·经验分享·ocr·腾讯云
CoderJia程序员甲7 小时前
GitHub 热榜项目 - 日榜(2026-02-24)
人工智能·ai·大模型·github·ai教程
nimadan127 小时前
**AI漫剧软件2025推荐,解锁高性价比创意制作新体验**
人工智能·python
前网易架构师-高司机7 小时前
带标注的安全带和车牌识别数据集,识别率在88.8%,可识别挡风玻璃,是否系安全带,车牌区域,支持yolo,coco json,pascal voc xml格式
人工智能·数据集·交通违法·违法拍摄·安全带
Bal炎魔7 小时前
AI 学习专题一,AI 实现的原理
人工智能·学习
kjmkq7 小时前
办公智能体落地:九科信息让AI深度融入企业日常运营
人工智能
NAGNIP8 小时前
一文搞懂神经元模型是什么!
人工智能·算法