新聞中心

        RS485協議

        作者: 時間:2016-12-14 來源:網絡 收藏

        第二步:發送數據

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

        這里需要注意的是:

        方法一:USART_ClearFlag(USART3, USART_FLAG_TC);

        方法二:

        USART_GetITStatus(USART1, USART_FLAG_TC);

        剛上電時出現亂碼的原因:

        while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET); // USART_FLAG_TXE---檢測發送數據寄存器空標志位

        如果USART_FLAG_TC---發送完成標志位

        (1)當設為USART_FLAG_TXE---檢測發送數據寄存器空標志位—為空,但是發送移位寄存器不為空,數據還沒有完全的發送出去,又有數據就被寫進來了,所以就會容易出現亂碼;

        (2)當設為USART_FLAG_TC—檢測發送完成標志位—為空,即發送移位寄存器為空,數據才真正的發送出去,因此此時又有數據被寫進來也不會發生亂碼

        STM32的數據發送有兩個中斷標志,一個是發送數據寄存器空標志,一個是發送完畢標志。兩個標志都可以引起中斷.

        要以中斷的方式發送一個數據包,流程是這樣的:

        1.設置RS485的方向為發送,使能發送寄存器空中斷,使能完畢進入串口中斷。

        2.串口中斷里讀取串口狀態,并填充一個數據到發送數據寄存器,硬件自動清除發送數據寄存器空標志,串口數據發送開始。

        3.串口發送完一個數據,發送數據寄存器變空,再進入中斷,繼續填充下一個數據,直到最后一個數據填充完,使能串口

        發送完畢中斷。

        4.最后一個數據發送完畢,再次進入中斷,清除發送數據寄存器空標志,清除發送完畢中斷標志,清除這兩個中斷標志

        的使能位,設置RS485的方向為接收.

        [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發送DE端口,關閉接收/RE端口
        8. DelayNmS(1);
        9. USART_SendData(USART2,*str++);
        10. while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET);//檢測發送數據寄存器空標志位
        11. DelayNmS(1);
        12. RX_485;//關閉發送DE端口,打開接收/RE485端口,
        13. }
        14. }<spanstyle="font-family:TimesNewRoman;font-size:14px;">span>

        在485芯片的通信中,尤其要注意對485控制端DE的軟件編程。為了可靠工作,在485總線狀態切換時需要做適當延時,再進行數據收發。具體的做法是在數據發送狀態下,先將控制端置“1”,延時1ms左右的時間,在發送有效的數據,一包數據發送結束后再延時1ms后,將控制端置“0”,這樣處理會使總線在狀態切換時,有一個穩定的工作過程。



        上一頁 1 2 下一頁

        關鍵詞: RS485協議通信總線自動仲

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 白山市| 婺源县| 五河县| 沧源| 东明县| 永昌县| 乌兰县| 广汉市| 深州市| 山丹县| 金坛市| 沂源县| 桓台县| 偃师市| 乳山市| 成武县| 奉新县| 阿鲁科尔沁旗| 马龙县| 安阳市| 牙克石市| 西乌| 阿拉尔市| 元阳县| 东至县| 望都县| 武宣县| 昌江| 东阳市| 乃东县| 广宗县| 浦北县| 景宁| 明光市| 成武县| 铜梁县| 沾益县| 广东省| 青川县| 钟山县| 项城市|