当前位置: 首页 > news >正文

基于树莓派4B与STM32的UART串口通信实验(代码开源)

在现代嵌入式系统中,树莓派和STM32的结合使用已成为一种流行趋势,它们各自承担不同的角色,实现优势互补。树莓派以其强大的计算能力处理复杂算法,而STM32则以其高效的控制能力执行实际的硬件操作。本文将详细介绍如何实现基于树莓派4B和STM32的UART串口通信,并展示如何通过串口发送数据以及在STM32上接收和处理这些数据。

一、系统概述

本项目的核心是实现树莓派4B与STM32之间的UART通信。树莓派4B将作为上位机,负责运行复杂的图像处理算法,如基于YOLOv5-Lite的目标检测,并将检测结果发送至STM32。STM32作为下位机,负责解析接收到的数据,并根据这些数据执行相应的控制任务。

二、硬件连接

首先,需要将树莓派4B和STM32通过UART接口连接。树莓派4B的GPIO14(TXD)连接到STM32的PA9(TX),GPIO15(RXD)连接到STM32的PA10(RX)。确保正确连接后,可以开始软件配置。

三、树莓派4B配置

3.1 安装Serial

在树莓派4B上,首先需要安装Python的pyserial库,用于串口通信。

pip install pyserial
3.2 配置UART

树莓派4B的UART配置可以通过修改/boot/config.txt文件来实现。

sudo nano /boot/config.txt

在文件末尾添加以下行以启用UART。

enable-uart=1
3.3 编写Python发送代码

编写Python脚本,用于周期性地发送数据到STM32。

import serial
import timeser = serial.Serial('/dev/ttyAMA0', 115200, timeout=1)while True:# 假设发送的数据是当前时间的秒数current_time = str(int(time.time()))ser.write(current_time.encode())time.sleep(1)

四、STM32配置

4.1 CubeMX配置

使用STM32CubeMX配置串口参数,设置波特率与树莓派4B相匹配(115200),并启用中断。

4.2 编写STM32代码

在STM32上,编写代码以初始化串口并处理接收到的数据。

#include "stm32f1xx_hal.h"
#include <stdio.h>UART_HandleTypeDef huart1;// 用于接收数据的缓冲区
uint8_t rxBuffer[100];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();// 循环处理接收到的数据while (1) {// 检查是否有数据接收完毕if (HAL_UART_Receive_IT(&huart1, rxBuffer, sizeof(rxBuffer)) == HAL_OK) {// 处理接收到的数据for (int i = 0; i < sizeof(rxBuffer); i++) {printf("%c", rxBuffer[i]);}}}
}void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {if (huart->Instance == USART1) {// 数据接收完毕,处理数据printf("Data received: ");for (int i = 0; i < huart->RxXferSize; i++) {printf("%c", rxBuffer[i]);}printf("\n");// 重新启动接收中断HAL_UART_Receive_IT(&huart1, rxBuffer, sizeof(rxBuffer));}
}// ...省略其他函数实现...

五、高级应用

在实际应用中,可以将树莓派4B的目标检测结果发送给STM32,例如,发送检测到的物体中心坐标,STM32根据这些坐标执行相应的控制逻辑。

六、总结

本文详细介绍了基于树莓派4B和STM32的UART串口通信实验。通过树莓派4B发送数据,STM32接收并处理这些数据,展示了两者如何协同工作。这种架构在智能硬件领域非常常见,适用于多种应用场景,如智能小车、无人机等。

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

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

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

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

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

点击领取更多详细资料

http://www.lryc.cn/news/420312.html

相关文章:

  • 【云服务器系列】基于华为云OBS实现Picgo和Typora的完美融合
  • IIC协议
  • 如何在linux系统上部署nginx
  • 香港网站服务器抵御恶意攻击的一些措施
  • 实战:docker部署filesite.io完美解决家庭相册需求-2024.8.10(测试成功)
  • 美团到店面经
  • 【CSS入门】第五课 - font字体
  • STM32-门电路-储存器-寄存器-STM32f1-MCU-GPIO-总线-keil5-点led-寄存器编程
  • 【动态规划算法题记录】343. 整数拆分 | 96.不同的二叉搜索树
  • 网页上预览Excel文件
  • Unity射击游戏开发教程:(31)制造一定追踪行为的敌人
  • springboot mybatis plus 固定查询条件及可选查询条件的组合查询,使用QueryWrapper.and()来解决。
  • 使用ollama取代openai的api进行graphRAG失败记录
  • MyBatis 配置与测试方式
  • C#实现代理服务器
  • react的路由实战使用
  • python 字典转成类 构建类
  • springboot 过滤器
  • 【C语言篇】深入理解指针1
  • IAP程序升级 与 电脑BIOS 的关系
  • Java使用MQTT协议
  • 等级+时间的优先级算法
  • 物流仓库安全视频智能管理方案:构建全方位、高效能的防护体系
  • jackson反序列化漏洞
  • Java | Leetcode Java题解之第328题奇偶链表
  • 100 Exercises To Learn Rust 挑战!准备篇
  • 瑞_RabbitMQ_初识MQ
  • 系统内存管理:虚拟内存、内存分段与分页、页表缓存TLB以及Linux内存管理
  • Java每日一练_模拟面试题5(堆和栈的区别)
  • 传感器校正和测试