基于树莓派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 time

ser = 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视而不见

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

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

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

点击领取更多详细资料

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
STM32串口通信实验是基于STM32F103C8T6芯片进行的。该实验使用嵌入式软件开发,利用UART串口通信实现上位机与下位机之间的信息交互。具体实验功能是通过串口输入数字1、2或3,下位机将会输出相应的内容。这个实验可以帮助学习UART串口通信的原理和程序源码。 串口通信是一种通过数据信号线、地线和控制线等按位传输数据的通讯方式,包括SPI通信、USART通信、EEPROM通信等。在本实验中,我们使用的是USART通信。USART是一种全双工通信方式,同时支持发送和接收数据。 在进行STM32串口通信实验时,需要按照以下步骤进行设置: 1. 使能串口时钟和GPIO时钟 2. 复位串口 3. 设置GPIO端口模式 4. 初始化串口参数,包括波特率、数据位、停止位和校验位等 5. 开启中断并初始化NVIC中断 6. 使能串口 7. 编写中断处理函数,用于接收和发送数据 通过完成以上步骤,就可以进行STM32串口通信实验,并实现上位机与下位机之间的数据传输和交互。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [STM32F103标准库开发-Uart串口通信实验](https://download.csdn.net/download/MQ0522/85391400)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [STM32之USART-串口通信(含串口实验详细解析)](https://blog.csdn.net/AriesPIG/article/details/119840979)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

嵌入式杂谈

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

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

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

打赏作者

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

抵扣说明:

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

余额充值