Yan.hong.yu的笔记 https://bbs.21ic.com/?594919 [收藏] [复制] [RSS] 学会思考。

日志

AVR选择内部晶振,串口通信不正常,解决办法。

已有 2763 次阅读2010-5-9 01:10 |个人分类:经验|系统分类:单片机| AVR, 串口通信

用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、串口接收的数据如果一直稳定的错,多半原因是波特率的问题了。


路过

鸡蛋

鲜花

握手

雷人

全部作者的其他最新日志

发表评论 评论 (1 个评论)

回复 BD1CM 2010-5-19 09:18
连发大写字母'U' 在N,8,1状态下直接用示波器看方波频率就行了,最可靠

QUOTE:
以下为Yan.hong.yu的回复: 如果没记错的话,就是发0x55吧,频率变化的不大吧。 不过调试的时候频率确实有变化。