69,382
社区成员
发帖
与我相关
我的任务
分享
int main(void)
{
int fd,i=0,j=0,fasong,getdata,Flag;
unsigned char pre_sen[4]={0x01,0x84,0x00,0x43};//数据获取发送
unsigned char pre_rec[10];
struct termios newtio;
fd=open(DATA_COM,O_RDWR);
if(fd==-1)
{
return -1;
}
bzero( &newtio, sizeof( newtio ) );//配置串口
newtio.c_cflag |= CLOCAL | CREAD;
newtio.c_cflag &= ~PARENB;
newtio.c_cflag &= ~CSTOPB;
newtio.c_cflag &= ~CSIZE;
newtio.c_cflag |= CS8;
cfsetispeed(&newtio, B9600);
cfsetospeed(&newtio, B9600);
newtio.c_cc[VTIME] = 0;
newtio.c_cc[VMIN] = 0;
tcflush(fd,TCIFLUSH);
if((tcsetattr(fd,TCSANOW,&newtio))!=0)
{
perror("com set error");
return -1;
}
fasong=write(fd,pre_sen,sizeof(pre_sen));//写
if(fasong<0){
printf("write failed");
}
for(j=0;j<4;j++)
printf("send:%x\n",pre_sen[j]);
getdata=read(fd,pre_rec,sizeof(pre_rec));
for(i=0;i<10;i++)
printf("%x\n",pre_rec[i]);
printf("\n%d",getdata);
close(fd);
}
m_hCom = ::open("/dev/ttyPS1", O_RDWR | O_NOCTTY | O_NONBLOCK);
if(m_hCom==-1) return false;
struct termios options;
tcgetattr(m_hCom, &options);
struct termios newtio;
switch (m_nBaudRate)//设置数据传输率
{
case 4800:
cfsetispeed(&newtio, B4800);
cfsetospeed(&newtio, B4800);
break;
case 9600:
cfsetispeed(&newtio, B9600);
cfsetospeed(&newtio, B9600);
break;
case 19200:
cfsetispeed(&newtio, B19200);
cfsetospeed(&newtio, B19200);
break;
case 38400:
cfsetispeed(&newtio, B38400);
cfsetospeed(&newtio, B38400);
break;
case 115200:
cfsetispeed(&newtio, B115200);
cfsetospeed(&newtio, B115200);
break;
default:
cfsetispeed(&newtio, B9600);
cfsetospeed(&newtio, B9600);
break;
}
//修改控制模式,保证程序不会占用串口
newtio.c_cflag |= CLOCAL;
//修改控制模式,使得能够从串口读取输入数据
newtio.c_cflag |= CREAD;
newtio.c_cflag &= ~CRTSCTS;
switch (m_DataBits)//设置数据位
{
case 5:
newtio.c_cflag |= CS5;
break;
case 6:
newtio.c_cflag |= CS6;
break;
case 7:
newtio.c_cflag |= CS7;
break;
case 8:
newtio.c_cflag |= CS8;
break;
}
switch (m_nParityIndex)//设置奇偶效验位
{
case 0:
newtio.c_cflag &= ~PARENB;
break;
case 1:
//newtio.c_iflag |= (INPCK | ISTRIP);
newtio.c_cflag |= PARENB;
newtio.c_cflag &= ~PARODD;
break;
case 2:
newtio.c_cflag |= PARENB;
newtio.c_cflag |= PARODD;
//newtio.c_iflag |= (INPCK | ISTRIP);
break;
}
switch (m_nStopBitsIndex)
{
case 1:
newtio.c_cflag |= CSTOPB;
break;
default:
newtio.c_cflag &= ~CSTOPB;
break;
}
//修改输出模式,原始数据输出
newtio.c_oflag *= ~OPOST;
newtio.c_cc[VTIME] = 1;
newtio.c_cc[VMIN] = 1;
tcflush(m_hCom, TCIFLUSH);
if ((tcsetattr(m_hCom, TCSANOW, &newtio)) != 0)
{//激活新配置
::close(m_hCom);
m_hCom = -1;
return false;
}
然后是发送部分,buff是char数组,nlen是发送长度:
nRet = write(hComm, buff, nLen);
if (nRet < 0)
{
return KSJVB_RET_FAIL;
}