免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3409 | 回复: 5
打印 上一主题 下一主题

[应用] linux下读取GSM模块短信内容问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-05-03 17:32 |只看该作者 |倒序浏览
GSM模块单独在电脑终端测试是没有问题的,但是拿到context A8开发板下就是读取不了串口数据,用的GSM模块是明基M23的。写的程序如下size返回的是-1,recv是空的,搞了几天,就是不知道哪里错了,请大神们帮我检查检查错误,感激不尽....
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <errno.h>
#include <string.h>

int main()
{
        int fd;
        char ch;
        int size = 0;
        unsigned char recv[500];
       
        char *end = "\xd\0";
        char *cmd = "AT+CMGR=10";
        struct termios options;
        fd = open("/dev/s3c2410_serial2", O_RDWR | O_NONBLOCK);

        if(fd < 0)
                printf("error");
               
        tcgetattr(fd, &options);

        options.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|IGNCR|ICRNL|IXON);
        options.c_cflag &= ~PARENB; //无奇偶校验位
        options.c_cflag &= ~CSTOPB;        //停止位为1位
        options.c_cflag &= ~CSIZE;       
        options.c_cflag |= CS8;                //数据位为8位
        options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
        cfsetispeed(&options, B115200);//uart in speed
        cfsetospeed(&options, B115200);//uart out speed
       
        tcflush(fd, TCIFLUSH);
        tcsetattr(fd, TCSANOW, &options);
       
        write(fd, cmd, strlen(cmd));
        write(fd, end, strlen(end));
        sleep(3);
        size = read(fd, recv, sizeof(recv));
        printf("%d\n", size);
        recv[size] = '\0';
        printf("%s", recv);
       
        close(fd);
        return 0;
}

论坛徽章:
0
2 [报告]
发表于 2013-05-03 22:02 |只看该作者
本帖最后由 shadow_world 于 2013-05-03 23:50 编辑

运行的程序是可以的,但是就是读不出来,把串口从开发板上拔下来插到电脑终端之后,又会打印出一大堆信息,求大神们分析分析啊

123.gif (1.01 MB, 下载次数: 34)

123.gif

论坛徽章:
0
3 [报告]
发表于 2013-05-05 16:16 |只看该作者
高价收购开发板读取GSM模块串口短信程序、方法,急

论坛徽章:
0
4 [报告]
发表于 2013-05-06 18:01 |只看该作者
额, 短信来了后,不是会自动提示的么,要抓住这个现象啊,还得自己发at指令才可以读到短信。不明白你上面的程序在做啥子。

论坛徽章:
0
5 [报告]
发表于 2013-05-06 18:04 |只看该作者
看了看你的程序,char *cmd = "AT+CMGR=10";你怎么知道每次短信都在第10个位置。不可以是1,2,3,4,5、、、、的么?

论坛徽章:
0
6 [报告]
发表于 2013-05-10 14:41 |只看该作者
你要 minicom 看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP