qq_39940091
qq_39940091
2019-04-11 20:10

windows端使用python3的serial库连接stm32的串口进行数据传输,出现问题,求大神解答

  • python
  • c语言

单片机部分代码:

while(1)
    {
        if(USART_RX_STA&0x8000)
        {                      
            len=USART_RX_STA&0x3fff;//得到此次接收数据的长度
            printf("\r\n您发送的数据为:\r\n\r\n");
            for(t=0;t<len;t++)
            {
                USART_SendData(USART1, USART_RX_BUF[t]);//向串口发送数据
                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
            }
            printf("\r\n\r\n");//插入换行
            USART_RX_STA=0;
        }else
        {
            times++;
            if(times%5000==0)
            {
                printf("\r\n串口实验\r\n");
                printf("@ALIENTEK\r\n\r\n");
            }
            if(times%200==0)printf("输入数据回车结束\n");  
            if(times%30==0)LED0=!LED0;//LED闪烁,程序正在运行
            delay_ms(10);   
        }
    }    

python3上代码

import serial
ser = serial.Serial()
ser.baudrate = 115200 #设置波特率
ser.port = 'COM3' #端口是COM3
ser.bytesize =8
ser.stopbits = 1    #配置停止位
ser.timeout=1
ser.parity=serial.PARITY_NONE    #配置奇偶校验位

while True:
    ser.open()
    print(ser)
    data=input()
    data = data.encode('utf-8')
    ser.write(data)
    ser.close()

输出结果:

Serial<id=0x2395c0f3a20, open=True>(port='COM3', baudrate=115200, bytesize=8, parity='N', stopbits=1, timeout=1, xonxoff=False, rtscts=False, dsrdtr=False)
49
Serial<id=0x2395c0f3a20, open=True>(port='COM3', baudrate=115200, bytesize=8, parity='N', stopbits=1, timeout=1, xonxoff=False, rtscts=False, dsrdtr=False)
1
Serial<id=0x2395c0f3a20, open=True>(port='COM3', baudrate=115200, bytesize=8, parity='N', stopbits=1, timeout=1, xonxoff=False, rtscts=False, dsrdtr=False)

我用IDLE逐行调试的时候;

>>> import serial
>>> ser=serial.Serial('COM3',115200)
>>> 

灯就不亮了

>>> ser.open()
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    ser.open()
  File "E:\c\python\lib\site-packages\serial\serialwin32.py", line 41, in open
    raise SerialException("Port is already open.")
serial.serialutil.SerialException: Port is already open.
>>> print(ser)
Serial<id=0x284a7a80c88, open=True>(port='COM3', baudrate=115200, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)
>>> 

单片机的程序是板子带的程序,python3代码执行后LED就灭了,数据也传不进去。但串口好像是通了,找了好多代码都不知道怎么解决,现在头都大了,求大佬帮忙。

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

0条回答