基于STM32H743的USART通信详解
STM32H743是一款高性能MCU,广泛应用于物联网、工业控制和嵌入式系统等领域。本文将以STM32H743为例,介绍USART通信的基本配置与实现方法,并提供完整的代码示例。USART通信简介USART(通用同步异步收发器)是STM32的常用外设之一,支持串口通信功能,可以实现设备间的可靠数据传输。USART既支持同步通信,也支持异步通信,本文主要介绍异步通信。
在异步模式下,USART需要配置以下参数:
[*]波特率(Baud Rate):通信速度,通常为9600、115200等。
[*]数据位(Data Bits):每次发送的数据位数,常用8位。
[*]停止位(Stop Bits):标识数据包结束,常用1位。
[*]校验位(Parity):数据校验,可选奇校验、偶校验或无校验。
配置步骤
[*]初始化GPIO:配置USART的TX和RX引脚为复用功能。
[*]配置USART外设:设置波特率、数据位、停止位等参数。
[*]实现发送和接收功能:通过轮询、中断或DMA方式进行数据通信。
下面以USART3为例,通信波特率为115200,使用HAL库实现一个简单的串口通信功能。
实现代码#include "main.h"
UART_HandleTypeDef huart3;
/* 初始化USART3 */
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();
}
}
/* 初始化GPIO */
void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* GPIO时钟使能 */
__HAL_RCC_GPIOB_CLK_ENABLE();
/* 配置USART3 TX(PB10)和RX(PB11)引脚 */
GPIO_InitStruct.Pin = GPIO_PIN_10 | GPIO_PIN_11;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
/* 主函数 */
int main(void)
{
uint8_t data[] = "Hello, USART3!\r\n";
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART3_UART_Init();
while (1)
{
// 发送数据
HAL_UART_Transmit(&huart3, data, sizeof(data) - 1, HAL_MAX_DELAY);
// 接收数据
uint8_t recvData = {0};
if (HAL_UART_Receive(&huart3, recvData, 100, 1000) == HAL_OK)
{
// 回显接收到的数据
HAL_UART_Transmit(&huart3, recvData, strlen((const char*)recvData), HAL_MAX_DELAY);
}
HAL_Delay(1000);// 延时1秒
}
}
代码解析
[*]USART初始化:通过MX_USART3_UART_Init配置USART3的参数,包括波特率、数据位、停止位等。
[*]GPIO复用配置:PB10配置为USART3的TX引脚,PB11为RX引脚。
[*]发送数据:HAL_UART_Transmit函数用于发送字符串。
[*]接收数据:HAL_UART_Receive函数实现接收功能,此处设置超时时间为1秒。
[*]回显数据:接收到数据后通过串口回显,方便调试。
测试与验证通过USB转TTL模块连接到PC,使用串口调试助手,可以观察到每秒发送的字符串“Hello, USART3!”。如果发送数据到串口,也可以在终端看到回显结果。
总结本文详细介绍了基于STM32H743的USART通信配置及实现方法,并通过代码演示了发送和接收数据的基本操作。USART作为嵌入式开发中常用的通信方式,灵活性高、配置简单,是开发者的得力工具。
终于找到USART的教程了,代码讲得很清楚,收藏! 有没有用LL库实现USART的教程?听说效率更高。 USART能不能同时支持多个波特率通信? 刚好在学STM32H7系列,这篇文章太及时了! 能不能加个DMA的实现版本?数据量大的时候好像更方便。 USART收发的时候会不会出现数据丢失的问题? STM32的USART比单片机强多了,感谢分享! 如果波特率设置不对,是不是通信就完全失败了? 串口调试助手用哪个比较好?推荐一个呗。 我用的lcom 学习一下,提升技能,新年快乐 学习一下,提升技能,新年快乐
页:
[1]