uart通信物理层
1.两个通信设备的DB9接口之间通过串口信号线建立起连接,串口信号线中使用RS232标准传输数据信号,由于RS232电平标准的信号不能被控制器直接识别,所以信号需要经过一个电平转换芯片,将信号转换成控制器可以识别的TTL标准的电平信号才能实现通信。
通信标准:5VTTL通信 逻辑1(2.4-5V ) 逻辑0(0-0.5V)
15VRS232通信 逻辑1(-15—3V)负 逻辑0(3V-15V)
协议层
1.在串口通信的协议层中,规定了数据包的内容,它由起始位、主体数据、校验位、以及停止位组成。
(1)波特率:异步通信中由于没有时钟信号,所以两个通信设备之间需要约定好波特率,即每一个码元的长度,以便对信号进行解码,
(2)起始位和停止位:每一个数据包都有一个起始位和停止位,起始位一般由一个逻辑0的数据位表示,停止位由一个逻辑1的数据位来表示。
(3)有效数据:紧跟着起始位的是一段有效数据位,一般长度由5.6.7或者8.
(4)数据校验位:有奇校验、偶校验、0校验、1校验、无校验。
程序逻辑:
/**
* @brief USART GPIO 配置,工作参数配置
* @param 无
* @retval 无
*/
void USART_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
// 打开串口GPIO的时钟
DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE);
// 打开串口外设的时钟
DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE);
// 将USART Tx的GPIO配置为推挽复用模式
GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure);
// 将USART Rx的GPIO配置为浮空输入模式
GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure);
// 配置串口的工作参数
// 配置波特率
USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE;
// 配置 数据字长
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 =