stm32c8t6 usart3串口
时间: 2025-08-28 21:10:47 AIGC 浏览: 28
### STM32F103C8T6 的 USART3 配置与使用方法
STM32F103C8T6 是一款基于 ARM Cortex-M3 内核的 32 位微控制器,其内置多个串口(USART1、USART2 和 USART3),其中 USART3 是一个全双工异步串口通信接口,支持数据发送、接收以及中断功能。以下将详细介绍如何配置和使用 USART3。
---
### 一、USART3 的基本配置流程
#### 1. 使能 USART3 和 GPIO 时钟
STM32F103C8T6 的 USART3 默认使用 **PB10(TX)** 和 **PB11(RX)** 引脚。首先需要使能 USART3 和 GPIOB 的时钟。
```c
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
```
#### 2. 配置 USART3 的 GPIO 引脚
将 PB10 设置为复用推挽输出(TX),PB11 设置为浮空输入(RX)。
```c
GPIO_InitTypeDef GPIO_InitStruct;
// USART3 TX (PB10)
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStruct);
// USART3 RX (PB11)
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOB, &GPIO_InitStruct);
```
#### 3. 配置 USART3 参数
设置波特率、字长、停止位、校验方式等参数。
```c
USART_InitTypeDef USART_InitStruct;
USART_InitStruct.USART_BaudRate = 9600; // 波特率
USART_InitStruct.USART_WordLength = USART_WordLength_8b; // 数据位
USART_InitStruct.USART_StopBits = USART_StopBits_1; // 停止位
USART_InitStruct.USART_Parity = USART_Parity_No; // 校验位
USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // 无流控
USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; // 收发模式
USART_Init(USART3, &USART_InitStruct);
```
#### 4. 使能 USART3
```c
USART_Cmd(USART3, ENABLE);
```
---
### 二、USART3 发送与接收数据
#### 1. 发送单个字符
```c
void USART3_SendChar(char ch) {
while (!USART_GetFlagStatus(USART3, USART_FLAG_TXE)); // 等待发送缓冲区为空
USART_SendData(USART3, ch);
}
```
#### 2. 发送字符串
```c
void USART3_SendString(char *str) {
while (*str) {
USART3_SendChar(*str++);
}
}
```
#### 3. 接收单个字符(轮询方式)
```c
char USART3_ReceiveChar() {
while (!USART_GetFlagStatus(USART3, USART_FLAG_RXNE)); // 等待接收数据
return (char)USART_ReceiveData(USART3);
}
```
---
### 三、使用中断接收数据
#### 1. 配置 USART3 接收中断
```c
USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); // 使能接收中断
NVIC_InitTypeDef NVIC_InitStruct;
NVIC_InitStruct.NVIC_IRQChannel = USART3_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct);
```
#### 2. 实现 USART3 中断服务函数
```c
void USART3_IRQHandler(void) {
if (USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) {
char receivedChar = USART_ReceiveData(USART3);
// 处理接收到的字符
}
}
```
---
### 四、注意事项
- **波特率计算**:确保 USART3 的波特率与通信设备一致,否则会导致数据传输错误。
- **引脚复用**:PB10 和 PB11 必须配置为复用推挽输出(TX)和浮空输入(RX),否则无法正常通信。
- **缓冲区管理**:在中断接收数据时,建议使用缓冲区(如环形缓冲区)来存储接收到的数据,防止数据丢失[^1]。
- **调试工具**:可以使用串口调试助手(如 XCOM、SSCOM)进行通信测试。
---
###
阅读全文
相关推荐



















