linux串口波特率和传输方式设置

来源

#include /标准输入输出定义/
#include /标准函数库定义/
#include /Unix标准函数定义/
#include //
#include /
/
#include /文件控制定义/
#include /PPSIX终端控制定义/
#include /错误号定义/

/***@brief 设置串口通信速率
*@param fd 类型 int 打开串口的文件句柄
*@param speed 类型 int 串口速度
@return void/

int speed_arr[] = { B38400, B19200, B9600, B4800, B2400, B1200, B300,
B38400, B19200, B9600, B4800, B2400, B1200, B300, };
int name_arr[] = {38400, 19200, 9600, 4800, 2400, 1200, 300,
38400, 19200, 9600, 4800, 2400, 1200, 300, };
void set_speed(int fd, int speed)
{
int i;
int status;
struct termios Opt;
tcgetattr(fd, &Opt);
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)
perror(“tcsetattr fd1”);
return;
}
tcflush(fd,TCIOFLUSH);
}
}

/**
*@brief 设置串口数据位,停止位和效验位
@param fd 类型 int 打开的串口文件句柄
@param databits 类型 int 数据位 取值 为 7 或者8
@param stopbits 类型 int 停止位 取值为 1 或者2
*@param parity 类型 int 效验类型 取值为N,E,O,S
*/

int set_Parity(int fd,int databits,int stopbits,int parity)
{
struct termios options;
if ( tcgetattr( fd,&options) != 0)
{
perror(“SetupSerial 1”);
return(0);
}
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 (0);
}
switch (parity)
{
case ‘n’:
case ‘N’:
options.c_cflag &= ~PARENB; /* Clear parity enable /
options.c_iflag &= ~INPCK; /
Enable parity checking /
break;
case ‘o’:
case ‘O’:
options.c_cflag |= (PARODD | PARENB); /
设置为奇效验*/
options.c_iflag |= INPCK; /* Disnable parity checking /
break;
case ‘e’:
case ‘E’:
options.c_cflag |= PARENB; /
Enable parity /
options.c_cflag &= ~PARODD; /
转换为偶效验*/
options.c_iflag |= INPCK; /* Disnable parity checking /
break;
case ‘S’:
case ‘s’: /as no parity/
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
break;
default:
fprintf(stderr,“Unsupported parity\n”);
return (0);
}
/
设置停止位*/
switch (stopbits)
{
case 1:
options.c_cflag &= ~CSTOPB;
break;
case 2:
options.c_cflag |= CSTOPB;
break;
default:
fprintf(stderr,“Unsupported stop bits\n”);
return (0);
}
/* Set input parity option */
if (parity != ‘n’)
options.c_iflag |= INPCK;
options.c_cc[VTIME] = 150; // 15 seconds
options.c_cc[VMIN] = 0;

tcflush(fd,TCIFLUSH); /* Update the options and do it NOW /
if (tcsetattr(fd,TCSANOW,&options) != 0)
{
perror(“SetupSerial 3”);
return (0);
}
return (1);
}
/
*
*@breif 打开串口
*/
int OpenDev(char *Dev)
{
int fd = open( Dev, O_RDWR ); //| O_NOCTTY | O_NDELAY
if (-1 == fd)
{ /设置数据位数/
perror(“Can’t Open Serial Port”);
return -1;
}
else
return fd;

}
/**
*@breif main()
*/
int main(int argc, char **argv)
{
int fd;
int nread;
char buff[512];
char *dev =“/dev/ttyS1”;
fd = OpenDev(dev);
if (fd>0)
set_speed(fd,38400);
else
{
printf(“Can’t Open Serial Port!\n”);
exit(0);
}
if (set_Parity(fd,8,1,‘N’)== 0)
{
printf(“Set Parity Error\n”);
exit(1);
}
while(1)
{
while((nread = read(fd,buff,16))>0)
{
//printf(“\nLen %d\n”,nread);
buff[nread+1]=‘\0’;
//printf(“\n%s”,buff);
write(fd,buff,16);
write(fd,“write over…”,14);
}
}
//close(fd);
//exit(0);
}

  • 18
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Linux串口波特率设置是指在Linux系统中通过命令或程序设置串口通信的波特率,以实现不同设备之间的数据传输。一般情况下,串口波特率设置需要考虑串口硬件的支持范围、通信双方的波特率设置、数据传输的稳定性等因素。在Linux系统中,可以使用stty命令或编程语言中的串口库函数来进行串口波特率设置。 ### 回答2: 串口是一种通信方式,它使用一对线路连接两个设备,允许它们之间进行双向通信。在Linux系统中,串口波特率设置常见于嵌入式领域,例如控制芯片、传感器和其他外围设备。 串口波特率指在传输数据时,每秒钟传输的比特数。波特率通常表达为波特/秒(bps)。波特率越高,传输速率越快。常用的波特率有9600、115200、230400等。 在Linux系统中,要进行串口波特率设置,首先需要了解设备文件和串口参数的概念。设备文件是一个文件名,代表着一个设备,例如/dev/ttyS0代表串口1。而串口参数包括数据位、停止位、校验位和波特率设置。 当我们需要进行串口波特率设置时,首先需要使用stty命令来配置串口参数。例如,要设置波特率为115200,可以使用以下命令: ``` stty -F /dev/ttyS0 115200 ``` 其中,“-F”表示指定设备文件,/dev/ttyS0为串口1的设备文件,“115200”为设置波特率。 此外,在一些特殊的应用中,也可以使用setserial命令进行串口波特率设置。setserial命令可以设置更多的串口参数,例如串口工作模式、中断等。例如,要设置串口1的波特率为9600,可以使用以下命令: ``` setserial /dev/ttyS1 baud_base 460800 divisor 48 ``` 其中,“baud_base”为基准波特率,即计算波特率的基数,一般为固定值,而“divisor”则是一个除数,它的值根据基准波特率设置波特率计算得出。 总之,在Linux系统中进行串口波特率设置,需要先了解串口参数的概念和相关命令的使用方法。在实际应用中,要根据具体的需求进行选择和设置。 ### 回答3: linux串口波特率设置在嵌入式开发和通信领域中非常重要。串口波特率是指串行通信时每秒传输的比特数。在串口通讯中,收发双方必须保持一致的波特率,否则会出现乱码等问题。 在linux系统中,串口设备可以通过设备文件进行访问,例如/dev/ttyS0代表第一个串口设备。要设置串口波特率,需要使用stty命令。stty命令的常用选项包括: - speed:设置波特率,如stty -F /dev/ttyS0 speed 9600。 - parity:设置校验位,如N表示无校验位,Even表示偶校验,Odd表示奇校验。 - stop:设置停止位数,如1表示一个停止位,2表示两个停止位。 - cs:设置数据位数,如cs8表示8位数据位。 例如,要设置串口波特率为9600、无校验位、一个停止位、8位数据位,可以使用以下命令: stty -F /dev/ttyS0 9600 cs8 -cstopb -parity 其中-cstopb表示使用1个停止位,-parity表示无校验位。如果要设置其他参数,可以参考stty命令的文档或者使用man stty命令查看帮助文档。 需要注意的是,不同的串口设备可能支持不同的波特率和其他参数。在设置上述参数时,需要确认串口设备支持这些参数。通常来说,串口设备支持的波特率范围为110 ~ 115200。如果使用的是USB串口转换器,则需要安装相应的驱动程序。 总之,正确设置串口波特率是保证串口通信稳定和正确的重要步骤。对于嵌入式设备而言,串口通信是与外界交互的主要方式之一,因此了解和掌握linux串口波特率设置方法非常有必要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xx-xx-xxx-xxx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值