安转串口依赖模块
conda环境
conda install pyserial
pip环境
pip3 install pyserial
可能出现的错误:
注意:
解决AttributeError: module ‘serial‘ has no attribute ‘Serial‘ 报错问题
https://blog.csdn.net/qq_46554815/article/details/128853386
python3之后串口都改为pyserial,serial与pyserial区别不大,直接用pyserial就可以了。同时安装了serial与pyserial,导致报错,两者并不能同时安装,这点在pip时应该给予提示。所以如果是这个问题,同时卸载serial与pyserial,然后只安装pyserial。
卸载
pip3 uninstall serial
pip3 install pyserial
卸载完重新选择一个安装即可,建议pyserial
测试
https://www.bbsmax.com/A/gVdn9e2l5W/
是否可以打开串口
import serial#导入串口通信库
ser = serial.Serial()
ser.port='com13'
ser.baudrate=115200
ser.bytesize=8
ser.stopbits=1
ser.parity="N"#奇偶校验位
ser.open()
if(ser.isOpen()):
print("串口打开成功!")
else:
print("串口打开失败!")
ser.close()
发送接收
import serial #导入模块
try:
# 端口号,根据自己实际情况输入,可以在设备管理器查看
port = "COM13"
# 串口波特率,根据自己实际情况输入
bps = 115200
# 超时时间,None:永远等待操作,0为立即返回请求结果,其他值为等待超时时间(单位为秒)
time = 5
# 打开串口,并返回串口对象
uart = serial.Serial(port, bps, timeout = time)
# 串口发送一个字符串
len = uart.write("hello world".encode('utf-8'))
print("send len: ", len)
# 串口接收一个字符串
str = ''
for i in range(len):
str += uart.read().decode("utf-8")
print("receive data: ", str)
# 关闭串口
uart.close()
except Exception as result:
print("******error******:", result)
发送十六进制数据
参考:
https://blog.csdn.net/weixin_39615499/article/details/109926252
数据发送
import serial # 导入模块
def print_hi(name):
# Use a breakpoint in the code line below to debug your script.
print(f'Hi, {name}') # Press Ctrl+F8 to toggle the breakpoint.
# Press the green button in the gutter to run the script.
if __name__ == '__main__':
try:
# 端口号,根据自己实际情况输入,可以在设备管理器查看
port = "COM13"
# 串口波特率,根据自己实际情况输入
bps = 115200
# 超时时间,None:永远等待操作,0为立即返回请求结果,其他值为等待超时时间(单位为秒)
time = 5
# 打开串口,并返回串口对象
uart = serial.Serial(port, bps, timeout=time)
while True:
# 串口发送一个字符串
#len = uart.write("hello world".encode('utf-8'))
#print("send len: ", len)
myinput = bytes([0X01, 0X03, 0X00, 0X00, 0X00, 0X01, 0X84, 0X0A]) # 需要发送的十六进制数据
len =uart.write(myinput) # 用write函数向串口发送数据
print("send len: ", len)
# 关闭串口
uart.close()
except Exception as result:
print("******error******:", result)
stm32 接收
如果使用串口使用 MDA 缓冲区的大小要大于64
static char rx_buffer[128 + 1];