|
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
当接收buffers中的bytes
当接收buffers中的bytes>N 时,给 RTS 无效信号;
modem端:
同上,但RTS与CTS交换
在这里modem端我们无需处理,只需要监测CTS的电平即可,针对上述的单片机串口无法接收到数据的问题,使连接RTS的I/O口输出低电平(如果一直设为低电平表示单片机一直允许接收数据,当传输数据非常大的时候会造成数据丢失,因此需要按照上面给出的bytes>N时,使RTS无效),然后再调试就能够发现单片机接收到modem返回的数据了。
|
|