python uart串口通信

安转串口依赖模块

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()

python uart串口通信_第1张图片

发送接收

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)

python uart串口通信_第2张图片

发送十六进制数据

参考:
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];

你可能感兴趣的:(python,python,开发语言)