使用python来调试串口
2016-06-15 15:10
453 查看
转自 : http://www.cnblogs.com/pied/p/4175641.html
串口模块的波特率比较特别,找了几个串口工具都不支持。。。所以,干脆用python自己来写了,其实已经好奇好久了,别人的工具各种不顺手。
需要pyserial的支持,兼容各种平台,不需要新编译二进制文件。
先贴一个定时发送的代码:
然后是一些其它的方法:
1. 使用序号打开串口:ser = serial.Serial(0) 。but,怎么确定串口的序号???
2. 查看串口的名称,啊哈,用1的方法打开串口后,你可以产看串口的名字:print ser.portstr
3. 先例化一个实体,再打开:
4. 读取数据的集中方式
>>> ser = serial.Serial('/dev/ttyS1', 19200, timeout=1)
>>> x = ser.read() # read one byte
>>> s = ser.read(10) # read up to ten bytes (timeout)
>>> line = ser.readline() # read a '/n' terminated line
>>> ser.close()
其中,如果只是串口调试,直接ser.read(1000),这样会把读到的值直接打印到屏幕上。
5.所有参数
6. exception:serial.SerialException
另一个完整收发的例子,单片机数据以TLV(Type,Length,Value)格式发上来
串口模块的波特率比较特别,找了几个串口工具都不支持。。。所以,干脆用python自己来写了,其实已经好奇好久了,别人的工具各种不顺手。
需要pyserial的支持,兼容各种平台,不需要新编译二进制文件。
先贴一个定时发送的代码:
import serial import time ser = serial.Serial('/dev/ttyUSB0', 250000, timeout=1) print ser.isOpen() words="gggggggggggggggg" while (1): print "send 256x\""+words+"\" to remotes" startTime = time.time() times = 256 while (times): times -= 1 s = ser.write(words) endTime = time.time() print "use time: "+str(endTime-startTime) print "" time.sleep(5) ser.close()
然后是一些其它的方法:
1. 使用序号打开串口:ser = serial.Serial(0) 。but,怎么确定串口的序号???
2. 查看串口的名称,啊哈,用1的方法打开串口后,你可以产看串口的名字:print ser.portstr
3. 先例化一个实体,再打开:
>>> ser = serial.Serial() >>> ser.baudrate = 19200 >>> ser.port = 0 >>> ser Serial<id=0xa81c10, open=False>(port='COM1', baudrate=19200, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=0, rtscts=0) >>> ser.open() >>> ser.isOpen() True >>> ser.close() >>> ser.isOpen() False
4. 读取数据的集中方式
>>> ser = serial.Serial('/dev/ttyS1', 19200, timeout=1)
>>> x = ser.read() # read one byte
>>> s = ser.read(10) # read up to ten bytes (timeout)
>>> line = ser.readline() # read a '/n' terminated line
>>> ser.close()
其中,如果只是串口调试,直接ser.read(1000),这样会把读到的值直接打印到屏幕上。
5.所有参数
ser = serial.Serial( port=None, # number of device, numbering starts at # zero. if everything fails, the user # can specify a device string, note # that this isn't portable anymore # if no port is specified an unconfigured # an closed serial port object is created baudrate=9600, # baud rate bytesize=EIGHTBITS, # number of databits parity=PARITY_NONE, # enable parity checking stopbits=STOPBITS_ONE, # number of stopbits timeout=None, # set a timeout value, None for waiting forever xonxoff=0, # enable software flow control rtscts=0, # enable RTS/CTS flow control interCharTimeout=None # Inter-character timeout, None to disable )
6. exception:serial.SerialException
另一个完整收发的例子,单片机数据以TLV(Type,Length,Value)格式发上来
#!/usr/bin/env python # it's a program of luo, piedgogo@sina.com import serial import array import os import signal from time import sleep flag_stop = False def onsignal_int(a,b): print "sigint!" global flag_stop flag_stop = True signal.signal(signal.SIGINT, onsignal_int) signal.signal(signal.SIGTERM, onsignal_int) ser = serial.Serial('/dev/ttyUSB0', 9600, timeout = 0.001) print "serial.isOpen() =",ser.isOpen() cmd_send = "7b02000129cc00c80378290400640000cc7d0d0a" cmd_send = cmd_send.decode("hex") stop = "7b04047d0d0a" stop = stop.decode("hex") cmd_back = "" cmd_length = 0x00 cmd_count = 0x00 s = ser.write(cmd_send) while True: sleep(0.1) if flag_stop: # read data until Ctrl+c ser.write(stop) # send cmd stop before exit print "reset cmd has been sent!" sleep(0.05) break text = ser.read(1) # read one, with timout if text: # check if not timeout n = ser.inWaiting() # look if there is more to read if n: text = text + ser.read(n) #get it cmd_back = cmd_back + text text = "" if len(cmd_back) < 2: # go back if no enough data recvd continue if cmd_length == 0x00: # at the begin of new cmd cmd_length = ord(cmd_back[1]) # Type(1 byte),Length of Value(1 byte),Value print "new cmd length,",cmd_length if (cmd_length + 0x02) > len(cmd_back): # go back befor this cmd end continue # so far, we have got a full cmd hex_list = [hex(ord(i)) for i in cmd_back] # more readable than data.encode("hex") print "In buffer:",hex_list cmd_back = cmd_back[cmd_length+2:] # remove this cmd(TLV) from buffer cmd_length = 0 cmd_count += 1 print "==> %d cmds recvd."%(cmd_count) print "-------------" ser.close()
相关文章推荐
- python中的 descriptor
- Python os模块常用方法
- python小知识
- Windows Python2.7环境 安装paramiko模块
- 利用python进行数据分析-数据加载、存储与文件格式2
- python开发总结
- 用Python根据两点经纬度计算距离
- Python 跳过第一行读取文件内容。
- Python:文件的读取、创建、追加、删除、清空
- python写脚本并用java调用python(三)
- Pythona在Win7下安装,配置,连接数据库
- 205. Isomorphic Strings [easy] (Python)
- ubuntu 安装 PIL(Python图像库)
- 四.python数据类型,语句
- CART决策树算法总结
- 88. Merge Sorted Array [easy] (Python)
- python多线程ssh爆破
- Python built-in 函数
- python中关于with及contextlib的用法
- python-24点智取游戏