项目 | 参数 |
---|---|
CPU | ARM Cortex-M0+ CPU(SAMD21G18),最高运行频率 48MHz |
Flash 内存 | 256KB |
SRAM | 32KB |
数字 I/O 引脚 | 11 |
模拟 I/O 引脚 | 11 |
I2C 接口 | 1 |
SPI 接口 | 1 |
QTouch | 7 (A0,A1,A6,A7,A8,A9,A10) |
UART 接口 | 1 |
供电和下载接口 | Type-C |
电源 | 3.3V/5V DC |
尺寸 | 21×17.8×3.5mm |
关于通用 I/O 引脚: MCU 的工作电压为 3.3V。如果连接到通用 I/O 引脚的电压输入高于 3.3V,可能会导致芯片损坏。
关于电源引脚: 内置的 DC-DC 转换电路能够将 5V 电压转换为 3.3V,因此可以通过 VIN-PIN 和 5V-PIN 使用 5V 电源为设备供电。
XIAO SAMD21 当前仅支持电池供电,当连接电池时不能同时连接 Type-C 接口,因为这可能存在安全风险。
请注意使用,不要抬起屏蔽盖。
有时在用户编程过程中失败时,Seeed Studio XIAO SAMD21 的端口可能会消失。我们可以通过以下操作解决此问题:
此时,芯片进入 Bootloader 模式,烧录端口再次出现。因为 SAMD21 芯片有两个分区,一个是 Bootloader,另一个是用户程序。产品出厂时会在系统内存中烧录 Bootloader 代码。我们可以通过执行上述步骤切换模式。
如果您想复位 Seeed Studio XIAO SAMD21,请执行以下步骤:
请注意:内置 LED 的行为与 Arduino 上的 LED 相反。在 Seeed Studio XIAO SAMD21 上,引脚必须拉低,而在其他微控制器上则必须拉高。
Seeed Studio XIAO SAMD21 上的所有引脚都支持中断,但有两个引脚不能同时使用:5 引脚和 7 引脚。有关中断的更多详细信息,请查看 这里。
我们不需要自己配置引脚,在使用引脚后,可以直接调用一个函数。
const int buttonPin = 6; // 按钮引脚的编号
const int ledPin = 13; // LED 引脚的编号
int buttonState = 0; // 用于读取按钮状态的变量
void setup() {
// 将 LED 引脚初始化为输出模式:
pinMode(ledPin, OUTPUT);
// 将按钮引脚初始化为输入模式:
pinMode(buttonPin, INPUT);
}
void loop() {
// 读取按钮的状态值:
buttonState = digitalRead(buttonPin);
// 检查按钮是否被按下。如果按下,buttonState 为 HIGH:
if (buttonState == HIGH) {
// 打开 LED:
digitalWrite(ledPin, HIGH);
} else {
// 关闭 LED:
digitalWrite(ledPin, LOW);
}
}
void setup() {
// 将 ledPin 声明为输出模式:
pinMode(ledPin, OUTPUT);
}
void loop() {
// 从传感器读取值:
sensorValue = analogRead(sensorPin);
// 打开 ledPin:
digitalWrite(ledPin, HIGH);
// 程序暂停 <sensorValue> 毫秒:
delay(sensorValue);
// 关闭 ledPin:
digitalWrite(ledPin, LOW);
// 程序暂停 <sensorValue> 毫秒:
delay(sensorValue);
}
void setup() {
Serial1.begin(115200);
while (!Serial);
}
void loop() {
Serial1.println("你好,世界");
delay(1000);
}
// Wire 主机写入示例
// 作者:Nicholas Zambetti <http://www.zambetti.com>
// 演示如何使用 Wire 库
// 向 I2C/TWI 从设备写入数据
// 请参考 "Wire 从机接收" 示例以配合使用
// 创建于 2006 年 3 月 29 日
// 此示例代码属于公共领域。
#include <Wire.h>
void setup()
{
Wire.begin(); // 加入 I2C 总线(主机地址可选)
}
byte x = 0;
void loop()
{
Wire.beginTransmission(4); // 传输到设备 #4
Wire.write("x 是 "); // 发送五个字节
Wire.write(x); // 发送一个字节
Wire.endTransmission(); // 停止传输
x++;
delay(500);
}
#include <SPI.h>
const int CS = 7;
void setup (void) {
digitalWrite(CS, HIGH); // 禁用从设备选择
SPI.begin ();
SPI.setClockDivider(SPI_CLOCK_DIV8); // 将时钟分频为 8
}
void loop (void) {
char c;
digitalWrite(CS, LOW); // 启用从设备选择
// 发送测试字符串
for (const char * p = "你好,世界!\r" ; c = *p; p++) {
SPI.transfer (c);
}
digitalWrite(CS, HIGH); // 禁用从设备选择
delay(2000);
}
关于如何使用 QTouch,我们提供了一个示例项目:如何在 Seeed Studio XIAO SAMD21 上实现水果钢琴的 Q-Touch 功能。
虽然它仍然具有基于 PWM 的“模拟输出”,但 SAMD21 还具有真正的模拟输出形式,即数字-模拟转换器(DAC)。该模块可以产生 0 到 3.3V 之间的模拟电压。它可以用于生成更自然的音频,或者作为一种“数字电位器”来控制模拟设备。
DAC 仅在 Arduino 引脚 A0 上可用,并通过 (analogWrite(A0, <value>
) 控制。DAC 可以设置为 10 位分辨率(请确保在设置中调用 analogWriteResolution(10)),这意味着 0 到 1023 之间的值将设置为 0 到 3.3V 之间的电压。
除了 DAC,SAMD21 的 ADC 通道也与 ATmega328 不同:它们配备了高达 12 位的分辨率。这意味着模拟输入值可以在 0-4095 之间,表示 0 到 3.3V 之间的电压。要以 12 位模式使用 ADC,请确保在设置中调用 analogReadResolution(12)。
串口绘图 DAC
以下是一个同时演示 DAC 和 ADC 的示例。要设置实验,请将 A0 连接到 A1 —— 我们将用模拟电压驱动 A0,然后用 A1 读取它。这是我们教程中最简单的电路:
使用 Seeed Studio XIAO SAMD21 扩展板 的 Seeed Studio XIAO SAMD21。
此代码在 A0 上生成一个正弦波输出,值范围为 0 到 3.3V。然后它使用 A1 将该输出读取到其 ADC 中,并将其转换为 0 到 3.3V 之间的电压。
当然,您可以打开串口监视器查看电压值流。但如果通过文本难以直观地看到正弦波,请尝试 Arduino 的新串口绘图工具,路径为 Tools > Serial Plotter。
感谢 Aleksei Tertychnyi 提交的代码,所有相关功能均由他开发和贡献。
#define DAC_PIN A0 // 使代码更具可读性
float x = 0; // 用于计算正弦值的变量
float increment = 0.02; // 每次增加 x 的值
int frequency = 440; // 正弦波的频率
void setup()
{
analogWriteResolution(10); // 将模拟输出分辨率设置为最大值 10 位
analogReadResolution(12); // 将模拟输入分辨率设置为最大值 12 位
Serial.begin(9600);
}
void loop()
{
// 生成 0 到 1023 之间的电压值。
// 将正弦波缩放到这些值之间:
// 偏移 511.5,然后将正弦值乘以 511.5。
int dacVoltage = (int)(511.5 + 511.5 * sin(x));
x += increment; // 增加 x 的值
// 生成 0 到 3.3V 之间的电压。
// 0= 0V,1023=3.3V,512=1.65V,等等。
analogWrite(DAC_PIN, dacVoltage);
// 现在读取 A1(连接到 A0),并将
// 12 位 ADC 值转换为 0 到 3.3V 之间的电压。
float voltage = analogRead(A1) * 3.3 / 4096.0;
Serial.println(voltage); // 打印电压值。
delay(1); // 延迟 1 毫秒
}
结果
所需材料
有些 USB 数据线只能供电,无法传输数据。如果您没有 USB 数据线,或者不确定您的 USB 数据线是否可以传输数据,可以查看 Seeed USB Type-C 支持 USB 3.1。
第 1 步:准备一块 Seeed Studio XIAO SAMD21 和一根 Type-C 数据线。
第 2 步:将 Seeed Studio XIAO SAMD21 连接到您的电脑。此时黄色电源 LED 应该会亮起。
如果这是您第一次使用 Arduino,我们强烈建议您参考 Arduino 入门指南。
启动 Arduino 应用程序
双击您之前下载的 Arduino 应用程序 (arduino.exe)。
如果 Arduino 软件以其他语言加载,您可以在首选项对话框中更改语言。详情请参阅 Arduino 软件 (IDE) 页面。
打开 LED 闪烁示例代码:文件 > 示例 > 01.Basics > Blink。
点击 文件 > 首选项,在附加开发板管理器 URL 中填写以下 URL:
https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json
点击 工具 -> 开发板 -> 开发板管理器...,在搜索框中输入关键字 "Seeed Studio XIAO SAMD21"。找到 "Seeed SAMD Boards",然后安装它。
安装开发板后,点击 工具 -> 开发板,找到 "**Seeed Studio XIAO **" 并选择它。现在,您已经在 Arduino IDE 中设置好了 Seeed Studio XIAO SAMD21 开发板。
从工具菜单的串口选项中选择 Arduino 开发板的串行设备。这通常是 COM3 或更高(COM1 和 COM2 通常保留给硬件串口)。要确认,可以断开 Arduino 开发板并重新打开菜单;消失的条目应该就是 Arduino 开发板。重新连接开发板并选择该串口。
现在,只需点击环境中的 "上传" 按钮。等待几秒钟,如果上传成功,状态栏中会显示 "上传完成" 的消息。
上传完成几秒钟后,您应该会看到开发板上的 13 号引脚 (L) LED 开始闪烁(橙色)。如果是这样,恭喜您!您已经成功运行了 Arduino。如果遇到问题,请查看故障排除建议。
最大闪存大小为 8KB,更多信息请参考资源中的 ATSAMD218A-MU 数据手册。
如何使用 Raspberry Pi 修复损坏的 Xiao。感谢 John_Doe 的分享。
[PDF] ATSAMD218A-MU 数据手册