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的串口调试工具可以解码出来,这是怎么回事,是不是我的设置还漏掉了什么 楼下我已经发出结论,以及出现该情况的解释 |
特别注意:计算机使用的一般的串口通讯软件,是无法输出奇偶校验的数据码的,所以通信的话,计算机接收到的数据解码出来是对的,然而单片机接收到的数据却是错误的,这种情况需要大家注意。
评分
查看全部评分
STM32的那个校验位是计算在数据位里面的,所以按照理解得话,E 7 1的模式应该是 8位数据,然后开启偶校验占用一位,然后停止位一位,在网上找了一些说法,是说接收下来的东西 做一个 (&0X7F)位与操作,的确可以正常通讯,但是这样应该是最笨的方法了,大家再看看,怎么解决
rtc6不过我是来结贴的,结论写楼下了