串口使用校验位

来源:互联网 发布:嘉兴互赢网络 编辑:程序博客网 时间:2024/05/18 13:29

平时都用的8N1的模式,这次使用了校验位,因此串口的初始化工作需要改变

#ifdef RT_USING_UART2USART_InitStructure.USART_BaudRate = 9600;USART_InitStructure.USART_WordLength = USART_WordLength_9b;USART_InitStructure.USART_StopBits = USART_StopBits_2;USART_InitStructure.USART_Parity = USART_Parity_Even;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;USART_Init(USART2, &USART_InitStructure);USART_ClockInit(USART2, &USART_ClockInitStructure);/* register uart2 */rt_hw_serial_register(&uart2_device, "uart2",RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM,&uart2);/* Enable USART2 DMA Rx request */USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);#endif

这里最重要的是
USART_WordLength_9b

这个字段意思是字的长度,没有校验位的时候是8位,有了之后要加一位。因此,这不代表数据的长度……真坑

还要多些网友的帮助,详见

http://www.rt-thread.org/phpBB3/viewtopic.php?f=2&t=2960&p=16419#p16419

原创粉丝点击