单片机驱动GSM模块,遇到了个很棘手的问题!【已解决】

2019-07-28 18:37发布

本帖最后由 512826028 于 2015-1-25 23:06 编辑

单片机是 MSP430F149  
GSM模块是 SIM900A

程序中 单片机单独发送  AT指令,可以得到OK答复,单片机点亮第一个LED灯。

单片机单独发送ATE0指令,也可以得到OK答复,单片机点亮另一个LED灯。

但是,如果让单片机按顺序,先发送AT指令,等到OK后,在发送ATE0指令,就不能继续运行了,第二个LED就一直都点不亮了。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
henryetchou
1楼-- · 2019-07-29 18:42
俺認為您的問題不在硬件問題,而可能再UART1BUF裡的字串函數判斷,如果您想糾錯,
俺有一個有效直捷的方法來兩分....
您把GSM TX串口接上回電腦的RS-232 RX,包率設置正確,用終端機或是串口助手監看,
肯定第二個指令是否有ACK回覆??回覆得是否真是OK??
假如有回覆,那就是strstr()程序判斷不嚴謹.如果沒回覆那麼就可以判定是發送指令的問題.
此時再把單片機串口TX接回電腦RX確認一下串口打印字串是否是對的??
另~GSM模塊除了包率設置外,有時會有校驗碼(Parity)停止字節(Stop bit)的設置差異,
確認單片機的UART串口這些設置都是謀合的....
P.S.俺是台灣來的,如有用語差異鬧笑話,請多海涵。
dirtwillfly
2楼-- · 2019-07-29 19:38
henryetchou 发表于 2015-1-23 22:13
俺認為您的問題不在硬件問題,而可能再UART1BUF裡的字串函數判斷,如果您想糾錯,
俺有一個有效直捷的方法 ...

好谦虚啊。
我觉得也是单片机和模块间的串口匹配问题。
具体能否确认是不是这个问题,还需要楼主进一步测试。
luhshuay
3楼-- · 2019-07-29 22:03
用串口助手直接控制下模块看是否能行?为什么命令后要加两个回车符呢?一个回车的吧
ocon
4楼-- · 2019-07-30 03:22
 精彩回答 2  元偷偷看……
guangbiao
5楼-- · 2019-07-30 07:08
while(strstr((char const*)USART1BUFF,"OK")==NULL)
    {
        UART_Clear_BUFF();
        led(2);
        //注意:此处必须为RNRN!!!
        UART_PutStr(0,"AT ");
    }
这两个类似的循环会出大问题的:
1.只要判断没有“OK”就清接收缓存,如果我刚收到一个'O',后面的字节还没有收到时,缓存就被冲刷了。
2.只要判断没有“OK”,就一直重发相应AT命令。你这是在测试GSM模块的串口接收缓冲区有多大吧!!!!!!
pmp
6楼-- · 2019-07-30 10:36
清楚中断了?

一周热门 更多>