STM32F103C8T6串口2完整详细代码
时间: 2024-09-06 09:03:09 浏览: 40
STM32F103C8T6是STMicroelectronics(意法半导体)推出的一款基于ARM Cortex-M3核心的中等性能微控制器。STM32F103C8T6具有丰富的外设接口,其中包括多个USART/UART串口,而串口2是其中一个功能强大的串行通信接口。
以下是一个基于STM32标准外设库(Standard Peripheral Library)的串口2初始化和数据发送的示例代码,这段代码是用C语言编写的,旨在为STM32F103C8T6开发板编写。
```c
#include "stm32f10x.h"
#include "stm32f10x_usart.h"
void USART2_Init(void) {
// 定义波特率
#define BAUD_RATE 9600
// 定义串口2引脚:PD5(TX)和PD6(RX)
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
// 1. 使能GPIOA和USART2时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART2, ENABLE);
// 2. 配置USART2 Tx (PA.02) 为推挽复用输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 3. 配置USART2 Rx (PA.03) 为浮空输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 4. 配置USART2工作参数:波特率、字长、停止位、校验位
USART_InitStructure.USART_BaudRate = BAUD_RATE;
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_Rx | USART_Mode_Tx;
USART_Init(USART2, &USART_InitStructure);
// 5. 使能USART2
USART_Cmd(USART2, ENABLE);
}
void USART2_SendByte(uint8_t byte) {
// 等待发送数据寄存器为空
while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
// 发送数据
USART_SendData(USART2, byte);
// 等待传输完成
while (USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);
}
int main(void) {
// 初始化串口2
USART2_Init();
while (1) {
// 发送字符'X'和换行符
USART2_SendByte('X');
USART2_SendByte('\n');
// 延时1秒
for (int i = 0; i < 1000000; i++);
}
}
```
这段代码首先初始化了串口2的硬件,并设置了一个波特率为9600的串口通信。`USART2_SendByte`函数用于发送单个字节数据。在`main`函数中,不断发送字符'X'和换行符,并在两者之间延时以模拟数据传输过程。
请注意,这段代码是基于STM32标准外设库的。如果你使用的是HAL库或者LL库,代码会有所不同。务必确保你的开发环境和库与代码相匹配。
在实际应用中,你还需要根据具体硬件设计和项目需求调整GPIO配置、中断处理等。