网络知识 娱乐 「调试」使用python与单片机进行通信

「调试」使用python与单片机进行通信

调试说明:

环境:usb转ttl线一根,通信协议一份,STC系列单片机一个,电脑一台。功能:使用python发送16进制数据转换成字节流数据发给单片机,单片机返回16进制数据后转10进制(本次测试是获取单片机的版本号)使用场景:可读取rs232、rs485数据,韦根数据、开关量信号等

代码:

import serialnimport binascii,timenimport codecsnndef comTest(send_Adata,COM,BPS):n try:n # 配置串口基本参数并建立通信n ser = serial.Serial(port=COM,baudrate= BPS,bytesize= 8, timeout=50,stopbits=1)nn print ('发送数据:',send_Adata)nn # 简单的发送16进制字符n # ser.write(b'xFExFExFE')n send_Bdata=bytes.fromhex(send_Adata)nn print ('字节流发送数据:',send_Bdata)nn # 串口发送数据n result=ser.write(send_Bdata)nn # 停止、等待数据n time.sleep(1)n count=ser.inWaiting()nn if count == 0:n print('没有响应传回')n print('等待......')nnn # 数据的接收n if count>0:n data=ser.read(count)n print ('字节流接收数据:',data)n if data!=b'':nn str_hex = str(binascii.b2a_hex(data))[2:-1]n print("接收数据:",str_hex)nn n result_str = codecs.decode(str_hex[12:].encode('utf-8'), "hex").decode('utf-8')n n print ("%s转换成10进制数据:%s"%(str_hex[12:],result_str))nn #ser.flushInput() #清除缓存区数据。nn # 关闭串口n ser.close()n except Exception as e:n print ('运行异常',e)nif __name__ == "__main__":nn send_Adata ='自己的通行协议'nn COM = "COM3"nn BPS = 9600nn comTest(send_Adata,COM,BPS)nn


执行:


使用python测试结果:



使用串口工具测试结果: