AVR串口通信
测量了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、串口接收的数据如果一直稳定的错,多半原因是波特率的问题了。
AVR串口通 相关文章:
- AVR串口通讯的详解(11-24)
- AVR简单的串口通信程序(11-18)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)