序
最近调块板子上面有几路485,控制芯片STM32F407VE、转换芯片ADM2587,使用485转换器连接电脑,发现串口助手向板子发送数据后会收到乱码,经软硬件联合调试排除bug。
一、问题现象
1、485向上位机发送数据,串口助手正常收到数据
u8 test_buf[10]={0x02,0x12,0x22,0x32,0x42,0x52,0x62,0x72,0x82,0x92};
for(t=0;t<10;t++){
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
USART_SendData(USART1,flash_buf[t]);
}
2、串口助手通过RS485向MCU发送数据,现象就是上位机会接收到一串莫名其妙的数据,发送数据越多接收到的乱码越多,且这种乱码具有一致性(发送一样的数据,反馈回的乱码会保持一致)
二、解决问题
1、检查了一遍485驱动、相应的串口中断,无误。将CH340直接连到usart口上发现不会出现异常,那么问题就会出在ADM2587及后级电路上。
2、去掉匹配电阻后异常解决
百度原因:对RS转RS网络一般要使用终接电阻进行匹配。但在短距离与低速率下可以不用考虑终端匹配。那么在什么情况下不用考虑匹配呢?理论上,在每个接收数据信号的中点进行时,只要反射信号在开始采样时衰减到足够低就可以不考虑匹配。但这在实际上难以掌握,美国MAXIM公司有篇文章提到一条经验性的原则可以用来判断在什么样的数据速率和电缆长度时需要进行匹配:当信号的转换时间(上升或下降时间)超过电信号沿单向传输所需时间的3倍以上时就可以不加匹配。 例如具有限斜率特性的RS-输出信号的上升或下降时间最小为250ns,典型双绞线上的信号传输速率约为0.2m/ns(24AWG PVC电缆),那么只要数据速率在250kb/s以内、电缆长度不超过16米,RS-接口时就可以不加终端匹配。
ps.在匹配电阻上串联个跳冒,短距离、低频时就不短接,反之短接。
参考链接:
http://www.51hei.com/bbs/forum.php?mod=viewthread&tid=197613
https://www.sohu.com/a/120014600_119709