STM32F103C8T6双串口通信
时间: 2023-09-09 11:07:25 浏览: 121
STM32F103C8T6芯片内部有多个串口模块,其中USART1、USART2和USART3都支持双向通信,可以用来实现双串口通信。
下面是使用USART1和USART2进行双串口通信的示例代码:
```c
#include "stm32f10x.h"
void USART1_Init(void)
{
USART_InitTypeDef USART_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); // 使能USART1时钟
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_Rx | USART_Mode_Tx; // 支持接收和发送
USART_Init(USART1, &USART_InitStructure); // 初始化USART1
USART_Cmd(USART1, ENABLE); // 使能USART1
}
void USART2_Init(void)
{
USART_InitTypeDef USART_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); // 使能USART2时钟
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_Rx | USART_Mode_Tx; // 支持接收和发送
USART_Init(USART2, &USART_InitStructure); // 初始化USART2
USART_Cmd(USART2, ENABLE); // 使能USART2
}
void USART1_SendChar(u8 ch)
{
USART_SendData(USART1, (uint8_t)ch);
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}
void USART2_SendChar(u8 ch)
{
USART_SendData(USART2, (uint8_t)ch);
while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
}
u8 USART1_ReceiveChar(void)
{
while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
return (uint8_t)USART_ReceiveData(USART1);
}
u8 USART2_ReceiveChar(void)
{
while (USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == RESET);
return (uint8_t)USART_ReceiveData(USART2);
}
int main(void)
{
u8 ch;
USART1_Init();
USART2_Init();
while (1)
{
ch = USART1_ReceiveChar(); // 从USART1接收数据
USART2_SendChar(ch); // 发送到USART2
ch = USART2_ReceiveChar(); // 从USART2接收数据
USART1_SendChar(ch); // 发送到USART1
}
}
```
上述代码中,USART1和USART2都被初始化为9600bps,8位数据位,1位停止位和无校验位的模式。在无限循环中,从USART1接收数据并发送到USART2,然后从USART2接收数据并发送到USART1。
阅读全文