stm32f103c8t6串口 pb6 pb7 配置USART2
时间: 2025-01-01 07:26:39 浏览: 20
### 配置STM32F103C8T6的USART2使用PB6和PB7引脚
为了使STM32F103C8T6能够通过USART2接口通信并指定使用PB6 (TX) 和 PB7 (RX),需按照如下方法设置相应的寄存器以及初始化外设。
#### GPIO端口重映射
STM32F103系列支持可选的引脚重新映射功能,允许改变某些外设默认使用的I/O引脚。对于USART2,默认情况下是连接到PA2(TX)/PA3(RX)[^4];然而也可以选择将其路由至其他备用管脚组合比如PB6/PB7来实现同样的UART通讯目的。这需要启用APB2ENR中的AFIO时钟,并利用MAPR寄存器内的相应位域完成重定向操作。
```c
// 启用 AFIO 外设时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
// 设置 USART2 重映射为 PB6/TX 和 PB7/RX
GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);
```
#### 初始化GPIO引脚
接下来要配置PB6和PB7作为USART2的数据发送与接收引脚,在此之前先确保这两个引脚已经被设定成复用推挽输出模式(用于传输)及浮空输入模式(用于接受)。具体可以通过修改对应GPIOx_CRL/CRH寄存器里的参数达成目标。
```c
GPIO_InitTypeDef GPIO_InitStructure;
/* PB6 TX */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* PB7 RX */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; // 浮空输入
GPIO_Init(GPIOB, &GPIO📐⚗📐
⚗⚗⚗
⚗⚗⚗
InitStruct);
// 开启USART2模块时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No ;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
USART_Init(USART2, &USART_InitStructure);
// 使能USART2
USART_Cmd(USART2, ENABLE);
```
上述代码片段展示了如何在STM32F103C8T6上配置USART2以使用PB6(PA2替代)作发送端、PB7(PA3替代)作接收端的具体过程。
阅读全文