Skip to main content

XIAO ESP32S3 的引脚串口硬件使用教程

Seeed Studio XIAO ESP32S3Seeed Studio XIAO ESP32S3 Sense

Seeed Studio XIAO ESP32S3是一款功能强大、用途广泛的开发板,具有各种外围接口和GPIO引脚。这些引脚可以用于各种目的,例如与其他设备通信、读取模拟传感器、控制LED等。在本教程中,我们将探索XIAO ESP32S3及其相关板XIAO ESP32_Sense的引脚,并学习如何将这些引脚用于不同的用途。具体而言,我们将介绍1x UART、1x lIC、1x iIS、1x SPI、11x GPIO(PWM)、9xADC、1x用户LED、1x充电LED、1个重置按钮、1x引导按钮的使用,以及XIAO ESP32S3 Sense的1x B2B连接器(带2个额外的GPIO)。在本教程结束时,您将对XIAO ESP32S3的引脚有一个很好的了解,并能够在您的项目中有效地使用它。

##入门

###Pinout概述

在我们开始之前,让我们用下面的示意图回顾一下XIAO ESP32S3的所有引脚及其功能。

XIAO ESP32S3/SIAO ESP32S3感应前端指示图
XIAO ESP32S3/SIAO ESP32S3感应返回指示图
XIAO ESP32S3/SIAO ESP32S3感应引脚列表
  • 5V-这是从USB端口输出的5V。你也可以将其用作电压输入,但你必须在外部电源和这个引脚之间有某种二极管(肖特基二极管、信号二极管、电源二极管),阳极到电池,阴极到5V引脚。

  • 3V3-这是车载调节器的调节输出。你可以画700mA

  • GND-电源/数据/信号接地

焊接接头

要根据本教程使用每个引脚的功能,我们建议事先焊接引脚。 由于XIAO ESP32S3的尺寸很小,焊接接头时请小心,不要将不同的引脚粘在一起,也不要将焊料粘在屏蔽或其他部件上。否则,可能会导致XIAO短路或无法正常工作,由此造成的后果将由用户承担。

如果你选择了Sense版本,祝贺你!您将有两个额外的GPIO引脚。如果你打算使用它们,你可以在它们上焊一个单独的头。

数字的

XIAO ESP32S3具有多达11个常规GPIO引脚和9个模拟引脚。在这个例子中,我们将使用XIAO ESP32S3、XIAO扩展板和继电器来演示如何使用不同的数字引脚进行读写。

硬件准备

Seeed Studio XIAO ESP32S3Seeed Studio XIAO ESP32S3 SenseSeeed Studio Expansion Base for XIAO with Grove OLEDGrove - Relay

请将XIAO ESP32S3或Sense安装到扩展板上,并通过Grove电缆将继电器连接到扩展板的A0/D0接口。最后,通过USB-C电缆将XIAO连接到计算机。

###软件实施

在这个例子中,我们将使用连接到XIAO扩展板的按钮来实现继电器开/关状态的控制。按下按钮时,继电器接通,松开按钮时,中继器断开。

const int buttonPin = D1;     // the number of the pushbutton pin
int buttonState = 0; // variable for reading the pushbutton status
const int relayPin = D0;

void setup() {
// initialize the Relay pin as an output:
pinMode(relayPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT_PULLUP);
}

void loop() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);

// check if the pushbutton is pressed. If it is, the buttonState is HIGH:
if (buttonState == HIGH) {
// turn Relay on:
digitalWrite(relayPin, HIGH);
} else {
// turn Relay off:
digitalWrite(relayPin, LOW);
}
}

如果一切顺利,上传程序后,你应该会看到以下效果。

:::提示 如果要使用数字功能,则应使用字母“D”作为引脚编号的前缀,例如D4、D5。相反,如果要使用引脚的模拟功能,则应使用字母“a”作为引脚编号的前缀,例如A4、A5。 :::

对于Sense版本

对于XIAO ESP32S3 Sense,除了使用XIAO上的11个数字引脚外,您还可以使用扩展板上的两个引脚,即D11D12。如果您想使用它们,请按照以下步骤操作。

步骤1. 切断J1和J2之间的连接。

由于ESP32-S3上的引脚数量有限,Sense扩展板上的D11和D12默认为麦克风保留。如果您确实需要将D11和D12用于其他目的,您可以翻转Sense扩展板,并使用锋利的刀沿着两个焊盘之间的白线切断J1和J2之间的连接。

:::警告 从图中可以看出,由于肖的空间限制,许多布线布局都非常紧凑。因此,在切断J1和J2之间的连接时,请非常小心,不要在白线外切断,否则可能会导致开发板故障! :::

:::提示 切断J1和J2之间的连接后,扩展板上的麦克风功能将不再可用。如果需要使用麦克风功能,D11和D12引脚不能同时使用。在这种情况下,您可以分别焊接J1和J2的两个焊盘,以恢复麦克风功能。如下图所示,分别焊接红色和绿色区域。

:::

实际电路原理图请参考下图:

步骤2 硬件准备

Seeed Studio XIAO ESP32S3 SenseGrove - Relay

Step 3. Software implementation

以下程序每500毫秒切换一次继电器。将继电器的SIG引脚连接到扩展板的D11接口。

const int relayPin = D11;

void setup() {
// initialize the Relay pin as an output:
pinMode(relayPin, OUTPUT);
}

void loop() {
// turn Relay on:
digitalWrite(relayPin, HIGH);
delay(500);
// turn Relay off:
digitalWrite(relayPin, LOW);
delay(500);
}

上述方法也适用于 数字PWM模拟 部分。您只需要修改要使用的扩展板的引脚编号。以后不再重复。

数字PWM

XIAO ESP32S3上的所有GPIO引脚都支持PWM输出。因此,您可以使用任何引脚输出PWM来调整灯光的亮度、控制伺服和其他功能。

硬件准备

Seeed Studio XIAO ESP32S3Seeed Studio XIAO ESP32S3 SenseSeeed Studio Expansion Base for XIAO with Grove OLEDGrove - Variable Color LED

请将XIAO ESP32S3或Sense安装到扩展板上,然后使用Grove电缆将可变颜色LED连接到扩展板的A0/D0接口。最后,通过USB-C电缆将XIAO连接到您的电脑。

软件实现

在本例中,我们将演示如何使用PWM输出来控制灯光的亮度。

int LED_pin = D0;    // LED connected to digital pin 10

void setup() {
// declaring LED pin as output
pinMode(LED_pin, OUTPUT);
}

void loop() {
// fade in from min to max in increments of 5 points:
for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) {
// sets the value (range from 0 to 255):
analogWrite(LED_pin, fadeValue);
// wait for 30 milliseconds to see the dimming effect
delay(30);
}

// fade out from max to min in increments of 5 points:
for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) {
// sets the value (range from 0 to 255):
analogWrite(LED_pin, fadeValue);
// wait for 30 milliseconds to see the dimming effect
delay(30);
}
}

如果程序运行成功,您将看到以下运行效果。

模拟

在XIAO ESP32S3上,11个内置GPIO引脚中,除了用于串行通信的D6和D7引脚外,其余9个引脚支持模拟功能。您可以使用这些具有模拟功能的GPIO引脚来读取产生模拟信号的传感器的值,如氧传感器、光强传感器等。

硬件准备

Seeed Studio XIAO ESP32S3Seeed Studio XIAO ESP32S3 SenseSeeed Studio Expansion Base for XIAO with Grove OLEDGrove - Oxygen Sensor

请在扩展板上安装XIAO ESP32S3或Sense,然后用Grove电缆将氧传感器连接到扩展板上的A0/D0接口。最后,通过USB-C电缆将XIAO连接到计算机。

软件实现

在下面的程序中,我们将使用'analog read()'方法读取传感器的模拟值,并使用串行接口打印传感器结果。

// Grove - Gas Sensor(O2) test code
// Note:
// 1. It need about about 5-10 minutes to preheat the sensor
// 2. uncomment the module name you're using
// 3. modify VRefer if needed

// comment useless one
// #define MIX8410
#define O2_W2

#ifdef MIX8410
#define O2_COEFFICIENT 0.21
#elif defined(O2_W2)
#define O2_COEFFICIENT 0.087
#endif

const float VRefer = 3.34; // voltage of adc reference
const int pinAdc = A0;

void setup()
{
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println("Grove - Oxygen Sensor(MIX8410) Test Code...");
}

void loop()
{
// put your main code here, to run repeatedly:
float Vout =0;
Serial.print("Vout =");

Vout = readO2Vout();
Serial.print(Vout);
Serial.print(" V, Concentration of O2 is ");
Serial.println(readConcentration());
delay(500);
}

float readO2Vout()
{
long sum = 0;
for(int i=0; i<32; i++)
{
sum += analogRead(pinAdc);
}

sum >>= 5;

float MeasuredVout = sum * (VRefer / 1023.0);
return MeasuredVout;
}

float readConcentration()
{
// Vout samples are with reference to 3.3V
float MeasuredVout = readO2Vout();

//float Concentration = FmultiMap(MeasuredVout, VoutArray,O2ConArray, 6);
//when its output voltage is 2.0V,
float Concentration = MeasuredVout * O2_COEFFICIENT / 2.0;
float Concentration_Percentage=Concentration*100;
return Concentration_Percentage;
}

:::提示 如果要使用引脚的模拟功能,应使用字母“a”作为引脚编号的前缀,如A4、A5。相反,如果要使用数字功能,则应使用字母“D”作为引脚编号的前缀,例如D4、D5. :::

上传程序后,打开Arduino IDE中的串行监视器,并将波特率设置为9600。等待氧传感器预热,然后您将能够看到准确的氧浓度值。

##串行

在使用Arduino IDE时,串行通信是许多项目的重要组成部分。要在Arduino IDE中使用Serial,需要先打开Serial Monitor窗口。这可以通过单击工具栏中的串行监视器图标或按Ctrl+M快捷键来完成。

###一般用途

一些常用的串行功能包括:

  • Serial.begin() -- 其以指定的波特率初始化通信;
  • Serial.print() -- 其以可读格式向串行端口发送数据;
  • Serial.write() -- 其向串行端口发送二进制数据;
  • Serial.available() -- 其检查是否存在可从串行端口读取的任何数据;
  • Serial.read() -- 其从串行端口读取单个字节的数据;
  • Serial.flush() -- 其等待输出串行数据的传输完成。

通过使用这些串行功能,您可以在Arduino板和计算机之间发送和接收数据,这为创建交互式项目开辟了许多可能性。

以下是一个示例程序:

void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}

void loop() {
// send data to the serial port
Serial.println("Hello World!");

// read data from the serial port
if (Serial.available() > 0) {
// read the incoming byte:
char incomingByte = Serial.read();
// print the incoming byte to the serial monitor:
Serial.print("I received: ");
Serial.println(incomingByte);
}

// wait for a second before repeating the loop
delay(1000);
}

在这段代码中,我们首先使用“setup()”函数中的“Serial.begin()”功能以9600的波特率初始化串行通信。然后,在“loop()”函数中,我们使用“Serial.print()”功能将“Hello World!”发送到串行端口。

我们还使用“Serial.available()”函数来检查是否有任何数据可从串行端口读取。如果有,我们使用“Serial.read()”功能读取传入字节,并将其存储在一个名为incomingByte的变量中。然后,我们使用“Serial.print()”和“Serial.println()”函数将“I received:”和incomingByte的值打印到串行监视器。

最后,我们添加一个“delay()”函数,在重复循环之前等待一秒钟。这段代码演示了如何使用Arduino IDE中一些常用的串行函数通过串行端口发送和接收数据。

上传程序后,打开Arduino IDE中的串行监视器,并将波特率设置为9600。您将在串行监视器上看到以下消息,该消息输出“Hello World!”每秒钟。此外,您可以通过串行监视器将内容发送到XIAO ESP32S3,XIAO将打印出您发送的内容的每个字节。

###软件序列的使用

如果您觉得一个硬件串行端口不够,还可以使用ESP32的软件串行功能将一些引脚设置为软件串行,以扩大串行端口的数量。

当然,我们建议使用第二种映射硬件串行端口的方法,因为这是ESP32的独特功能。您可以在[其他硬件序列号](#Other Hardware Serial)部分了解更多信息。

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); // RX, TX

void setup() {
// initialize serial communication
Serial.begin(9600);
while (!Serial);

// initialize software serial
mySerial.begin(9600);
}

void loop() {
// read data from software serial
if (mySerial.available()) {
char data = mySerial.read();
Serial.print("Received data: ");
Serial.println(data);
}

// write data to software serial
mySerial.print("Hello World!");

// wait for a second before repeating the loop
delay(1000);
}

在这个程序中,我们首先包括“SoftwareSerial.h”库来使用软件序列。然后,我们使用引脚2和3分别作为RX和TX创建一个名为mySerial的新SoftwareSerial对象。

在“setup()”函数中,我们初始化硬件串行(“serial.begin()”)和软件串行(“mySerial.begin[()]”)。

在“loop()”函数中,我们使用“mySerial.available()”功能来检查是否有任何数据可从软件序列中读取。如果有,我们使用“mySerial.read()”函数读取传入字节,并将其存储在一个名为data的变量中。然后,我们使用“Serial.print()”和“Serial.println()”函数打印“Received data:”,然后将数据值打印到硬件序列。

我们还使用mySerial.print()函数将“Hello World!”写入软件序列。这将把数据从XIAO发送到连接到软件串行端口的设备。

最后,我们添加一个“delay()”函数,在重复循环之前等待一秒钟。

::: 笔记 请注意,为了在ESP32-S3上使用软件串行,您需要为RX和TX选择不用于任何其他目的的适当引脚。在本例中,我们分别将引脚9和10用于RX和TX。 :::

其他硬件序列

ESP32S3共有三个UART通信接口,编号从0到2,分别为UART0、UART1和UART2。这三个串行端口的引脚不是固定的,可以重新映射到任何IO端口。

默认情况下,我们不使用UART0,因为它用于USB串行通信。您可以通过自定义硬件串行映射来使用其他硬件串行端口。

// Need this for the lower level access to set them up.
#include <HardwareSerial.h>

//Define two Serial devices mapped to the two internal UARTs
HardwareSerial MySerial0(0);
HardwareSerial MySerial1(1);

void setup()
{
// For the USB, just use Serial as normal:
Serial.begin(115200);

// Configure MySerial0 on pins TX=D6 and RX=D7 (-1, -1 means use the default)
MySerial0.begin(9600, SERIAL_8N1, -1, -1);
MySerial0.print("MySerial0");

// And configure MySerial1 on pins RX=D9, TX=D10
MySerial1.begin(115200, SERIAL_8N1, 9, 10);
MySerial1.print("MySerial1");
}

void loop()
{

}

在下文中,我们将介绍60GHz毫米波传感器-人类静息呼吸和心跳模块,并解释如何使用D9和D10硬件串行端口以及USB串行端口。

请做好以下准备。

Seeed Studio XIAO ESP32S3Seeed Studio XIAO ESP32S3 Sense60GHz mmWave Sensor -
Human Resting Breathing
and Heartbeat Module

将传感器库下载到您的计算机上。并将其添加到Arduino IDE中。

在这里,我们想要解析心跳和呼吸数据信息,然后你可以像这样重写你的程序。

#include "Arduino.h"
#include <60ghzbreathheart.h>
#include <HardwareSerial.h>

HardwareSerial MySerial(0); //Create a new HardwareSerial class -- D6/D7

// can also try hardware serial with
BreathHeart_60GHz radar = BreathHeart_60GHz(&MySerial);

void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
MySerial.begin(115200, SERIAL_8N1, 9, 10); // at CPU Freq is 40MHz, work half speed of defined.

while(!Serial); //When the serial port is opened, the program starts to execute.

Serial.println("Readly");

// radar.ModeSelect_fuc(1); //1: indicates real-time transmission mode, 2: indicates sleep state mode.
//After setting the mode, if you do not see data returned, you may need to re-power the sensor.
}

void loop()
{
// put your main code here, to run repeatedly:
radar.Breath_Heart(); //Breath and heartbeat information output
if(radar.sensor_report != 0x00){
switch(radar.sensor_report){
case HEARTRATEVAL:
Serial.print("Sensor monitored the current heart rate value is: ");
Serial.println(radar.heart_rate, DEC);
Serial.println("----------------------------");
break;
case HEARTRATEWAVE: //Valid only when real-time data transfer mode is on
Serial.print("The heart rate waveform(Sine wave) -- point 1: ");
Serial.print(radar.heart_point_1);
Serial.print(", point 2 : ");
Serial.print(radar.heart_point_2);
Serial.print(", point 3 : ");
Serial.print(radar.heart_point_3);
Serial.print(", point 4 : ");
Serial.print(radar.heart_point_4);
Serial.print(", point 5 : ");
Serial.println(radar.heart_point_5);
Serial.println("----------------------------");
break;
case BREATHNOR:
Serial.println("Sensor detects current breath rate is normal.");
Serial.println("----------------------------");
break;
case BREATHRAPID:
Serial.println("Sensor detects current breath rate is too fast.");
Serial.println("----------------------------");
break;
case BREATHSLOW:
Serial.println("Sensor detects current breath rate is too slow.");
Serial.println("----------------------------");
break;
case BREATHNONE:
Serial.println("There is no breathing information yet, please wait...");
Serial.println("----------------------------");
break;
case BREATHVAL:
Serial.print("Sensor monitored the current breath rate value is: ");
Serial.println(radar.breath_rate, DEC);
Serial.println("----------------------------");
break;
case BREATHWAVE: //Valid only when real-time data transfer mode is on
Serial.print("The breath rate waveform(Sine wave) -- point 1: ");
Serial.print(radar.breath_point_1);
Serial.print(", point 2 : ");
Serial.print(radar.breath_point_2);
Serial.print(", point 3 : ");
Serial.print(radar.breath_point_3);
Serial.print(", point 4 : ");
Serial.print(radar.breath_point_4);
Serial.print(", point 5 : ");
Serial.println(radar.breath_point_5);
Serial.println("----------------------------");
break;
}
}
delay(200); //Add time delay to avoid program jam
}

请上传程序,然后打开串行监视器并将波特率设置为115200。

如果一切顺利,您将在串行监视器上看到数据消息。

pir

IIC

XIAO ESP32S3具有I2C接口,可用于许多传感器的数据传输和解析,以及使用一些OLED屏幕。 ###硬件准备

Seeed Studio XIAO ESP32S3Seeed Studio XIAO ESP32S3 SenseSeeed Studio Expansion Base for XIAO with Grove OLED

XIAO扩展板上的OLED显示器使用I2C协议,并通过板上的I2C电路连接到XIAO的I2C接口。因此,我们可以直接将XIAO插入扩展板,并对其进行编程以在屏幕上显示内容。

软件实现

本示例介绍了如何在XIAO ESP32S3的Seeed Studio扩展底座上使用OLED显示器。

####步骤1. 在扩展板上安装Seeed Studio XIAO ESP32S3,然后连接C型电缆。

####步骤2.安装u8g2库。

####步骤3.复制代码并粘贴在Ardiono IDE上,然后上传。

#include <Arduino.h>
#include <U8x8lib.h>
#include <Wire.h>

U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); // OLEDs without Reset of the Display

void setup(void) {
u8x8.begin();
u8x8.setFlipMode(1); // set number from 1 to 3, the screen word will rotary 180
}

void loop(void) {
u8x8.setFont(u8x8_font_chroma48medium8_r);
u8x8.setCursor(0, 0);
u8x8.print("Hello World!");
}

在代码的前几行中,我们包括了所需的库,如Arduino.h、U8x8lib.h和Wire.h。U8x8lib/h库提供了控制OLED显示器的功能,Wire.h库提供了I2C通信的功能。

在“setup()”函数中,我们使用“u8x8.begin()”功能初始化OLED显示器。我们还使用“u8x8.setFlipMode()”函数设置显示器的翻转模式,以将屏幕旋转180度。

在“loop()”函数中,我们使用“u8x8.setFont()”功能设置字体,并使用“u8c8.setCursor())”功能指定光标在显示器上的位置。最后,我们使用u8x8.print()函数在OLED显示器上显示字符串“Hello World!”。

如果您将程序上传到XIAO ESP32S3,您将看到扩展板上OLED显示屏上显示的内容。

##SPI

ESP32-S3芯片集成了多个外围设备,包括可用于连接闪存、显示器、传感器等外部SPI设备的SPI接口。ESP32-S3还支持高速SPI传输模式,可实现80MHz的最大SPI传输速率,满足大多数SPI设备的数据传输需求。

###硬件准备

Seeed Studio XIAO ESP32S3Seeed Studio XIAO ESP32S3 SenseGrove - OLED Display 1.12 (SH1107) V3.0 - SPI/IIC

如上所述准备好硬件后,使用跳线连接XIAO和OLED的SPI接口。接线方法请参考下图。

软件实现

接下来,我们将以以下程序为例,介绍如何使用SPI接口控制OLED屏幕显示。

安装u8g2库。

#include <Arduino.h>
#include <U8g2lib.h>
#include <SPI.h>
#include <Wire.h>

U8G2_SH1107_128X128_1_4W_HW_SPI u8g2(U8G2_R3, /* cs=*/ D7, /* dc=*/ D4, /* reset=*/ D5);

void setup(void) {
u8g2.begin();
}

void loop(void) {
u8g2.firstPage();

do {
u8g2.setFont(u8g2_font_luBIS08_tf);
u8g2.drawStr(0,24,"Hello Seeed!");
} while ( u8g2.nextPage() );
}

在“setup()”函数中,“U8G2_SH1107_128X128_1_4W_HW_SPI”类使用适当的构造函数参数实例化,这些参数指定用于芯片选择(cs)、数据/命令(dc)和重置的引脚。然后,调用“u8g2.begin()”函数来初始化显示。

在“loop()”函数中,使用“u8g2.firstPage()”、“u8g2.setFont()”和“u8g2.drawStr())”函数用新内容更新显示。“u8g2.firstPage()”函数设置用于写入的显示缓冲区,而“u8g2.nextPage()”则显示更新的内容。do-while循环确保内容连续显示,直到程序停止。

总之,这段代码演示了如何使用U8g2库来控制OLED显示器并在其上显示文本。

For Sense

如果您购买了Sense版本,并且需要连接到扩展板,请注意扩展板上的SD卡会占用SPI引脚,这可能导致SPI引脚不可用。

Sense扩展板上提供的焊盘接口允许用户选择所需的功能。其中,J3焊盘的功能是启用SPI或SD卡功能。

如果要使用SPI引脚/禁用扩展板的SD卡如果要启用扩展板上的SD卡/禁用SPI引脚
沿着白色细线切割以断开焊盘连接。将两个焊盘焊接在一起。

:::警告 从图中可以看出,由于肖的空间限制,许多布线布局都非常紧凑。因此,在切割J3的连接时,请非常小心,不要在白线外切割,否则可能会导致开发板故障! :::

:::警告 为了常识起见,J3在上面被简单地描述为打开或关闭SD卡功能的接口,但这实际上是不准确的。实际电路连接如下所示。切断J3实际上断开了从R4到R6的上拉电阻器,这是SD卡功能被禁用而SPI功能恢复正常的主要原因。

:::

触针

除了上述常见的功能引脚外,XIAO ESP32S3/XIAO ESP32S3 Sense还具有9个触摸检测引脚A0~A5、A8~A10。

我们可以通过读取引脚的模拟值来检查引脚是否被触摸,这非常方便。以下程序用于检测引脚A5是否已被触摸。

const int touch_pin = A5;

void setup(void) {
Serial.begin(9600);
}

void loop(void) {
Serial.print("Touch value: ");
Serial.println(analogRead(touch_pin));
delay(1000);
}

上传程序后,打开串行监视器并将波特率设置为9600。然后触摸引脚A5,您会发现模拟读取值将明显大于触摸前的值。

USB Pins

ESP32-S3是一款集成了Wi-Fi和蓝牙功能的微控制器,其D+和D-引脚用于支持USB通信。具体而言,这两个引脚是用于USB 2.0设备和主机之间的高速数据传输的差分信号线。

D+引脚是用于发送数据的正极性线路,而D-引脚是用于传输数据的负极性线路。当USB设备连接到主机时,主机会检测这两个引脚上的电压变化,以确定设备的连接状态和传输速度。在数据传输过程中,D+和D-引脚交替传输数据位和同步信号,以实现可靠的数据传输。

JTAG引脚

ESP32-S3的JTAG(联合测试行动小组)接口是一个调试和测试接口,可用于开发、调试和测试过程中的非常低级的硬件调试和编程。JTAG接口包括一组标准信号线,包括时钟线、数据输入线、数据输出线、测试模式选择线和测试模式时钟线等。

ESP32-S3的JTAG接口可用于以下目的: 1.调试:JTAG接口可用于ESP32-S3芯片中的调试和单步执行,帮助开发人员发现和解决代码错误。

2.闪烁程序:通过JTAG接口,可以将程序或调试固件加载到ESP32-S3芯片中。

3.读取CPU状态:JTAG接口可用于读取ESP32-S3芯片的CPU状态、内存内容和寄存器值,用于调试和测试。

需要注意的是,使用JTAG接口需要专用的硬件设备和软件工具,以及相应的专业知识和技能。因此,一般情况下,JTAG接口仅用于特定场景,如开发、调试和测试。对于普通用户来说,使用ESP32-S3的其他功能和接口已经足够了。

如果你想了解更多关于JTAG调试的信息,请阅读官方网站ESP32 文档.

##故障排除

###Q1:为什么我在使用串行监视器时会出现以下错误?

A: 如果您遇到这种类型的错误,请打开USB CDC开机开关。

这个问题也可能表现为ArduinoIDE2.x中的空串行输出,也可能是由同样的原因引起的。

###Q2:ESP-32支持或不支持哪些功能?

A: 以下是由提供的支持/不支持的功能列表 ESP32。 截至2023年4月10日。

外围设备ESP32ESP32-S2ESP32-C3ESP32-S3Comments
ADCYesYesYesYes
BluetoothYesNot SupportedNot SupportedNot SupportedBluetooth Classic
BLEYesNot SupportedYesYes
DACYesYesNot SupportedNot Supported
EthernetYesNot SupportedNot SupportedNot Supported(*)
GPIOYesYesYesYes
Hall SensorYesNot SupportedNot SupportedNot Supported
I2CYesYesYesYes
I2SYesYesYesYes
LEDCYesYesYesYes
Motor PWMNoNot SupportedNot SupportedNot Supported
Pulse CounterNoNoNoNo
RMTYesYesYesYes
SDIONoNoNoNo
SDMMCYesNot SupportedNot SupportedYes
TimerYesYesYesYes
Temp. SensorNot SupportedYesYesYes
TouchYesYesNot SupportedYes
TWAINoNoNoNo
UARTYesYesYesYes
USBNot SupportedYesYesYesESP32-C3 only CDC/JTAG
Wi-FiYesYesYesYes

Q3:为什么我总是能在串行监视器中看到芯片的调试消息?

A: 您可以尝试在Arduino IDE中使用以下方法关闭调试消息的输出,Tool -> Core Debug Level: -> None v。

然而,这种方法并不总是有效的,事实上,ESP32-S3的调试信息总是从串行端口打印出来的,这是不可更改的。请原谅,它太急于让你知道它工作正常了。

Q4:为什么我切断了J3的连接,但仍然测试D8和D9引脚高?写入microSD卡仍然有成功的可能性?

在SD卡设计方面,正确的电路必须具有上拉电阻器,才能使microSD卡正常工作。如果您在切割J3后发现引脚级别和读写卡仍然正常,这可能只是一种幸运的情况,我们不建议您在这种情况下读写卡,这可能会导致写入数据丢失的问题。而D8和D9引脚可以通过在切割J3之后写入低电平来修改电平。

技术支持和产品讨论

.

感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您使用我们产品的体验尽可能顺利。我们提供多种沟通渠道,以满足不同的偏好和需求。

Loading Comments...