用STM32的UART功能发送0x33,用电脑里的串口助手接收数据,是00 66。。。这中间应该是某个地方上,单片机和串口助手的通信有差别造成的吧。但是自己一直没想明白其中的原因。还望同志们不吝赐教!!谢啦 附上UART的设置: UART2_DeInit(); /* UART1 configured as follow: - BaudRate = 9600 baud - Word Length = 8 Bits - One Stop Bit - No parity - Receive and Transmit enabled - UART1 Clock disabled */ UART2_Init((uint32_t)9600, UART2_WORDLENGTH_8D, UART2_STOPBITS_1, UART2_PARITY_NO,UART2_SYNCMODE_CLOCK_DISABLE, UART2_MODE_TXRX_ENABLE); UART2_Cmd(ENABLE); UART2_SendData8(0x33); while (UART2_GetFlagStatus(UART2_FLAG_TXE) == RESET) { } |
进一步测试发现,单片机发送0x25,串口助手接收为0x6D;单片机发送0x6D,串口接收为0x49,反之亦然。
其中的规律为:单片机发送的0x25二进制为0010 0101,取反为11011010,在其开始加起始位0,在末尾加停止位1,则变为0110110101。这是串口助手直接从第一位开始读取,所以读到的数是0x6D,最后的01两位舍弃了。。。。同理也适用与0x6D变为0x49的情况
不知道这种情况是什么原因造成的??应该怎么避免掉起始位的问题呢
多谢楼主。。。实验条件简陋,连示波器都没有。。。工程我可以上传一下。。。
会不会与没有使用MAX232之类的转换芯片有关系呢?我现在是单片机的串口线直接接的USB转串口,再直连电脑
单片机设置的参数都在上位机挨个核对过,波特率、停止位、奇偶校验、数据宽度都确认过,保证一致。只有一项“流控制”是上位机有但单片机没有,选择的无流控制。。。
楼主用示波器测试一下波形,看看波特率实际输出是多少。
楼主可否把工程上传一下,大家看代码帮你测试才好解决。
怎么看串口线和单片机是否匹配呢?
嗯,这个地方忽视了。。。想办法给开发板加个电平转换