stm32f103c8t6 pb6 pb7是串口几
时间: 2024-05-09 07:12:59 浏览: 148
stm32f103c8t6是一款常用的单片机芯片,它内置了多个串口模块,其中PB6和PB7是USART1串口模块的引脚。USART1是一种通用异步收发传输串口,支持多种数据格式和波特率配置。在使用USART1串口时,您需要使用对应的库函数来初始化和配置该串口,以便实现数据的收发和传输。如果您需要更详细的信息,请告诉我。
相关问题
stm32f103c8t6串口 pb6 pb7 配置USART2
### 配置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替代)作接收端的具体过程。
stm32f103c8t6串口 pb6 pb7的i2c使用
### STM32F103C8T6 使用 PB6 和 PB7 进行 I2C 串口通信配置
#### 配置 CubeMX 工程
为了使 STM32F103C8T6 的 PB6 (I2C1_SCL) 和 PB7 (I2C1_SDA) 正确工作,在 STM32CubeMX 中需完成如下设置:
- 打开 STM32CubeMX 并创建新项目,选择目标设备为 STM32F103C8Tx。
- 在 Pinout & Configuration 页面中找到 GPIOB 下的 PB6 和 PB7 引脚,并将其模式更改为 I2C1_SCL 和 I2C1_SDA。
- 启用 I2C1 外设并调整其参数以适应具体应用场景需求。
这些操作确保了硬件层面对于 I2C 接口的支持已经就绪[^2]。
#### 初始化函数与库文件包含
在生成代码之后,会自动生成必要的初始化函数。通常情况下不需要手动修改这部分内容,除非有特殊的定制化需求。需要注意的是要包含相应的头文件以便访问 HAL 库中的 API 函数来控制 I2C 设备。
```c
#include "main.h"
#include "stm32f1xx_hal.h"
// 定义全局变量用于存储 I2C 句柄
I2C_HandleTypeDef hi2c1;
```
#### 编写主程序逻辑
下面是一个简单的例子展示如何通过 I2C 发送数据给从机设备。这里假设地址为 `0x4E` 的是从机设备地址;实际应用时应根据具体情况更改此值。
```c
int main(void)
{
/* Reset of all peripherals, Initializes the Flash interface and Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_I2C1_Init(); // 调用由STM32CubeMX 自动生成的初始化函数
uint8_t data_to_send[] = { 'H', 'e', 'l', 'l', 'o' };
while (1)
{
if(HAL_OK != HAL_I2C_Master_Transmit(&hi2c1, 0x4E << 1, data_to_send, sizeof(data_to_send), HAL_MAX_DELAY))
{
Error_Handler(__FILE__, __LINE__); // 错误处理可以自行定义
}
HAL_Delay(1000); // 延迟一秒再发送下一次消息
}
}
```
上述代码实现了每秒钟向指定地址的从属器件传输字符串 “Hello”。如果希望接收来自其他节点的数据,则可调用 `HAL_I2C_Master_Receive()` 或者针对特定场景下的中断/ DMA 方式来进行优化。
阅读全文
相关推荐














