钊钊 发表于 2016-2-19 02:50:39

串口收发7位偶校验该怎么设置,求大侠

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_Even;//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);


按理说这样设置就是正确的,但是通过计算机发送过去的数据单片机串口接收显示为错误,单片机发送过来的 数据 用 9600 7 E 1的串口调试工具可以解码出来,这是怎么回事,是不是我的设置还漏掉了什么


楼下我已经发出结论,以及出现该情况的解释

钊钊 发表于 2016-2-21 21:15:59

今天我自己来结贴吧,网上的这方面的比较少, 比如我这里要写入的是7 E 1的通讯参数,那么我楼上的设置是完全正确的,那会有人问了,为什么数据位是 8B呢,因为在STM32里面,数据位当没有奇偶校验的时候,的确是8位全都写入数据位里面,当存在奇偶校验的时候,奇偶校验位是补充在数据位中的,所以我们得出结论了,如果要使得通讯参数为 8 E 1的时候,写入的数据位参数应该就是9位,
特别注意:计算机使用的一般的串口通讯软件,是无法输出奇偶校验的数据码的,所以通信的话,计算机接收到的数据解码出来是对的,然而单片机接收到的数据却是错误的,这种情况需要大家注意。

发表于 2016-2-19 09:48:20

楼主设置的是8位的,要配置一致才可以。

钊钊 发表于 2016-2-19 10:27:03

安 发表于 2016-2-19 09:48
楼主设置的是8位的,要配置一致才可以。

STM32的那个校验位是计算在数据位里面的,所以按照理解得话,E 7 1的模式应该是 8位数据,然后开启偶校验占用一位,然后停止位一位,在网上找了一些说法,是说接收下来的东西 做一个 (&0X7F)位与操作,的确可以正常通讯,但是这样应该是最笨的方法了,大家再看看,怎么解决

发表于 2016-2-20 10:43:10

楼主用的是哪个芯片?

钊钊 发表于 2016-2-21 21:11:54

安 发表于 2016-2-20 10:43
楼主用的是哪个芯片?

rtc6不过我是来结贴的,结论写楼下了

a阿伟 发表于 2017-9-22 16:18:00

我也关注
页: [1]
查看完整版本: 串口收发7位偶校验该怎么设置,求大侠