串口收到乱码,可能原因有很多,最常见的就是波特率错误,而波特率错误也有一些原因会导致,比如软件配置错误,系统时钟配置错误,晶振选择错误,总的来说就是波特率错误,这个也很方便查,看看uart 的波特率寄存器算一下就知道了。(波特率错误,乱码会保持相同错乱内容,比如楼主发的是1,乱码是a,那持续发1,乱码将一直是a,如果不是,请忽略此项,反之有90%可能是此项导致)
再者,还有可能是电平匹配错误,TTL的电平接CMOS电平就会是乱码.反之亦然。还有硬件协议错误,422接232就会是乱码。
还有软件错误,比如发送缓存被释放,也会是乱码。(乱码不相同)
以上是常见原因,非常见原因还有串口线过长导致电平丢失,受外界干扰时序错乱等(如果是稳定丢失,可不参考此项),上位机以及串口线损坏也会导致乱码,但很少见到。(并非没有)
最好的解决办法,利用逻辑分析仪抓取时序,确定错误方在谁那里。