介绍
USB转TTL串口模块,基于CH340G/CH340C芯片,支持USB 2.0转UART,输出3.3V/5V TTL电平,通信速率最高2Mbps,广泛用于单片机调试、固件烧录、串口通信等
USB转TTL串口模块,基于CH340G/CH340C芯片,支持USB 2.0转UART,输出3.3V/5V TTL电平,通信速率最高2Mbps,广泛用于单片机调试、固件烧录、串口通信等
| 参数 | 值 |
|---|---|
| 尺寸 | 约45×17mm |
| 驱动 | Windows/Linux/macOS免驱或CH340驱动 |
| TTL电平 | 3.3V / 5V可选 |
| USB接口 | USB 2.0 Type-A / Micro USB |
| 停止位 | 1/1.5/2位 |
| 指示灯 | TX/RX LED |
| 数据位 | 5/6/7/8位 |
| 校验位 | 无/奇/偶/标记/空格 |
| 主控芯片 | CH340G/CH340C |
| 输出电压 | 3.3V / 5V(可对外供电最大500mA) |
| 通信速率 | 50bps - 2Mbps |
# USB-TTL 串口通信代码例程
## 一、Arduino平台 - 基础串口收发
```cpp
// Arduino通过USB-TTL与PC通信
void setup() {
Serial.begin(115200); // 初始化硬件串口,波特率115200
Serial.println("USB-TTL 模块测试开始");
Serial.println("请输入任意字符...");
}
void loop() {
if (Serial.available() > 0) {
char c = Serial.read();
Serial.print("接收到: ");
Serial.println(c);
// 回显并附加信息
Serial.printf("字符: '%c', ASCII: %d, HEX: 0x%02X\n", c, c, c);
}
}
```
## 二、Arduino - 使用SoftwareSerial扩展串口
```cpp
#include <SoftwareSerial.h>
// 使用GPIO 2(RX)和GPIO 3(TX)创建软串口,连接USB-TTL模块
SoftwareSerial mySerial(2, 3); // RX=2, TX=3
void setup() {
Serial.begin(115200); // 硬件串口(调试用)
mySerial.begin(9600); // 软串口(通过USB-TTL连接其他设备)
Serial.println("软串口测试启动");
}
void loop() {
// 从USB-TTL(软串口)读取数据,转发到硬件串口
if (mySerial.available()) {
char c = mySerial.read();
Serial.print("[软串口收到] ");
Serial.println(c);
}
// 从硬件串口读取数据,通过USB-TTL(软串口)转发出去
if (Serial.available()) {
char c = Serial.read();
mySerial.print(c);
Serial.print("[已转发] ");
Serial.println(c);
}
}
```
## 三、ESP32 - 多串口通信示例
```cpp
// ESP32有3个硬件UART,可同时连接多个USB-TTL模块
HardwareSerial Serial2(2); // UART2: RX=GPIO16, TX=GPIO17
void setup() {
Serial.begin(115200); // USB原生串口(调试)
Serial2.begin(9600, SERIAL_8N1, 16, 17); // 接USB-TTL模块
Serial.println("ESP32 多串口测试");
}
void loop() {
// UART2 → USB Serial
while (Serial2.available()) {
char c = Serial2.read();
Serial.print("[UART2] ");
Serial.println(c);
}
// USB Serial → UART2
while (Serial.available()) {
char c = Serial.read();
Serial2.print(c);
}
delay(10);
}
```
## 四、Python(PC端) - 通过USB-TTL与MCU通信
```python
#!/usr/bin/env python3
"""
PC端通过USB-TTL模块与MCU进行串口通信
需要安装 pyserial: pip install pyserial
"""
import serial
import serial.tools.list_ports
import time
def list_ports():
"""列出所有可用串口"""
ports = serial.tools.list_ports.comports()
for port in ports:
print(f" {port.device} - {port.description} [VID:{port.vid:04X} PID:{port.pid:04X}]")
def main():
print("可用串口:")
list_ports()
# 根据实际COM口修改(Windows: COM3, Linux: /dev/ttyUSB0, macOS: /dev/tty.usbserial-xxx)
port = "/dev/ttyUSB0" # Linux
# port = "COM3" # Windows
# port = "/dev/tty.usbserial-1420" # macOS
baudrate = 115200
try:
ser = serial.Serial(
port=port,
baudrate=baudrate,
bytesize=serial.EIGHTBITS,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
timeout=1.0
)
print(f"✓ 已连接 {port} @ {baudrate}bps")
# 发送数据
ser.write(b"Hello MCU!\n")
time.sleep(0.1)
# 持续读取
print("等待接收数据 (Ctrl+C 退出)...")
while True:
if ser.in_waiting > 0:
data = ser.readline()
print(f"← {data.decode('utf-8', errors='replace').strip()}")
except serial.SerialException as e:
print(f"✗ 串口错误: {e}")
except KeyboardInterrupt:
print("\n用户中断")
finally:
if 'ser' in locals() and ser.is_open:
ser.close()
print("串口已关闭")
if __name__ == "__main__":
main()
```
## 五、STM32 HAL - UART收发(通过USB-TTL连接PC)
```c
// STM32 HAL库通过USB-TTL与PC通信
#include "main.h"
UART_HandleTypeDef huart1;
uint8_t rx_buf[64];
uint8_t tx_buf[64];
// UART1初始化 (PA9=TX, PA10=RX, 接USB-TTL模块)
void MX_USART1_UART_Init(void) {
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
HAL_UART_Init(&huart1);
}
// 发送字符串
void uart_send_string(const char *str) {
HAL_UART_Transmit(&huart1, (uint8_t *)str, strlen(str), HAL_MAX_DELAY);
}
// 中断接收回调
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
if (huart->Instance == USART1) {
// 回显收到的数据
HAL_UART_Transmit(&huart1, rx_buf, 1, HAL_MAX_DELAY);
// 重新启动接收中断
HAL_UART_Receive_IT(&huart1, rx_buf, 1);
}
}
int main(void) {
HAL_Init();
SystemClock_Config();
MX_USART1_UART_Init();
uart_send_string("STM32 UART 通过USB-TTL通信测试\r\n");
// 启动中断接收
HAL_UART_Receive_IT(&huart1, rx_buf, 1);
uint32_t count = 0;
char msg[32];
while (1) {
sprintf(msg, "计数: %lu\r\n", count++);
uart_send_string(msg);
HAL_Delay(1000);
}
}
```
## 六、常见问题排查
| 问题现象 | 可能原因 | 解决方法 |
|----------|----------|----------|
| 串口无法识别 | 未安装CH340驱动 | 安装对应系统驱动 |
| 收到乱码 | 波特率不匹配 | 确认双方波特率一致 |
| 无任何数据 | TX/RX接反或未共地 | 交换TX/RX,检查GND连接 |
| 数据丢包 | 波特率过高或线太长 | 降低波特率,缩短连线 |
| MCU烧录失败 | RTS/DTR时序不对 | 检查自动下载电路,手动进入下载模式 |
暂无参考文献