Python实现串口通信(Python+STM32)详解
串口通信是一种简单而有效的串行数据传输方式,通常用于微控制器与计算机之间的通信。STM32系列微控制器广泛应用于嵌入式开发,Python则作为一种高效、易用的编程语言,可以通过适当的库实现与STM32的串口通信。本文将介绍如何使用Python与STM32进行串口通信,并提供代码示例。
1. 硬件准备
在开始之前,我们需要准备一些硬件设备: - 一块STM32开发板 - USB转TTL串口模块(如果开发板没有USB接口) - 一根USB数据线 - 一台安装了Python的计算机
2. STM32的串口配置
在STM32上,我们需要先配置硬件的串口。以STM32F4系列为例,我们可以使用STM32CubeMX进行配置:
- 打开STM32CubeMX,创建新项目,选择你的STM32型号。
- 在Pinout & Configuration中选择USARTx(例如USART2)。
- 配置USART的参数(波特率、数据位、停止位等),波特率一般设置为9600。
- 生成代码并在你的开发环境(如Keil、IAR或STM32CubeIDE)中编译并上传到开发板。
示例代码(在STM32中):
#include "stm32f4xx_hal.h"
UART_HandleTypeDef huart2;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART2_UART_Init(void);
int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART2_UART_Init();
uint8_t message[] = "Hello from STM32\r\n";
while (1) {
HAL_UART_Transmit(&huart2, message, sizeof(message) - 1, HAL_MAX_DELAY);
HAL_Delay(1000);
}
}
void MX_USART2_UART_Init(void) {
huart2.Instance = USART2;
huart2.Init.BaudRate = 9600;
huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart2.Init.StopBits = UART_STOPBITS_1;
huart2.Init.Parity = UART_PARITY_NONE;
huart2.Init.Mode = UART_MODE_TX_RX;
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart2.Init.OverSampling = UART_OVERSAMPLING_16;
HAL_UART_Init(&huart2);
}
3. Python环境准备
在计算机上,我们需要安装pyserial
库来进行串口通信。可以通过以下命令进行安装:
pip install pyserial
4. Python代码实现
下面的代码展示了如何在Python中打开串口并接收来自STM32的数据。
import serial
import time
# 配置串口
ser = serial.Serial('COM3', 9600, timeout=1) # 替换为你的串口号
time.sleep(2) # 等待串口稳定
try:
while True:
if ser.in_waiting > 0: # 判断是否有数据接收
data = ser.readline().decode('utf-8').rstrip() # 读取一行数据并解码
print(f"收到数据: {data}")
except KeyboardInterrupt:
print("程序结束")
finally:
ser.close() # 关闭串口
5. 运行结果
在运行Python代码后,打开开发板的串口通信,Python程序会每秒接收到STM32发送的“Hello from STM32”字符串。当按下Ctrl+C
,可以优雅地结束程序并关闭串口。
总结
通过以上步骤,您可以成功实现Python与STM32之间的串口通信。STM32负责数据的发送,而Python程序则负责接收和处理这些数据。这种方式可以用在各种嵌入式应用中,如传感器数据读取、遥控设备控制等,为开发人员提供了更加灵活的控制方式。