本帖最后由 512826028 于 2015-1-25 22:55 编辑
还有另外一个乱码的原因,可能我的发送频率太快了导致的。所以,我尽可能的都在中间间隔了1S。
我把我改良后的代码贴在这里吧。希望可以帮到有类似困惑的朋友。
- /*******************************************************************************
- *描 述: 此文件包含操作GSM的所有函数
- *GSM 模块:SIM900A
- *控制芯片:MSP430F149
- *
- *******************************************************************************/
- #include "include.h"
- extern uchar USART1BUFF[];//重新声明一下其他函数中定义的USART1BUFF数组
- extern void UART_Clear_BUFF(void);
- //外部声明过的函数 0 UART1,1 UART2,str为字符串指针
- extern void UART_PutStr(uchar uartx, char *str);
- extern void UART_PutChar(uchar uartx, char ch);
- extern void DelayNms(unsigned char n);
- extern void DelayNs(unsigned char n);
- extern void led(int i);
- extern void GPIO_OUT(uchar px, uchar data8);
- extern void UART_Init(uchar uartx);
- /*******************************************************************************
- *SIM900初始化函数
- *
- *返回值:无
- *测试通过时间:2015年1月22日22:58:54
- *******************************************************************************/
- void SIM900(void)
- {
-
- //第一步 握手
- /*******************************************************
- *不握手,GSM模块会一直向串口发送
- * RDY
- * +CFUN: 1
- * +CPIN: READY
- *会搞乱串口中断,和数据缓冲区。
- *******************************************************/
- UART_Clear_BUFF();
- UART_PutStr(0,"AT\r\n\r\n");
- DelayNs(1);
- while(strstr((char const*)USART1BUFF,"OK")==NULL)
- {
- UART_Clear_BUFF();
- //注意:此处必须为\R\N\R\N!!!
- UART_PutStr(0,"AT\r\n\r\n");
- led(1);
- }
- //GPIO_OUT(P2,0Xf7);//点亮一个LED灯,代表握手成功
- DelayNs(1);
-
- UART_Clear_BUFF();//
-
- //第二步 检查SIM卡是否存在
- UART_PutStr(0,"AT+CPIN?\r\n\r\n");
- DelayNs(1);
- while(strstr((char const*)USART1BUFF,"OK")==NULL)
- {
- UART_Clear_BUFF();
- //注意:此处必须为\R\N\R\N!!!
- UART_PutStr(0,"AT+CPIN?\r\n\r\n");
- led(2);
- //DelayNs(1);
- }
- GPIO_OUT(P2,0Xfe);
- DelayNs(1);
- UART_Clear_BUFF();//
-
-
- //第三步 设置短信格式为GSM方式
- UART_PutStr(0,"AT+CSCS="GSM"\r\n\r\n");
- DelayNs(1);
- while(strstr((char const*)USART1BUFF,"OK")==NULL)
- {
- UART_Clear_BUFF();
- //注意:此处必须为\R\N\R\N!!!
- UART_PutStr(0,"AT+CSCS="GSM"\r\n\r\n");
- led(3);
- }
- GPIO_OUT(P2,0Xfb);
- DelayNs(1);
- UART_Clear_BUFF();//
-
- //第四步 设置短信各式为 文本方式
- UART_PutStr(0,"AT+CMGF=1\r\n\r\n");
- DelayNs(1);
- while(strstr((char const*)USART1BUFF,"OK")==NULL)
- {
- UART_Clear_BUFF();
- //注意:此处必须为\R\N\R\N!!!
- UART_PutStr(0,"AT+CMGF=1\r\n\r\n");
- led(4);
- }
- GPIO_OUT(P2,0Xf7);
- DelayNs(1);
- UART_Clear_BUFF();//
-
- }
- /*******************************************************************************
- *SIM900发送短信程序
- *
- *返回值:无
- *测试通过时间:2015年1月22日22:58:54
- *******************************************************************************/
- void SIM900_Send_MSG()
- {
- DelayNs(3);
-
- UART_PutStr(0,"AT+CMGS="10086"\r\n\r\n");
- DelayNs(1);
- GPIO_OUT(P2,0Xef);
- DelayNs(3);
-
- UART_PutStr(0,"Hello World!");
-
- GPIO_OUT(P2,0Xbf);
- DelayNs(3);
- UART_Clear_BUFF();//
-
- UART_PutChar(0,0X1A);//发送短信
-
- GPIO_OUT(P2,0X3c); //正在发送短信!!!!!
-
- DelayNs(3);//等待发送结束
-
- while(strstr((char const*)USART1BUFF,"CMGS")==NULL)
- {
- //UART_Clear_BUFF();
- UART_PutChar(0,0X1A);
- GPIO_OUT(P2,0X7f);
- DelayNs(1);
- GPIO_OUT(P2,0Xff);
- DelayNs(1);
- GPIO_OUT(P2,0X7f);
- DelayNs(1);
- }
- }
|