打印
[STM32H7]

基于STM32H743的USART通信详解与实现

[复制链接]
65|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Wordsworth|  楼主 | 2025-1-16 09:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STMicroelectronics的STM32H7系列凭借其强大的性能和丰富的外设广泛应用于嵌入式系统开发中。STM32H743是该系列中的高性能微控制器,支持高速的USART通信,非常适合用于数据采集、设备互联等场景。本文将通过代码实例,详细讲解如何基于STM32H743实现USART通信。
1. STM32H743简介STM32H743是基于ARM Cortex-M7内核的高性能微控制器,主频高达480MHz,支持双精度FPU和L1缓存,其特点包括:
  • 最大2MB的闪存和1MB的SRAM
  • 支持多达8个USART模块
  • 支持最高16 Mbps的高速通信
2. USART通信基础USART(通用同步异步接收器)是一种用于串行通信的硬件模块,可在主机与外设之间实现高效的数据交换。USART支持异步通信模式,常用于设备间的数据交互。
3. STM32H743 USART配置与实现通过STM32CubeMX和HAL库,我们可以快速完成USART的配置与代码实现。以下为具体代码示例。
代码实现
#include "main.h"
#include <string.h>

// 定义USART句柄
UART_HandleTypeDef huart3;

// USART初始化函数
void MX_USART3_UART_Init(void)
{
    huart3.Instance = USART3;
    huart3.Init.BaudRate = 115200;  // 波特率
    huart3.Init.WordLength = UART_WORDLENGTH_8B;  // 数据位
    huart3.Init.StopBits = UART_STOPBITS_1;  // 停止位
    huart3.Init.Parity = UART_PARITY_NONE;  // 校验位
    huart3.Init.Mode = UART_MODE_TX_RX;  // 发送和接收模式
    huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;  // 无硬件流控
    huart3.Init.OverSampling = UART_OVERSAMPLING_16;  // 过采样
    if (HAL_UART_Init(&huart3) != HAL_OK)
    {
        Error_Handler();
    }
}

// 发送字符串数据
void UART_SendString(const char* str)
{
    HAL_UART_Transmit(&huart3, (uint8_t*)str, strlen(str), HAL_MAX_DELAY);
}

// 接收字符串数据
void UART_ReceiveString(char* buffer, uint16_t buffer_size)
{
    HAL_UART_Receive(&huart3, (uint8_t*)buffer, buffer_size, HAL_MAX_DELAY);
}

// 主函数
int main(void)
{
    HAL_Init();
    SystemClock_Config();
    MX_USART3_UART_Init();

    char rx_buffer[100];  // 接收缓冲区

    UART_SendString("USART Communication Initialized!\r\n");

    while (1)
    {
        memset(rx_buffer, 0, sizeof(rx_buffer));  // 清空缓冲区

        // 接收数据并回显
        UART_ReceiveString(rx_buffer, sizeof(rx_buffer));
        UART_SendString("Received: ");
        UART_SendString(rx_buffer);
        UART_SendString("\r\n");
    }
}
代码说明
  • USART初始化:通过MX_USART3_UART_Init函数,配置USART3模块的波特率、数据位、停止位等参数。
  • 数据发送:使用HAL_UART_Transmit发送字符串数据。
  • 数据接收:通过HAL_UART_Receive接收外设发送的数据。
  • 数据回显:将接收到的数据通过USART发送回主机,用于验证通信效果。
4. 测试与优化测试时,可使用串口调试助手或终端工具(如Tera Term)与开发板进行交互,验证数据收发的正确性。进一步优化可以:
  • 使用中断模式接收数据,提高实时性
  • 配合DMA减少CPU占用率
  • 增加错误检测机制,确保通信可靠性
5. 总结本文通过详细的代码实例,介绍了如何基于STM32H743实现基本的USART通信功能。USART作为嵌入式系统中重要的通信接口,与STM32H743强大的性能结合,为复杂系统开发提供了灵活可靠的解决方案。

使用特权

评论回复
沙发
公羊子丹| | 2025-1-16 09:53 | 只看该作者
STM32H743的性能确实强,USART通信用着感觉很流畅!

使用特权

评论回复
板凳
周半梅| | 2025-1-16 09:53 | 只看该作者
这个例子太实用了,刚好我想用USART收发传感器数据。

使用特权

评论回复
地板
帛灿灿| | 2025-1-16 09:53 | 只看该作者
楼主能不能分享一下如何用DMA优化USART收发的代码

使用特权

评论回复
5
童雨竹| | 2025-1-16 09:54 | 只看该作者
有没有更高波特率的配置例子,比如921600?想试试高性能。

使用特权

评论回复
6
万图| | 2025-1-16 09:54 | 只看该作者
H7系列真的很强,用来做工业控制简直太合适了!

使用特权

评论回复
7
Bblythe| | 2025-1-16 09:54 | 只看该作者
最近用USART和ESP32通信,感觉这代码很合适,改改就能用了。

使用特权

评论回复
8
Pulitzer| | 2025-1-16 09:54 | 只看该作者
STM32CubeMX配置USART确实方便,不过调试起来有点细节要注意。

使用特权

评论回复
9
Uriah| | 2025-1-16 09:54 | 只看该作者
楼主有没有试过用USART的硬件流控?用RTS/CTS效果怎么样?

使用特权

评论回复
10
Clyde011| | 2025-1-16 09:55 | 只看该作者
建议加入一些错误检测的例子,比如帧错误和超时处理。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

3762

帖子

1

粉丝