在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

    
    
    <address id="vxupu"><td id="vxupu"></td></address>

      <pre id="vxupu"><small id="vxupu"></small></pre>
      <dfn id="vxupu"></dfn>
      <div id="vxupu"><small id="vxupu"></small></div>
    1. 新聞中心

      RS485協(xié)議

      作者: 時(shí)間:2016-12-14 來源:網(wǎng)絡(luò) 收藏

      第二步:發(fā)送數(shù)據(jù)

      本文引用地址:http://www.biyoush.com/article/201612/330004.htm

      這里需要注意的是:

      方法一:USART_ClearFlag(USART3, USART_FLAG_TC);

      方法二:

      USART_GetITStatus(USART1, USART_FLAG_TC);

      剛上電時(shí)出現(xiàn)亂碼的原因:

      while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET); // USART_FLAG_TXE---檢測(cè)發(fā)送數(shù)據(jù)寄存器空標(biāo)志位

      如果USART_FLAG_TC---發(fā)送完成標(biāo)志位

      (1)當(dāng)設(shè)為USART_FLAG_TXE---檢測(cè)發(fā)送數(shù)據(jù)寄存器空標(biāo)志位—為空,但是發(fā)送移位寄存器不為空,數(shù)據(jù)還沒有完全的發(fā)送出去,又有數(shù)據(jù)就被寫進(jìn)來了,所以就會(huì)容易出現(xiàn)亂碼;

      (2)當(dāng)設(shè)為USART_FLAG_TC—檢測(cè)發(fā)送完成標(biāo)志位—為空,即發(fā)送移位寄存器為空,數(shù)據(jù)才真正的發(fā)送出去,因此此時(shí)又有數(shù)據(jù)被寫進(jìn)來也不會(huì)發(fā)生亂碼

      STM32的數(shù)據(jù)發(fā)送有兩個(gè)中斷標(biāo)志,一個(gè)是發(fā)送數(shù)據(jù)寄存器空標(biāo)志,一個(gè)是發(fā)送完畢標(biāo)志。兩個(gè)標(biāo)志都可以引起中斷.

      要以中斷的方式發(fā)送一個(gè)數(shù)據(jù)包,流程是這樣的:

      1.設(shè)置RS485的方向?yàn)榘l(fā)送,使能發(fā)送寄存器空中斷,使能完畢進(jìn)入串口中斷。

      2.串口中斷里讀取串口狀態(tài),并填充一個(gè)數(shù)據(jù)到發(fā)送數(shù)據(jù)寄存器,硬件自動(dòng)清除發(fā)送數(shù)據(jù)寄存器空標(biāo)志,串口數(shù)據(jù)發(fā)送開始。

      3.串口發(fā)送完一個(gè)數(shù)據(jù),發(fā)送數(shù)據(jù)寄存器變空,再進(jìn)入中斷,繼續(xù)填充下一個(gè)數(shù)據(jù),直到最后一個(gè)數(shù)據(jù)填充完,使能串口

      發(fā)送完畢中斷。

      4.最后一個(gè)數(shù)據(jù)發(fā)送完畢,再次進(jìn)入中斷,清除發(fā)送數(shù)據(jù)寄存器空標(biāo)志,清除發(fā)送完畢中斷標(biāo)志,清除這兩個(gè)中斷標(biāo)志

      的使能位,設(shè)置RS485的方向?yàn)榻邮?

      [html]view plaincopy
      1. #defineRX_485GPIO_SetBits(GPIOA,GPIO_Pin_1);
      2. #defineTX_485GPIO_ResetBits(GPIOA,GPIO_Pin_1);
      3. voidUART2_TX485_Puts(char*str)
      4. {
      5. while(*str)
      6. {
      7. TX_485;//打開485發(fā)送DE端口,關(guān)閉接收/RE端口
      8. DelayNmS(1);
      9. USART_SendData(USART2,*str++);
      10. while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET);//檢測(cè)發(fā)送數(shù)據(jù)寄存器空標(biāo)志位
      11. DelayNmS(1);
      12. RX_485;//關(guān)閉發(fā)送DE端口,打開接收/RE485端口,
      13. }
      14. }<spanstyle="font-family:TimesNewRoman;font-size:14px;">span>

      在485芯片的通信中,尤其要注意對(duì)485控制端DE的軟件編程。為了可靠工作,在485總線狀態(tài)切換時(shí)需要做適當(dāng)延時(shí),再進(jìn)行數(shù)據(jù)收發(fā)。具體的做法是在數(shù)據(jù)發(fā)送狀態(tài)下,先將控制端置“1”,延時(shí)1ms左右的時(shí)間,在發(fā)送有效的數(shù)據(jù),一包數(shù)據(jù)發(fā)送結(jié)束后再延時(shí)1ms后,將控制端置“0”,這樣處理會(huì)使總線在狀態(tài)切換時(shí),有一個(gè)穩(wěn)定的工作過程。



      上一頁(yè) 1 2 下一頁(yè)

      關(guān)鍵詞: RS485協(xié)議通信總線自動(dòng)仲

      評(píng)論


      相關(guān)推薦

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

      關(guān)閉