实现Python与STM32通信

  断断续续学了几周Stm32后,突然想实现上位机和下位机的通信,恰好自己学过一点python,便想通过python实现通信.

  在网上看见python库pyserial可以实现此功能,便去官网找了一下 ,附上官网pyserial档链  接:https://pyserial.readthedocs.io/en/latest/pyserial.html#overview

首先在windows的CMD命令管理器中安装pyserial,直接在CMD中键入如下字符

pip install pyserial

再将Stm32用USB连接到电脑,打开设备管理器显示端口为COM14,然后在python中写下

import serial

#连接串口
serial = serial.Serial('COM14',115200,timeout=2)  #连接COM14,波特率位115200
if serial.isOpen():
	print ('串口已打开')
else:
	print ('串口未打开')



#关闭串口
serial.close()

if serial.isOpen():
	print ('串口未关闭')
else:
	print ('串口已关闭')

运行后出现下图,记住在代码要在最后要用 serial.close() 函数去关闭串口,否则下次会打不开串口,会报错.

  之后我们在Stm32的代码中写入如下示例代码,模板来自正点原子的示例代码:

while(1)
	{
		if (USART_RX_STA&0x8000)
		{
			len = USART_RX_STA&0x3FFF;
			for (t=0;t<len;t++)
			{
				USART_SendData(USART1,USART_RX_BUF[t]);
				while (USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
			}
			USART_RX_STA=0;
		}
		else
		{ 
			times++;
			if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
			delay_ms(10);  
		}
	}

该32的代码实现的功能为USART接受数据并返还给发送数据方.

在python编译器中写下数据接收与发送的完整代码:

import serial

#连接串口
serial = serial.Serial('COM14',115200,timeout=2)
if serial.isOpen():
	print ('串口已打开')

	data = b'Beking\r\n'    #发送的数据
	serial.write(data)      #串口写数据
	print ('You Send Data:',data)

	while True:
		data = serial.read(20)    #串口读20位数据
		if data != b'':
			break
	print ('receive data is :',data) 
	
else:
	print ('串口未打开')



#关闭串口
serial.close()

if serial.isOpen():
	print ('串口未关闭')
else:
	print ('串口已关闭')

运行结果为下图,发送的数据为 b'Beking\r\n'  接收数据为 b'Beking'  .( 在正点原子的数据接受数据中要有\r\n字符,否则会接收不到(可以在代码中更改))

如此就可以实现python与Stm32的简单数据接发,要是想实现更为复杂,更为实用的上位机与下位机通信,可以参考文首给出的pyserial文档链接.

若觉文章有助于你,可以在下面留言点赞哦 (<_>)!

若转载本文请注明出处.

猜你喜欢

转载自blog.csdn.net/Beking17113/article/details/83213071