STM32H743是一款高性能的微控制器,广泛应用于嵌入式系统开发中。本文将以实现UART通信为例,详细介绍如何使用STM32CubeMX生成代码,并结合HAL库完成基本的UART通信功能。本教程适合初学者,希望能帮助你快速上手STM32H743开发。
一、硬件与软件环境准备- 硬件环境
- STM32H743开发板
- USB转串口模块
- 杜邦线若干
- PC机(安装串口调试助手)
- 软件环境
- STM32CubeMX
- STM32CubeIDE
- 串口调试工具(如SSCOM或SecureCRT)
二、UART通信简介UART(通用异步收发传输)是一种常见的串行通信协议,使用简单,广泛应用于嵌入式开发中。在STM32中,UART由USART模块支持,可配置为异步模式,实现设备之间的数据传输。
三、开发步骤1. 使用STM32CubeMX配置工程- 打开STM32CubeMX,创建一个新的工程,选择STM32H743的芯片型号。
- 在引脚配置界面,启用USART3,并设置其引脚为Tx(PD8)和Rx(PD9)。
- 设置时钟树,将HCLK配置为400MHz。
- 在“Configuration”界面设置USART3的参数:波特率为115200,数据位为8位,无校验,1个停止位。
- 生成代码,选择STM32CubeIDE作为工具链。
2. 编写代码生成代码后,打开STM32CubeIDE,我们将在生成的工程基础上进行修改。目标是实现通过UART发送和接收数据。
以下是核心代码:
#include "main.h"
#include "string.h"
UART_HandleTypeDef huart3;
char rxBuffer[100]; // 接收缓冲区
// UART回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
if (huart->Instance == USART3) {
HAL_UART_Transmit(&huart3, (uint8_t*)rxBuffer, strlen(rxBuffer), HAL_MAX_DELAY); // 回显收到的数据
memset(rxBuffer, 0, sizeof(rxBuffer)); // 清空缓冲区
HAL_UART_Receive_IT(&huart3, (uint8_t*)rxBuffer, sizeof(rxBuffer) - 1); // 再次启用接收中断
}
}
int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART3_UART_Init();
// 初始化接收中断
HAL_UART_Receive_IT(&huart3, (uint8_t*)rxBuffer, sizeof(rxBuffer) - 1);
while (1) {
// 主循环可以进行其他任务
HAL_Delay(1000);
}
}
void SystemClock_Config(void) {
// 时钟配置代码由CubeMX自动生成,此处略。
}
void MX_GPIO_Init(void) {
// GPIO初始化代码由CubeMX自动生成,此处略。
}
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;
huart3.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
if (HAL_UART_Init(&huart3) != HAL_OK) {
Error_Handler();
}
}
3. 下载与测试- 将代码烧录到STM32H743开发板中。
- 使用USB转串口模块连接开发板的USART3引脚到PC。
- 打开串口调试助手,设置波特率为115200,选择正确的串口号。
- 发送任意字符串,观察是否能收到相同的数据回显。
四、关键点分析- 中断接收
本文使用了UART接收中断,避免了在主循环中持续轮询UART状态,从而提高了代码的效率。
- 缓冲区管理
接收缓冲区的清理和重新初始化是确保通信稳定的关键。
- 可扩展性
代码结构清晰,可以很容易地扩展为支持多种通信协议的系统。
五、总结通过本次教程,我们完成了STM32H743的UART通信实现。从中可以学习到CubeMX的基本使用方法、HAL库的配置技巧以及嵌入式系统中常见的通信实现方案。希望本文对你有所帮助,祝你的开发之旅顺利!
|