stm32f103c8t6串口2初始化和printf函数
时间: 2023-08-03 08:06:18 浏览: 142
实用可靠的stm32串口程序(可用的printf函数)
好的,我来回答您的问题。
首先,关于STM32F103C8T6串口2的初始化,步骤如下:
1. 开启串口2时钟:使能GPIOA时钟和USART2时钟
```
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO | RCC_APB2Periph_USART1, ENABLE);
```
2. 配置GPIO引脚
```
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //USART2_TX
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //USART2_RX
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
```
3. 配置USART2
```
USART_InitStructure.USART_BaudRate = 115200; //波特率
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);
```
4. 使能USART2
```
USART_Cmd(USART2, ENABLE);
```
接下来是关于printf函数的使用。printf函数需要配合一个串口输出函数使用,一般情况下我们使用USART的中断发送方式来实现。
1. 在main函数中添加如下代码,初始化串口输出函数
```
init_printf(0, USART2_SendChar); //初始化printf函数
```
2. 实现USART2_SendChar函数
```
void USART2_SendChar(char ch) {
USART_SendData(USART2, (uint8_t)ch);
while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
}
```
3. 使用printf函数输出数据
```
printf("Hello, world!\n");
```
以上就是关于STM32F103C8T6串口2初始化和printf函数的使用方法,希望能对您有所帮助。
阅读全文