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的响应。

注意事项

  1. 串口号: 在serial.Serial中,port='COM3'需要根据你的实际串口配置进行调整。在Linux和Mac下,串口名可能是/dev/ttyUSB0/dev/ttyACM0
  2. 波特率: 确保Python和STM32的波特率保持一致,否则通信无法正常进行。
  3. 权限: 在Linux下访问串口可能需要权限,通常需要将用户添加到dialout组中。
  4. 数据格式: 确保双方的数据格式匹配,例如字符编码。

总结

通过上述的示例,我们展示了如何在STM32和Python之间实现串口通信。通过这种方式,可以实现对传感器数据的读取、控制指令的发送等多种功能。串口通信是嵌入式系统常用的通信方式之一,掌握它将有助于提高实际项目开发的能力。希望这篇文章能够帮助到你!

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部