串口收发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的串口调试工具可以解码出来,这是怎么回事,是不是我的设置还漏掉了什么
楼下我已经发出结论,以及出现该情况的解释
今天我自己来结贴吧,网上的这方面的比较少, 比如我这里要写入的是7 E 1的通讯参数,那么我楼上的设置是完全正确的,那会有人问了,为什么数据位是 8B呢,因为在STM32里面,数据位当没有奇偶校验的时候,的确是8位全都写入数据位里面,当存在奇偶校验的时候,奇偶校验位是补充在数据位中的,所以我们得出结论了,如果要使得通讯参数为 8 E 1的时候,写入的数据位参数应该就是9位,
特别注意:计算机使用的一般的串口通讯软件,是无法输出奇偶校验的数据码的,所以通信的话,计算机接收到的数据解码出来是对的,然而单片机接收到的数据却是错误的,这种情况需要大家注意。 楼主设置的是8位的,要配置一致才可以。 安 发表于 2016-2-19 09:48
楼主设置的是8位的,要配置一致才可以。
STM32的那个校验位是计算在数据位里面的,所以按照理解得话,E 7 1的模式应该是 8位数据,然后开启偶校验占用一位,然后停止位一位,在网上找了一些说法,是说接收下来的东西 做一个 (&0X7F)位与操作,的确可以正常通讯,但是这样应该是最笨的方法了,大家再看看,怎么解决 楼主用的是哪个芯片? 安 发表于 2016-2-20 10:43
楼主用的是哪个芯片?
rtc6不过我是来结贴的,结论写楼下了 我也关注
页:
[1]