欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > 树莓派与STM32(RT1064)的串口通信实现

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

2024/10/25 1:25:27 来源:https://blog.csdn.net/weixin_66608063/article/details/141508023  浏览:    关键词:树莓派与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视而不见

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

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

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

点击领取更多详细资料

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com