<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          AVR串口通信

          作者: 時(shí)間:2016-11-13 來源:網(wǎng)絡(luò) 收藏
          用M8做了一個(gè)485通信,調(diào)試時(shí)發(fā)現(xiàn),PC端接收數(shù)據(jù)不正常,而另一個(gè)同樣的板子接收的數(shù)據(jù)時(shí)正常。

          測(cè)量了PC端串口接收數(shù)據(jù)的管腳波形,正常,但是接收數(shù)據(jù)不對(duì),奇怪!

          本文引用地址:http://www.ex-cimer.com/article/201611/316506.htm

          此時(shí)發(fā)送板的M8工作電壓為3.3V,使用內(nèi)部晶振。

          將發(fā)送版的M8的工作電壓改為5V后,PC端接收數(shù)據(jù)正常了。

          接收數(shù)據(jù)的正確與否和M8的工作電壓有關(guān)系,而工作電壓的大小會(huì)影響什么呢?

          有兩個(gè)地方:

          1、IO口的電平

          難道IO口的電平會(huì)影響數(shù)據(jù)的正確與否,這個(gè)問題可以排除,原因如下:

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

          2)、接收端的波形是對(duì)的,說明數(shù)據(jù)發(fā)出去是對(duì)的。

          2、影響內(nèi)部晶振

          內(nèi)部晶振受工作電壓影響很大,進(jìn)而影響了串口通信的波特率,這就是為什么波形是對(duì)的,而被PC識(shí)別出的數(shù)據(jù)卻是錯(cuò)誤的。

          知道原因了,就找一下解決辦法了,根本問題在于波特率上,也就是晶振上,解決辦法如下:

          1、系統(tǒng)采用5V供電

          不合理,因?yàn)榘遄由线€有其他的芯片與M8通信,這樣就不敢保證電平匹配了。

          2、使用外部晶振

          不合理,因?yàn)樵摴苣_引腳被用了,要是加的話只能飛線。

          3、寫校準(zhǔn)字

          需要自己測(cè)出校準(zhǔn)字是多少。

          合理,不需要更改硬件,但不一定能保證成功,只能實(shí)驗(yàn)了。

          方法如下:

          將0~255的數(shù)一次寫到OSCCAL寄存器中,并將其通過轉(zhuǎn)口發(fā)到PC機(jī)的串口調(diào)試終端上,
          找出連續(xù)正確的數(shù)字,為保證正確,應(yīng)該去掉走后一個(gè)正確的數(shù)(本例子中為BD)。

          這是測(cè)得的一串連續(xù)對(duì)的數(shù)據(jù):

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

          所以校準(zhǔn)字可選:A8 A9 AA AB AC AD AE AF B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC

          總結(jié)經(jīng)驗(yàn):

          1、M8使用內(nèi)部晶振時(shí),其振蕩頻率受工作電壓影響很大。

          如果使用了內(nèi)部晶振,還要做串口通訊,建議是用5V工作或者一定要校準(zhǔn)晶振,最好使用外部晶振,

          這樣更安全。

          2、串口接收的數(shù)據(jù)如果一直穩(wěn)定的錯(cuò),多半原因是波特率的問題了。



          關(guān)鍵詞: AVR串口通

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();