qq_39940091 2019-04-11 20:10 采纳率: 0%
浏览 637

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

单片机部分代码:

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就灭了,数据也传不进去。但串口好像是通了,找了好多代码都不知道怎么解决,现在头都大了,求大佬帮忙。

  • 写回答

1条回答

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-09 17:37
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘