1. 程式人生 > >MSP430與GPRS模組的串列埠通訊硬體流控制

MSP430與GPRS模組的串列埠通訊硬體流控制

我選用的GPRS模組是西門子的MC52I,由於降低功耗要用到該模組的休眠模式(AT+CFUN=設定具體的休眠模式)。而休眠模式必須先使能RTS/CTS流控制(AT\Q3設定)。MC52I的RTS和CTS引腳直接連在MSP430F149的I/O口上,具體怎麼實現流控制還不太明白,請大家多多指教

經過自己研究終於弄懂是怎麼個回事了
現在發出來,有不對的地方望大家指正
    MC52I可以通過
AT\Q[num] (num=0/1/2/3)選擇不使能流控制(num=0),XON/XOFF軟體流控制(num=1),僅模組的CTS有效(num=2)和RTS/CTS硬體流控制四種方式。值得注意的是通常情況下MC52I不需要進行這方面的設定,直接預設為不使能流控制方式,但是當你需要使用MC52I的休眠模式時就必須要設定為RTS/CTS硬體流控制即傳送
AT指令AT\Q3。此時再發送AT指令AT+CFUN=[num] (num=0/5/6/7/8/9 休眠狀態, 1表示全功能狀態)設定成相關休眠模式即可。如果僅這樣做,當你除錯時會發現微控制器串列埠收不到MC52I傳送過來的資料,也就是說無法進行通訊。這跟RTS/CTS沒有設定好有關係。
    下面介紹下modem下的RTS和CTS定義:
    RTS有效(低電平)表示DTE(這裡就是微控制器)可以收,CTS有效表示modem可以收,這兩個訊號互相獨立,分別表示一個方向的流量情況。具體處理如下(借鑑了別人的描述 dengm 發表於 2005-1-14 07:52 侃微控制器)
    微控制器端:
        傳送資料—— 當發現(不一定及時發現)CTS無效時,停止傳送;
        當發現(不一定及時發現)CTS有效時,恢復傳送;

        接收資料—— 0<M<N<LEN_OF_RX_BUFFERS
        當接收buffers中的bytes<M 時,給 RTS 有效訊號;
        當接收buffers中的bytes>N 時,給 RTS 無效訊號;
    modem端:
        同上,但RTS與CTS交換
    在這裡modem端我們無需處理,只需要監測CTS的電平即可,針對上述的微控制器串列埠無法接收到資料的問題,使連線RTS的I/O口輸出低電平(如果一直設為低電平表示微控制器一直允許接收資料,當傳輸資料非常大的時候會造成資料丟失,因此需要按照上面給出的bytes>N時,使RTS無效),然後再除錯就能夠發現微控制器接收到modem返回的資料了。