相关通信的基本概念
- 通信可分为:
- 单工通信:任何时刻只能向一个方向传输数据
- 半双工: 不可同时收发数据,但可分时收发
- 全双工: 可同时收发数据
- -
- 通信还可分为,同步和异步两种
- 有时钟信号的,都可认为是同步的!同步通信效率更高,但允许时钟误差较小。
- 无时钟信号的,都可认为是异步的!异步通信为了保证数据传输的准确性,都会在原有数据基础上附带传输一些校验位,不需要时钟!
- -
初始化串口通信的基本流程
- 初始化与USART相关的GPIO
- 配置USART相关的数据结构体,其中包括波特率配置
- 如果接收数据采用中断的形式,那么还需要初始化串口中断,需要配置串口中断优先级(配置NVIC寄存器)
- 使能串口,主要是使能 USART_UE 位,以及使能串口接收中断!
void Nvic_config(void)
{
NVIC_InitTypeDef Nvic_InitStruct;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
Nvic_InitStruct.NVIC_IRQChannel = USARTx_IRQ;
Nvic_InitStruct.NVIC_IRQChannelCmd = ENABLE;
Nvic_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;
Nvic_InitStruct.NVIC_IRQChannelSubPriority = 1;
NVIC_Init(&Nvic_InitStruct);
}
void USART_config(void)
{
USART_InitTypeDef Usart_InitStruct;
GPIO_InitTypeDef Gpio_Tx_InitStruct, Gpio_Rx_InitStruct;
Gpio_Rx_InitStruct.GPIO_Pin = USARTx_Rx_GPIOPIN;
Gpio_Rx_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
Gpio_Rx_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
Gpio_Tx_InitStruct.GPIO_Pin = USARTx_Tx_GPIOPIN;
Gpio_Tx_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
Gpio_Tx_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
RCC_APB2PeriphClockCmd(USARTx_GPIO_CLK, ENABLE);
GPIO_Init(USARTx_GPIOPORT, &Gpio_Rx_InitStruct);
GPIO_Init(USARTx_GPIOPORT, &Gpio_Tx_InitStruct);
Usart_InitStruct.USART_BaudRate = USARTx_BaudRate;
Usart_InitStruct.USART_WordLength = USART_WordLength_8b;
Usart_InitStruct.USART_Parity = USART_Parity_No;
Usart_InitStruct.USART_StopBits = USART_StopBits_1;
Usart_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
Usart_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
RCC_APB2PeriphClockCmd(USARTx_CLK, ENABLE);
USART_Init(DEBUG_USARTx, &Usart_InitStruct);
Nvic_config();
USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, ENABLE);
USART_Cmd(DEBUG_USARTx, ENABLE);
}