单片机串口 奇偶校验 配置问题

一、问题描述

  使用GD32单片机串口进行通信测试,单片机的串口配置的是偶校验(Even)、数据位为8、停止位为1、波特率为9600。串口测试软件用的格西烽火,软件的配置如下:
在这里插入图片描述
  单片机通过串口和串口测试软件进行通信交互,软件收到的数据和单片机发送的数据不一致。

二、解决办法

  UART 串口的特点是将数据一位一位地顺序传送,只要 2 根传输线就可以实现双向通信,一根线发送 数据的同时用另一根线接收数据。UART 串口通信有几个重要的参数,分别是波特率、起始位、数据位、停止位和奇偶检验位,对于两个使用 UART 串口通信的端口,这些参数必须匹配,否则通信将无法正常完成。 UART 串口传输的数据格式如下图所示:
单片机串口 奇偶校验 配置问题_第1张图片
单片机串口 奇偶校验 配置问题_第2张图片

  • 空闲位:数据线在空闲状态的时候为逻辑“1”状态,也就是高电平,表示没有数据线空闲, 没有数据传输。
  • 起始位:当要传输数据的时候先传输一个逻辑“0”,也就是将数据线拉低,表示开始数据 传输。
  • 数据位:数据位就是实际要传输的数据,数据位数可选择 5~8 位,我们一般都是按照字节传输数据的,一个字节 8 位,因此数据位通常是 8 位的。低位在前,先传输,高位最后传输。
  • 奇偶校验位:这是对数据中“1”的位数进行奇偶校验用的,可以不使用奇偶校验功能。
  • 停止位:数据传输完成标志位,停止位的位数可以选择 1 位、1.5 位或 2 位高电平,一般都 选择 1 位停止位。
  • 波特率:波特率就是 UART 数据传输的速率,也就是每秒传输的数据位数,一般选择 9600、 19200、115200 等。

      GD32官方用户手册关于串口的介绍:
    单片机串口 奇偶校验 配置问题_第3张图片
    单片机串口 奇偶校验 配置问题_第4张图片
      单片机的串口配置中数据位的最后一位可以用作校验位所以如果数据有8位,又有奇校验或者偶校验(需要占1位数据)的时候,则GD32单片机配置的数据长度应为9。

三、验证

代码修改如下:

//修改前
usart_parity_config(USART2, USART_PM_EVEN);
usart_word_length_set(USART2, USART_WL_8BIT);
//修改后
usart_parity_config(USART2, USART_PM_EVEN);
usart_word_length_set(USART2, USART_WL_9BIT);

重新编译,测试可以看到串口测试软件和单片机之间的数据交互是正常的。

stm32参考资料
链接1
链接2

你可能感兴趣的:(单片机,嵌入式硬件,串口,奇偶校验)