用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、串口接纳的数据假如一向安稳的错,八成原因是波特率的问题了。