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