Python实现串口通信 (Python + STM32)
串口通信是一种常见的数据传输方式,广泛应用于嵌入式系统与计算机之间的数据交互。在这篇文章中,我们将探讨如何使用Python与STM32进行串口通信。我们将通过一个简单的示例来演示如何在Python中实现这一过程。
环境准备
在开始之前,确保你已经配置了环境,包括STM32开发板和Python环境。我们将使用pySerial
库来实现串口通信,首先需要安装它。可以使用以下命令安装:
pip install pyserial
STM32代码示例
在STM32侧,我们可以使用HAL库来设置串口通信。下面是一个简单的STM32代码示例,用于初始化USART并接收数据。
#include "stm32f1xx_hal.h"
UART_HandleTypeDef huart1;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);
int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART1_UART_Init();
// 接收缓冲区
uint8_t rxBuffer[10];
while (1) {
// 接收数据
HAL_UART_Receive(&huart1, rxBuffer, 10, HAL_MAX_DELAY);
// 将接收到的数据再发送过去
HAL_UART_Transmit(&huart1, rxBuffer, 10, HAL_MAX_DELAY);
}
}
// USART初始化函数
static void MX_USART1_UART_Init(void) {
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
HAL_UART_Init(&huart1);
}
在这个例子中,STM32通过USART1接收数据,并将接收到的数据再发送回去。这是一个基本的回显程序,适合用来测试串口通信是否正常。
Python代码示例
接下来我们将编写Python代码,通过串口与STM32进行通信。下面是一个简单的Python代码示例,它将连接到STM32并发送数据。
import serial
import time
# 串口配置
ser = serial.Serial(
port='COM3', # 根据实际情况修改为你的串口号
baudrate=115200,
timeout=1
)
def main():
while True:
# 发送数据
data_to_send = "Hello STM32\n"
ser.write(data_to_send.encode('utf-8'))
print(f"Sent: {data_to_send.strip()}")
# 等待接收回应
time.sleep(1)
if ser.in_waiting > 0:
response = ser.read(ser.in_waiting).decode('utf-8')
print(f"Received: {response.strip()}")
if __name__ == "__main__":
main()
在这个Python代码中,我们首先实例化了一个serial.Serial
对象,指定了串口号和波特率。之后,我们进入一个循环,定期向STM32发送一条消息,并检查是否有来自STM32的响应。
注意事项
- 串口号: 在
serial.Serial
中,port='COM3'
需要根据你的实际串口配置进行调整。在Linux和Mac下,串口名可能是/dev/ttyUSB0
或/dev/ttyACM0
。 - 波特率: 确保Python和STM32的波特率保持一致,否则通信无法正常进行。
- 权限: 在Linux下访问串口可能需要权限,通常需要将用户添加到
dialout
组中。 - 数据格式: 确保双方的数据格式匹配,例如字符编码。
总结
通过上述的示例,我们展示了如何在STM32和Python之间实现串口通信。通过这种方式,可以实现对传感器数据的读取、控制指令的发送等多种功能。串口通信是嵌入式系统常用的通信方式之一,掌握它将有助于提高实际项目开发的能力。希望这篇文章能够帮助到你!