stm32g431rbt6串口
时间: 2025-03-29 16:17:34 浏览: 32
### STM32G431RBT6 单片机串口配置及使用方法
#### 一、硬件初始化
在使用 STM32 的 HAL 库进行串口通信前,需通过 CubeMX 工具完成基础外设的初始化。具体操作如下:
- 配置系统时钟 HCLK 为 80 MHz 是常见的需求[^3],这一步可以通过 CubeMX 设置 PLL 参数实现。
- 启用 USART 或 UART 外设,并将其映射到所需的 GPIO 引脚上。
```c
// 初始化结构体定义
UART_HandleTypeDef huart;
void MX_USART2_UART_Init(void) {
huart.Instance = USART2;
huart.Init.BaudRate = 9600; // 波特率设置
huart.Init.WordLength = UART_WORDLENGTH_8B; // 数据位长度
huart.Init.StopBits = UART_STOPBITS_1; // 停止位数量
huart.Init.Parity = UART_PARITY_NONE; // 校验方式
huart.Init.Mode = UART_MODE_TX_RX; // 发送接收模式
huart.Init.HwFlowCtl = UART_HWCONTROL_NONE; // 流控制关闭
huart.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart) != HAL_OK) { // 初始化函数调用
Error_Handler(); // 错误处理机制
}
}
```
上述代码展示了如何利用 HAL 库初始化一个串口实例 `USART2`,并设置了波特率为 9600bps,数据帧由 8 个数据位组成,无校验位以及单停止位[^1]。
---
#### 二、数据收发功能
对于串口的数据传输,可以分别采用阻塞模式和中断/DMA 模式来实现发送与接收。
##### 1. **阻塞模式**
在这种模式下,程序会等待直到指定的操作完成后才继续执行其他任务。
```c
uint8_t txData[] = "Hello, World!";
if (HAL_UART_Transmit(&huart, txData, sizeof(txData), HAL_MAX_DELAY) != HAL_OK) {
Error_Handler();
}
uint8_t rxBuffer[1];
if (HAL_UART_Receive(&huart, rxBuffer, 1, HAL_MAX_DELAY) != HAL_OK) {
Error_Handler();
}
```
以上片段演示了简单的字符串发送过程以及从串口中读取单一字节的过程。
##### 2. **中断/DMA 模式**
为了提高效率减少 CPU 负载,在实际应用中更推荐使用基于中断或者 DMA 技术的方式来进行大批量数据交换。
以下是启用 RX 中断的一个例子:
```c
__HAL_UART_ENABLE_IT(&huart, UART_IT_RXNE); // 开启接收寄存器非空中断请求
```
当接收到新字符时触发回调函数 `_UARTRxCpltCallback()` 来进一步处理这些数据。
同样也可以结合 DMA 完成连续性的高速数据流管理,这里不再赘述其细节部分。
---
#### 三、调试工具支持
开发过程中可能需要用到逻辑分析仪或者其他专用设备辅助验证信号波形及时序关系;另外还可以借助于开源项目资源加快学习进度比如提到过的 Gitee 和 GitHub 平台上的相关仓库链接提供了完整的案例可供参考[^2]。
---
阅读全文
相关推荐


















