python脚本实现串口通讯收发,并测试延时时间

该代码用于测试串口通讯的延时,通过发送数据并计算收发之间的时间差。使用Python的serial库,设置特定波特率,发送预设的二进制数据,并在接收到数据后打印发送次数和时间差。在无设备连接时,可短接串口的TX和RX实现自收自发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1:先配置基本的串口参数;
2:发送数据之后就进入接收模式,数据接收成功之后计算收发之间的时间差,并打印发送次数和时间差;
3:再进入发送模式循环发送接收;
4:没有设备端的话,就短接串口的TX和RX,自收自发;

# 测试串口通讯延时
# 发送数据之后就进入接收模式,数据接收成功之后计算收发之间的时间差
# 再进入发送模式循环

import serial
import time

# 测试数据
send_data = bytes([
            0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,
            ])

# 设置串口号和波特率
serial_baud = 115200
ser = serial.Serial('COM110', serial_baud) # 设置串口号和波特率

send_flag = 1   # 发送接收标志
send_cnt = 0    # 发送次数
print("start baud={0} data_len = {1}".format(serial_baud, len(send_data)))
while True:
    if send_flag == 1:
        # 发送数据,避免发的太快加一点延时
        time.sleep(1)
        # print("send_data")
        send_cnt = send_cnt + 1
        # print(f'Sending: {send_data}')
        time_start = time.time() # 记录开始发送时间
        # print("send_time-{0}".format(time_start))
        ser.write(send_data)    
        send_flag = 0
    else:
        if ser.in_waiting > 0: # 如果有数据可读
            # print("reveive_data")
            data = ser.read(len(send_data)) # 读取接收到的数据
            # print(f'Received: {data}') # 打印接收到的数据
            time_end = time.time() # 记录接收时间
            # print("reveive_time-{0}".format(time_end))
            time1 = time_end - time_start    # 计算发送和接收时间差
            print('check {0}, Time: {1:.6f} seconds'.format(send_cnt, time1))
            time.sleep(3)
            send_flag = 1

测试日志

start baud=115200 data_len = 32
check 1, Time: 0.005994 seconds
check 2, Time: 0.002264 seconds
check 3, Time: 0.002105 seconds

可以自行修改发送内容,获取发送多少次之后自动停止等功能

### UART串口通信回环测试方法 #### 测试目的 数据环回实验是一种用于测试和验证数据通信链路的方法,在数据环回测试中,发送的数据经过通信链路后被重新接收,然后进行比较以确保数据传输的正确性[^1]。 #### 实验设置 为了执行UART串口通信的回环测试,通常会将TX(发送端)连接到RX(接收端),形成一个闭合路径。这样可以模拟实际应用中的数据传输过程检测任何可能存在的错误。 #### 软件实现 下面是一个简单的Python脚本例子来展示如何通过pySerial库来进行基本的UART回环测试: ```python import serial import time ser = serial.Serial('COM3', baudrate=9600, timeout=1) test_string = "HelloWorld" print(f"Sending: {test_string}") ser.write(test_string.encode()) time.sleep(0.1) # Wait for the data to be sent and looped back. received_data = ser.read(len(test_string)).decode() if received_data == test_string: print("Loopback Test Passed!") else: print(f"Failed! Received: '{received_data}'") ser.close() ``` 此代码片段展示了怎样打开指定的串口号,配置波特率和其他参数;接着向串口写入一段字符串作为测试消息;等待片刻之后再尝试从中读取相同长度的信息回来做对比分析。 #### 常见问题及其解决方案 - **无法建立连接** 如果程序报告说不能打开特定的串行端口,则可能是由于该设备未正确安装驱动程序或已被其他应用程序占用所致。确认物理连接无误后再检查操作系统层面是否有冲突存在。 - **接收到乱码** 当发现接收到的是不正确的字符时,这往往意味着双方设定的不同步——比如一方设定了奇偶校验而另一方却没有这样做。务必使两端关于停止位数、字节大小以及是否存在奇偶检验等方面达成一致。 - **超时异常** 若遇到长时间未能完成收发操作的情况,应考虑增加延时时间或是调整缓冲区容量。另外也要排查线缆质量是否良好,排除因接触不良引起的间歇性故障可能性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值