UART通信,接收的数据总是不对

2019-07-14 17:11发布

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)
{
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
IC阿祥
1楼-- · 2019-07-15 01:25
一样的。。。我怀疑是rs232数据包中初始位、停止位等,在串口助手上和单片机上不一样
IC阿祥
2楼-- · 2019-07-15 06:29
wq644921241 发表于 2018-10-1 16:26
你看看你的上下位机的波特率设置一样吗?

进一步测试发现,单片机发送0x25,串口助手接收为0x6D;单片机发送0x6D,串口接收为0x49,反之亦然。
其中的规律为:单片机发送的0x25二进制为0010 0101,取反为11011010,在其开始加起始位0,在末尾加停止位1,则变为0110110101。这是串口助手直接从第一位开始读取,所以读到的数是0x6D,最后的01两位舍弃了。。。。同理也适用与0x6D变为0x49的情况
不知道这种情况是什么原因造成的??应该怎么避免掉起始位的问题呢
selinali0112
3楼-- · 2019-07-15 10:14
上位机软件的所有设置都要和单片机的一致
Elva_chen
4楼-- · 2019-07-15 14:28
看现象像是通信参数设置不匹配
IC阿祥
5楼-- · 2019-07-15 16:25
 精彩回答 2  元偷偷看……
IC阿祥
6楼-- · 2019-07-15 19:29
单片机串口的同步模式是什么意思,我看例程大部分人都选择禁用同步模式。。。。UART2_Init函数里这一项有很多可以选择的模式,比如第二个脉冲沿检测等等,具体代表什么意思也讲不清楚

一周热门 更多>