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[100] = {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作为嵌入式开发中常用的通信方式,灵活性高、配置简单,是开发者的得力工具。
|