返回

Arduino串口回显:学习USART通信

引言

串行通信是嵌入式电子学中最基础的技能之一。无论你是调试传感器、与GPS模块通信,还是向PC发送数据,USART(通用同步/异步收发器)都是你的得力工具。在本教程中,我们将使用Velxio模拟器中的Arduino Uno构建一个简单的串口回显项目。你在串口监视器中输入的每个字符都会被回显,并附带其ASCII值和累计计数。这就是串行通信领域的”Hello, World!”。

Velxio模拟器画布上串口回显的电路图

电路讲解

这个项目非常简单——它只使用了Arduino Uno板本身。不需要任何外部元件,因为串行通信是通过Uno内置的USB转串口转换器进行的。在Velxio中,串口监视器集成在编辑器工具栏中,因此你可以立即与代码进行交互。

组件

组件数量备注
Arduino Uno (wokwi-arduino-uno)1项目的大脑

仅此而已!Arduino Uno的TX(引脚1)和RX(引脚0)在内部连接到USB接口,Velxio完美地模拟了这一过程。无需任何接线。

带有编译和运行控件的Velxio编辑器工具栏

代码讲解

让我们深入代码。打开Velxio编辑器,你会看到以下草图:

// Serial Echo — USART Protocol Test
// Open the Serial Monitor to send and receive data.
// Everything you type is echoed back with extra info.

void setup() {
  Serial.begin(9600);
  Serial.println("=============================");
  Serial.println("  Serial Echo Test (USART)");
  Serial.println("=============================");
  Serial.println("Type something and press Send.");
  Serial.println();

  // Print system info
  Serial.print("CPU Clock: ");
  Serial.print(F_CPU / 1000000);
  Serial.println(" MHz");
  Serial.print("Baud rate: 9600");
  Serial.println();
  Serial.println();
}

unsigned long charCount = 0;

void loop() {
  if (Serial.available() > 0) {
    char c = Serial.read();
    charCount++;

    Serial.print("[");
    Serial.print(charCount);
    Serial.print("] Received: '");
    Serial.print(c);
    Serial.print("' (ASCII ");
    Serial.print((int)c);
    Serial.println(")");
  }

  // Periodic heartbeat
  static unsigned long lastBeat = 0;
  if (millis() - lastBeat >= 5000) {
    lastBeat = millis();
    Serial.print("Uptime: ");
    Serial.print(millis() / 1000);
    Serial.print("s | Chars received: ");
    Serial.println(charCount);
  }
}

Velxio Monaco编辑器中串口回显的源代码

工作原理

  1. 设置:我们使用Serial.begin(9600)9600波特率初始化串行通信。然后打印一个标题和系统信息:CPU时钟速度(F_CPU / 1000000 得到MHz)和波特率。

  2. 全局变量unsigned long charCount = 0; 用于跟踪我们接收到的字符数量。

  3. 循环

    • if (Serial.available() > 0) 检查接收缓冲区中是否有数据等待处理。
    • char c = Serial.read(); 读取一个字符。
    • 我们递增charCount并打印一条格式化消息:[count] Received: 'c' (ASCII 99)
    • 每5秒,我们打印一次心跳信息,包含运行时间和接收到的总字符数。

学生需掌握的关键概念

常见问题与调试技巧

建议的扩展练习

掌握基本回显后,尝试以下增强功能:

  1. 回显整行:不再逐个回显字符,而是累积字符直到换行,然后回显整行。
  2. 命令解析器:解释特殊命令,如”LED ON”来点亮LED(在电路中添加一个LED)。
  3. 二进制输出:以二进制格式打印接收到的字符。
  4. 多波特率支持:允许用户通过命令更改波特率。
  5. 记录到虚拟EEPROM:将接收到的数据存储到模拟的EEPROM中。

结论

你已经完成了第一个串行通信项目!串口回显是一个简单但强大的演示,展示了微控制器如何与外部世界通信。借助Velxio,你无需任何硬件即可进行实验——只需打开模拟器,编写代码,并立即测试。

准备好亲自尝试了吗?在Velxio中打开实时示例并开始输入:Velxio上的串口回显。祝你编码愉快!


分享到:
David Montero

作者

David Montero

Creator of Velxio, the open-source circuit and Arduino simulator.

GitHub velxio.dev

相关文章


上一篇
Arduino 串口控制 LED:发送指令实现闪烁
下一篇
LCD 20x4 显示屏与 Arduino:在 Velxio 中实现 Hello World