树莓派与STM32(RT1064)的串口通信实现

在物联网项目中,树莓派和STM32微控制器经常被用来协同工作。树莓派作为一个功能强大的单板计算机,可以处理复杂的计算和网络任务,而STM32微控制器则可以处理低层次的硬件控制和数据采集。本文将介绍如何实现树莓派与STM32(RT1064)之间的串口通信。

引言

串口通信是一种常见的异步通信方式,它允许设备之间通过串行接口交换数据。在树莓派与STM32的通信中,串口通信可以用于传输传感器数据、控制命令等。本文将详细介绍如何设置和编程树莓派和STM32,以实现它们之间的串口通信。

硬件准备

  1. 树莓派:任何型号均可,本例以树莓派4为例。
  2. STM32(RT1064)开发板:带有USART外设的开发板。
  3. 跳线:用于连接树莓派和STM32开发板。
  4. 电源:为STM32开发板供电。

软件和工具

  1. Raspbian OS:树莓派操作系统。
  2. STM32CubeIDE:STM32开发环境。
  3. 串口助手软件:用于测试和调试。

树莓派端设置

1. 启用串口

树莓派默认情况下禁用了串口,需要在启动配置中启用。

  1. 打开 /boot/config.txt 文件:
    sudo nano /boot/config.txt
    
  2. 添加或取消注释以下行:
    # Enable the serial interface
    enable_uart=1
    
  3. 重启树莓派。

2. 安装Python串口库

使用Python进行串口通信,需要安装 pyserial 库。

sudo pip3 install pyserial

3. 树莓派端代码

import serial
import time

# 配置串口
ser = serial.Serial('/dev/serial0', 115200, timeout=1)

def send_data(data):
    ser.write(data.encode())

def read_data():
    while ser.in_waiting:
        return ser.read(ser.in_waiting).decode()

try:
    while True:
        # 发送数据
        send_data("Hello STM32!")
        print("Sent: Hello STM32!")
        
        # 读取数据
        response = read_data()
        print("Received:", response)
        
        time.sleep(1)  # 等待1秒
except KeyboardInterrupt:
    ser.close()
    print("Serial connection closed.")

STM32端设置

1. 配置USART

使用STM32CubeIDE创建一个新项目,并配置USART外设。

  1. 打开STM32CubeIDE,创建新项目。
  2. 选择STM32(RT1064)开发板。
  3. Pinout & Configuration 工具中,启用USART外设。
  4. 配置波特率为115200。

2. STM32端代码

#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();

  char rx_buffer[100];
  
  while (1)
  {
    // 接收数据
    if (HAL_UART_Receive(&huart1, (uint8_t *)rx_buffer, 100, 1000) == HAL_OK)
    {
      // 发送数据
      HAL_UART_Transmit(&huart1, (uint8_t *)rx_buffer, strlen(rx_buffer), 1000);
    }
  }
}

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;
  if (HAL_UART_Init(&huart1) != HAL_OK)
  {
    Error_Handler();
  }
}

void Error_Handler(void)
{
  // 错误处理代码
  while(1);
}

#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t *file, uint32_t line)
{
  // 用户可以添加错误处理代码
}
#endif

调试与测试

  1. 连接硬件:使用跳线将树莓派的串口(GPIO 14, 15)连接到STM32的USART TX和RX引脚。
  2. 运行代码:在树莓派和STM32上分别运行上述代码。
  3. 检查通信:使用串口助手软件检查数据传输是否正常。

常见问题及解决方法

问题1:无法建立通信

解决方法:

  • 检查硬件连接是否正确。
  • 确保树莓派和STM32的波特率设置一致。
  • 检查STM32的USART配置是否正确。

问题2:数据丢失

解决方法:

  • 增加接收缓冲区的大小。
  • 调整接收超时时间。

问题3:树莓派串口被占用

解决方法:

  • 禁用树莓派的蓝牙功能,释放串口。
  • 使用USB转串口模块。

结论

本文详细介绍了如何实现树莓派与STM32(RT1064)之间的串口通信。通过硬件连接、软件编程和调试测试,可以实现两者之间的数据交换。在实际应用中,开发者可以根据具体需求调整代码和配置,以满足不同的通信需求。

参考文献

  1. STM32参考手册
  2. 树莓派官方文档
  3. PySerial官方文档

请注意,以上代码仅为示例,实际应用中需要根据具体硬件和需求进行调整和优化。

✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进

❤欢迎关注我的知乎:对error视而不见

代码获取、问题探讨及文章转载可私信。

☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。

🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇

点击领取更多详细资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI_Guru人工智能

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值