工作中遇到一个问题,利用串口发送一串16进制数,每一个16进制数占8位,所以可以使用char类型buf数组来作为接发缓冲,注意点,读取时fscanf()中,类型使用“%x” 表示为一个16进制数。
#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>
#include<sys/socket.h>
#include<netinet/in.h>
#define FALSE -1
#define TRUE 0
/*
* 串口配置 波特率,停止位,数据位,校验位
*/
int speed_arr[] = {B115200, B38400, B19200, B9600, B4800, B2400, B1200, B300};long name_arr[] = {115200, 38400, 19200, 9600, 4800, 2400, 1200, 300};
void set_speed(int fd, long speed)
{
int i;
int status;
struct termios Opt;
tcgetattr(fd, &Opt);
bzero(&Opt,sizeof(struct termios)); //clear
for ( i= 0; i < sizeof(speed_arr) / sizeof(int); i++) {
if (speed == name_arr[i]) {
tcflush(fd, TCIOFLUSH);
cfsetispeed(&Opt, speed_arr[i]);
cfsetospeed(&Opt, speed_arr[i]);
status = tcsetattr(fd, TCSANOW, &Opt);
if (status != 0) {
printf("tcsetattr fd\n");
return;
}
tcflush(fd,TCIOFLUSH);
}
}
}
int set_Parity(int fd,int databits,int stopbits,int parity)
{
struct termios options;
if ( tcgetattr( fd,&options) != 0) {
perror("SetupSerial 1");
return(FALSE);
}
options.c_cflag &= ~CSIZE;
switch (databits)
{
case 7:
options.c_cflag |= CS7;
break;
case 8:
options.c_cflag |= CS8;
break;
default:
fprintf(stderr,"Unsupported data size\n");
return (FALSE);
}
switch (parity)
{
case 'n':
case 'N': //无校验位
options.c_cflag &= ~PARENB; /* Clear parity enable */
options.c_iflag &= ~INPCK; /* Enable parity checking */
break; &nb