天嵌 ARM开发社区

 找回密码
 注册
查看: 1942|回复: 7

gsm+linux能发送中文短信,却不能发英文

[复制链接]
KCL 发表于 2013-8-4 17:59:10 | 显示全部楼层 |阅读模式
如上啊,我的这个模块能够发送中文短信 却不鞥呢发英文短信,这是咋个回事了。。。有人说要更新数据包,但是在网上怎么一点资料都查不到啊,麻烦懂的人能指点一下了,先谢啦!!
 楼主| KCL 发表于 2013-8-5 09:56:18 | 显示全部楼层
void serial_rwMSG()
{       
        int n, j, nwrite, time;
        char *q;
        char reply[128];
        char reply1[128];
       
        unsigned char ATE0[]="ATE0\r";
        unsigned char ATCMGF[]="AT+CMGF=1\r";
    unsigned char ATCMGS[]="AT+CMGS=\"+8615108464710\"\r";
    unsigned char Data[]="Hello !";         



       int END[] ={0x0d};        // 回车符
           int end[]={0x1a};        // 发送符

        q = reply1;
        while (flag)
        {
                write(serial_fd, ATE0,strlen(ATE0));        // ATE0[]="ATE0\r"
                sleep (2);
               
                nwrite = write(serial_fd, ATE0,strlen(ATE0));        // ATE0[]="ATE0\r"
                // ATE0发两次的原因,第一次发送会有回显(会返回ATEO\r\r\nOK\r\n),作用也就是让下次发送命令没有回显
                printf("\nsend = %d, %s\n\n",nwrite,ATE0);                // 第一次返回值不处理,第二次判断是否返回OK
                check_ok ();
                printf ("ATE0 out\n");
               
                nwrite = write(serial_fd, ATCMGF,strlen(ATCMGF));        // AT+CMGF=1        //GSM
                printf("\nsend = %d, %s\n\n",nwrite,ATCMGF);
                check_ok ();
                printf ("ATCMGF out\n");
               

                sleep (2);
                nwrite = write(serial_fd, ATCMGS,strlen(ATCMGS));        // AT+CMGS=\r
       
                time = 2;
                while(time)                // 发送完 AT+CMGS=25\r 后第一次回复 /r/nOK/r/n 第二次回复 "/r/n>"加空格' '
                {
                        bzero(reply, sizeof(reply));
               
                        if((n = read(serial_fd,reply,128))>0)
                        {
                                reply[n] = '\0';
                                printf("\nrecv:%d\n",n);
                                for (j = 0; j < n; j++)
                                {
                                        if ((reply[j] != '\r') && (reply[j] != '\n'))        //跳过TC35回复的\r\n
                                        {
                                                printf("%c",reply[j]);
                                                *q++ = reply[j];
                                        }
                                }
                                printf("\n");
                               
                                for(j = 0; j < n; j++)
                                {
                                                printf("%d\n", reply[j]);
                                }                       
                                printf("\n");
               
                                if (reply[2] == '>')        // 判断是否出现 > 符
                                {
                                        flag = 0;
                                        break;
                                }
                                else if (strcmp (reply1, "ERROR") == 0)                // 判断是否发送错误
                                {
                                        flag = 1;
                                        break;
                                }
                                else
                                {       
                                        flag = 1;
                                        --time;
                                }       
                        }
                }
       
                printf("\nsend = %d, %s\n\n",nwrite,ATCMGS);
               
                nwrite = write(serial_fd, Data,strlen(Data));        // data
                usleep (50000);


                write(serial_fd, end,1);
                printf("\nsend = %d, %s\n\n",nwrite,Data);
                sleep (2);
  
        }

        close(serial_fd);
}
回复

使用道具 举报

 楼主| KCL 发表于 2013-8-5 09:57:35 | 显示全部楼层
模块用的是sim300.,,代码是改的之前论坛一哥们发的。
回复

使用道具 举报

 楼主| KCL 发表于 2013-8-5 09:59:34 | 显示全部楼层
代码的功能就是向手机以文本格式发送短信,因为代码是改的别人,所以一些注释有些不匹配~
回复

使用道具 举报

TQ-lkp 发表于 2013-8-5 10:17:36 | 显示全部楼层
"AT+CMGF=0\r\n";//短信发送方式,1 txt,0pdu
看楼主的设置也是对的
尝试下在PC上使用串口的方式来手动发送
回复

使用道具 举报

 楼主| KCL 发表于 2013-8-5 10:22:39 | 显示全部楼层
TQ-lkp 发表于 2013-8-5 10:17
"AT+CMGF=0\r\n";//短信发送方式,1 txt,0pdu
看楼主的设置也是对的
尝试下在PC上使用串口的方式来手动发送 ...

在电脑上是没问题的。
回复

使用道具 举报

TQ-lkp 发表于 2013-8-13 09:45:02 | 显示全部楼层
楼主解决没有,这个问题我感觉挺怪异的,一般是发中文比较麻烦,需要进行很多编码转换
要么是模块本身的问题
回复

使用道具 举报

 楼主| KCL 发表于 2013-8-13 16:00:46 | 显示全部楼层
TQ-lkp 发表于 2013-8-13 09:45
楼主解决没有,这个问题我感觉挺怪异的,一般是发中文比较麻烦,需要进行很多编码转换
要么是模块本身的问 ...

嗯,问题终于找出了。原来是手机卡只能发送中文短信不能发英文的。。真是太坑了!  程序硬件都没问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2025-5-6 20:39 , Processed in 2.040130 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表