2. 串口参数配置与连接测试
任务说明
本案例实现串口参数的配置(波特率、数据位、停止位、校验位)与连接测试。通过用户输入端口号和参数,程序尝试打开串口并返回连接状态,若失败则给出明确错误原因。
实现方案
使用 pyserial 库完成串口操作。核心逻辑分为三步:
- 定义参数配置函数,将用户输入映射为
serial.Serial可识别的参数格式; - 尝试打开串口并设置超时,若成功则立即关闭(仅测试连接);
- 捕获常见异常(端口不存在、被占用、参数错误等),输出对应的错误提示。
代码实现
import serial
import serial.tools.list_ports
def list_available_ports():
"""列出当前可用串口"""
ports = serial.tools.list_ports.comports()
return [port.device for port in ports]
def configure_and_test(port, baudrate, bytesize, parity, stopbits, timeout=1):
"""
配置串口参数并测试连接
返回: (成功标志, 消息)
"""
# 参数映射
bytesize_map = {
5: serial.FIVEBITS,
6: serial.SIXBITS,
7: serial.SEVENBITS,
8: serial.EIGHTBITS
}
parity_map = {
'N': serial.PARITY_NONE,
'E': serial.PARITY_EVEN,
'O': serial.PARITY_ODD
}
stopbits_map = {
1: serial.STOPBITS_ONE,
1.5: serial.STOPBITS_ONE_POINT_FIVE,
2: serial.STOPBITS_TWO
}
# 参数合法性检查
if bytesize not in bytesize_map:
return False, f"不支持的数据位: {bytesize},可选 5/6/7/8"
if parity.upper() not in parity_map:
return False, f"不支持的校验位: {parity},可选 N/E/O"
if stopbits not in stopbits_map:
return False, f"不支持的停止位: {stopbits},可选 1/1.5/2"
try:
ser = serial.Serial(
port=port,
baudrate=baudrate,
bytesize=bytesize_map[bytesize],
parity=parity_map[parity.upper()],
stopbits=stopbits_map[stopbits],
timeout=timeout
)
# 连接成功,立即关闭
ser.close()
return True, f"连接成功: {port} @ {baudrate}bps, {bytesize}{parity}{stopbits}"
except serial.SerialException as e:
return False, f"连接失败: {e}"
if __name__ == "__main__":
# 显示可用端口
ports = list_available_ports()
if not ports:
print("未检测到可用串口")
exit(1)
print("可用串口:", ", ".join(ports))
# 用户输入参数
port = input("请输入端口号 (如 COM3 或 /dev/ttyUSB0): ").strip()
baudrate = int(input("请输入波特率 (如 9600/115200): ").strip())
bytesize = int(input("请输入数据位 (5/6/7/8): ").strip())
parity = input("请输入校验位 (N=无/E=偶/O=奇): ").strip().upper()
stopbits = float(input("请输入停止位 (1/1.5/2): ").strip())
# 执行连接测试
success, msg = configure_and_test(port, baudrate, bytesize, parity, stopbits)
print(msg)
if success:
print("测试通过")
else:
print("测试未通过")
运行与验证
依赖安装:
pip install pyserial
运行方式:
python serial_config_test.py
验证方法:
- 程序启动后列出当前系统识别的所有串口设备;
- 输入一个存在的端口号(如 COM3)和常用参数(115200, 8, N, 1);
- 预期输出:
连接成功: COM3 @ 115200bps, 8N1且显示“测试通过”; - 输入一个不存在的端口(如 COM99),预期输出包含“连接失败”和具体错误原因;
- 输入非法参数(如数据位 9),预期输出提示“不支持的数据位: 9”。
判定标准:程序能正确区分“连接成功”与各类失败原因,且错误信息准确对应实际异常类型,即视为通过。