shadow_world 发表于 2013-05-03 17:32

linux下读取GSM模块短信内容问题

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;
       
        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 = '\0';
        printf("%s", recv);
       
        close(fd);
        return 0;
}

shadow_world 发表于 2013-05-03 22:02

本帖最后由 shadow_world 于 2013-05-03 23:50 编辑

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

shadow_world 发表于 2013-05-05 16:16

高价收购开发板读取GSM模块串口短信程序、方法,急

fsfilove 发表于 2013-05-06 18:01

额, 短信来了后,不是会自动提示的么,要抓住这个现象啊,还得自己发at指令才可以读到短信。不明白你上面的程序在做啥子。

fsfilove 发表于 2013-05-06 18:04

看了看你的程序,char *cmd = "AT+CMGR=10";你怎么知道每次短信都在第10个位置。不可以是1,2,3,4,5、、、、的么?

fanronghua 发表于 2013-05-10 14:41

你要 minicom 看看
页: [1]
查看完整版本: linux下读取GSM模块短信内容问题