×
单片机 > 单片机程序设计 > 详情

AVR串口通信

发布时间:2020-06-04 发布时间:
|
用M8做了一个485通信,调试时发现,PC端接收数据不正常,而另一个同样的板子接收的数据时正常。

测量了PC端串口接收数据的管脚波形,正常,但是接收数据不对,奇怪!

此时发送板的M8工作电压为3.3V,使用内部晶振。

将发送版的M8的工作电压改为5V后,PC端接收数据正常了。

接收数据的正确与否和M8的工作电压有关系,而工作电压的大小会影响什么呢?

有两个地方:

1、IO口的电平

难道IO口的电平会影响数据的正确与否,这个问题可以排除,原因如下:

1)、MAX485是5V供电的,但是它可以和3.3V电平匹配。

2)、接收端的波形是对的,说明数据发出去是对的。

2、影响内部晶振

内部晶振受工作电压影响很大,进而影响了串口通信的波特率,这就是为什么波形是对的,而被PC识别出的数据却是错误的。

知道原因了,就找一下解决办法了,根本问题在于波特率上,也就是晶振上,解决办法如下:

1、系统采用5V供电

不合理,因为板子上还有其他的芯片与M8通信,这样就不敢保证电平匹配了。

2、使用外部晶振

不合理,因为该管脚引脚被用了,要是加的话只能飞线。

3、写校准字

需要自己测出校准字是多少。

合理,不需要更改硬件,但不一定能保证成功,只能实验了。

 

方法如下:

将0~255的数一次写到OSCCAL寄存器中,并将其通过转口发到PC机的串口调试终端上,
找出连续正确的数字,为保证正确,应该去掉走后一个正确的数(本例子中为BD)。

这是测得的一串连续对的数据:

A8 A9 AA AB AC AD AE AF B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD FE FF

所以校准字可选:A8 A9 AA AB AC AD AE AF B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC

 

总结经验:

1、M8使用内部晶振时,其振荡频率受工作电压影响很大。

如果使用了内部晶振,还要做串口通讯,建议是用5V工作或者一定要校准晶振,最好使用外部晶振,

这样更安全。

2、串口接收的数据如果一直稳定的错,多半原因是波特率的问题了。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
单片机中高阻态的实质及意义