AVR串口通信
測量了PC端串口接收數據的管腳波形,正常,但是接收數據不對,奇怪!
本文引用地址:http://dyxdggzs.com/article/201611/316506.htm此時(shí)發(fā)送板的M8工作電壓為3.3V,使用內部晶振。
將發(fā)送版的M8的工作電壓改為5V后,PC端接收數據正常了。
接收數據的正確與否和M8的工作電壓有關(guān)系,而工作電壓的大小會(huì )影響什么呢?
有兩個(gè)地方:
1、IO口的電平
難道IO口的電平會(huì )影響數據的正確與否,這個(gè)問(wèn)題可以排除,原因如下:
1)、MAX485是5V供電的,但是它可以和3.3V電平匹配。
2)、接收端的波形是對的,說(shuō)明數據發(fā)出去是對的。
2、影響內部晶振
內部晶振受工作電壓影響很大,進(jìn)而影響了串口通信的波特率,這就是為什么波形是對的,而被PC識別出的數據卻是錯誤的。
知道原因了,就找一下解決辦法了,根本問(wèn)題在于波特率上,也就是晶振上,解決辦法如下:
1、系統采用5V供電
不合理,因為板子上還有其他的芯片與M8通信,這樣就不敢保證電平匹配了。
2、使用外部晶振
不合理,因為該管腳引腳被用了,要是加的話(huà)只能飛線(xiàn)。
3、寫(xiě)校準字
需要自己測出校準字是多少。
合理,不需要更改硬件,但不一定能保證成功,只能實(shí)驗了。
方法如下:
將0~255的數一次寫(xiě)到OSCCAL寄存器中,并將其通過(guò)轉口發(fā)到PC機的串口調試終端上,
找出連續正確的數字,為保證正確,應該去掉走后一個(gè)正確的數(本例子中為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
總結經(jīng)驗:
1、M8使用內部晶振時(shí),其振蕩頻率受工作電壓影響很大。
如果使用了內部晶振,還要做串口通訊,建議是用5V工作或者一定要校準晶振,最好使用外部晶振,
這樣更安全。
2、串口接收的數據如果一直穩定的錯,多半原因是波特率的問(wèn)題了。
評論