(1)首先要编写串口的通信程序,串口的初始化,读写数据等,提前要确定你的串口接收数据是中断方式还是查询方式,这要根据你的GPRS模块来决定,国内的很多GPRS模块,都只支持中断的方式,西门子的可以用查询,友亩旁其实用查询比较简单,中断的话调试起来相对较麻烦;
(2)根耐伏据串口通信程序和使用的GPRS模块的手册,编写GPRS的通信程序,包括GPRS模块的硬件和软件初始化,GPRS的接收和发送好橡数据等函数;
(3)根据实际需要编写GPRS的整体通信程序,通信的数据协议可以自行设计
#include stdio.h>#include stdlib.h>
#include string.h>
#include unistd.h>
#include fcntl.h>
#include errno.h>
#include termios.h>
int open_port(void)
{
int fd
fd = open("/dev/s3c2410_serial1", O_RDWR|O_NOCTTY|O_NDELAY)
if(fd == -1)
printf("前辩Unable to open uart1\n")
else
fcntl(fd, F_SETFL, 0)
return fd
}
int setup_uart(int fd)
{
struct termios oldtio, newtio
if((tcgetattr(fd, &oldtio)) != 0)
{
printf("Save old error!\n")
return -1
}
bzero(&newtio, sizeof(newtio))
newtio.c_cflag |= (CLOCAL | CREAD)
newtio.c_cflag &= ~CSIZE
newtio.c_cflag &= ~CSTOPB// 1 stop bit
newtio.c_cflag &= ~PARENB// No parity
newtio.c_cflag |= CS8// 8 bits data
cfsetispeed(&newtio, B9600)
cfsetospeed(&newtio, B9600)
//newtio.c_lflag |= (ICANON | ECHO)
//newtio.c_lflag &= ~ECHOE
//newtio.c_iflag &= ~(IXON | IXOFF | IXANY)
newtio.c_cc[VTIME] = 0
newtio.c_cc[VMIN] = 0
tcflush(fd, TCIFLUSH)
if((tcsetattr(fd, TCSANOW, &newtio)) != 0)
{
printf("慧猜缺Set new error!\n")
return -1
}
}
int main(void)
{
int i
int fd
char c,str[200]
fd = open_port()
if(fd == -1)
return 0
i = setup_uart(fd)
if(i == -1)
return 0
while(1)
{
for(i=0i200i++)
str = '\0'
i = 0
printf("GPRS-CMD #")
while((c=getchar()) != 10)
{
str = c
i++
}
str = 13
str[i+1] = '\0'
i = write(fd, str, strlen(str))
if(i 0)
printf("write error!")
for(i=0i100i++)
usleep(100)
i = read(fd, str, 200)
printf("兆迅%s\n", str)
}
}
另一篇和主题相似的已发送往您的邮箱,请查收.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)