STM32F103C8T6是一款基于ARM Cortex-M3内核的高性价比微控制器,广泛应用于嵌入式开发中。在本教程中,我们将以STM32F103C8T6为例,讲解如何实现UART串口通信功能,涵盖硬件配置、代码编写以及调试过程。
什么是UART通信?UART(Universal Asynchronous Receiver/Transmitter)是一种异步通信协议,广泛用于嵌入式系统与外部设备之间的数据传输。UART通信的核心是通过TX(发送)和RX(接收)两条信号线实现数据交换。STM32F103C8T6支持多个UART接口,可以轻松与PC、传感器或其他MCU进行通信。
工程准备在开始之前,你需要准备以下材料:
- STM32F103C8T6开发板(常见型号如蓝色小板)
- USB转TTL模块(用于与PC通信)
- 串口调试工具(如SecureCRT、Tera Term或串口助手)
- STM32CubeIDE或Keil开发环境
- 杜邦线(连接开发板与TTL模块)
实现步骤- 硬件连接
- STM32F103的PA9连接到USB转TTL模块的RXD。
- STM32F103的PA10连接到USB转TTL模块的TXD。
- GND连接到共同地线。
- 配置UART外设
- 使用STM32CubeMX配置UART2为通信模式。
- 设置波特率为9600,数据位为8位,无校验位,1个停止位。
- 编写代码
- 在主程序中初始化UART并实现数据发送与接收功能。
- 调试运行
代码实现以下是完整代码示例:
#include "main.h"
#include <string.h>
// 串口发送字符串函数
void UART_SendString(UART_HandleTypeDef *huart, const char *str) {
HAL_UART_Transmit(huart, (uint8_t *)str, strlen(str), HAL_MAX_DELAY);
}
// 主程序
int main(void) {
HAL_Init(); // 初始化HAL库
SystemClock_Config(); // 配置系统时钟
MX_GPIO_Init(); // 初始化GPIO
MX_USART2_UART_Init(); // 初始化UART2
char rx_buffer[50]; // 接收缓冲区
char tx_message[] = "Hello from STM32!\r\n"; // 发送消息
UART_SendString(&huart2, tx_message); // 向串口发送欢迎消息
while (1) {
// 接收数据
HAL_UART_Receive(&huart2, (uint8_t *)rx_buffer, sizeof(rx_buffer) - 1, HAL_MAX_DELAY);
// 回显数据
UART_SendString(&huart2, "You sent: ");
UART_SendString(&huart2, rx_buffer);
UART_SendString(&huart2, "\r\n");
}
}
// UART2初始化函数(由STM32CubeMX生成)
void MX_USART2_UART_Init(void) {
huart2.Instance = USART2;
huart2.Init.BaudRate = 9600; // 波特率
huart2.Init.WordLength = UART_WORDLENGTH_8B; // 数据位长度
huart2.Init.StopBits = UART_STOPBITS_1; // 停止位
huart2.Init.Parity = UART_PARITY_NONE; // 无校验位
huart2.Init.Mode = UART_MODE_TX_RX; // 启用发送和接收
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; // 无硬件流控
huart2.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart2) != HAL_OK) {
Error_Handler();
}
}
代码解析- UART初始化使用STM32CubeMX生成的初始化代码,设置串口通信参数,包括波特率、数据格式等。
- 串口发送使用HAL_UART_Transmit发送字符串数据到PC。
- 串口接收使用HAL_UART_Receive接收PC发送的数据,并存储到缓冲区。
- 回显功能将接收到的数据通过串口回显到PC,便于调试。
注意事项- 波特率一致开发板和PC的波特率需一致,通常为9600。
- 调试工具设置在PC端的串口调试工具中,关闭硬件流控(Flow Control),否则可能导致通信失败。
- 硬件连接确保TX与RX正确连接,反接会导致通信中断。
- 数据长度限制缓冲区大小需要根据实际应用调整,以避免数据溢出。
总结通过以上代码示例,STM32F103C8T6可以轻松实现UART串口通信功能。无论是调试信息输出还是与外部设备通信,UART都是一个非常高效的工具。希望本文能帮助你在实际项目中更好地使用STM32的串口功能!
|