
求助:STM32F051 USART1发送没有中断,接收使能中断,发送数据正常,接收数据乱码,确认进入了接收中断,但数据出现乱码,请问有哪些原因 |
串口接收分十六进制格式和ASCII格式,既然发送正常,可以改变一下接收格式看看 |
发送数据正常的话可以查一下编码 |
中断接收加缓冲,或DMA试下 |
会不会是发送端的发送码有问题?用HEX发送,看看接收的数据对不对。或者用示波器在MCU引脚测一下数据,看看线路传输有没有问题。 |
楼主说的不是很明白,发送使用十六进制吗?如果发送是ASCII码,应该不会产生乱码,而十六进制会显示位乱码,但是看实际的内容是不是和他送的一致。 |
也要看看时钟精度是否达到,测量一下位宽是否准确。如果时钟偏差大了,接收数据采样就会出错,收到的数据就不准确![]() |
好事!说明收到了,细心看看你发的什么格式,接受显示是什么格式 |
另外,速度不对,或外部晶振没起振(默认了内部)会造成通讯速率不对,也可能产生乱码 |
谢谢大家,用示波器测试,接收的波特率是9616,发送的波特率是9588,我分24次发送16进制的1-24,接收的也是16进制,实测下来,刚开始发送的1,2,3接收正常,4开始后接收不正常,还没有找到原因 |
更换更好的晶振! |
用的是内部时钟 |
看一下主频多少 主频太低或者主频不匹配会导致误码率高 |
内部时钟会有一部分偏差。如果对方的偏差向另一边偏,那就会出现误码。所以涉及到串口最好还是用晶振![]() |