在linux中,所有的设备文件一般都位于“/dev”下,串口1和串口2对应的设备名依次为“/dev/ttyS0”, “/dev/ttyS1”,而且USB转串口的设备名通常为“/dev/ttyUSB0”,在linux下对设备的操作方法与对文件的操作方法一样。
串口开发步骤:
串口的设置主要是设置struct termios结构体的各成员值
#include<termios>
struct termios
{
Unsigned short c_iflag; /*输入模式标志*/
Unsigned short c_oflag; /*输出模式标志*/
Unsigned short c_cflag; /*控制模式标志*/
Unsigned short c_lflag; /*本地模式标志*/
Unsigned char c_line ; /*线路规则*/
Unsigned char c_cc[NCC]; /*控制特性*/
Speed_t c_ispeed; /*输入速度*/
Speed_t c_ospeed; /*输出速度*/
};
串口设置包括波特率设置,检验位和停止位设置,主要设置的是c_cflag结构体成员,注意,不能直接对c_cflag成员初始化,而要将其通过与或操作。
int set_com_config(int fd,int baud_rate, int data_bits,char parity,int stop_bits)
{
struct termios new_cfg,old_cfg;
int speed;
/*保存并测试现有串口参数设置,在这里如果串口号等出错,会有相关出错信息*/
if(tcgetattr(fd,&old_cfg) != 0) /*该函数得到fd指向的终端配置参数,并将它们保存到old_cfg变量中,成功返回0,否则-1*/
{
perror("tcgetttr");
return -1;
}
/*设置字符大小*/
new_cfg=old_cfg;
cfmakeraw(&new_cfg); /*配置为原始模式*/
new_cfg.c_cflag &= ~CSIZE;/*用位掩码清空数据位的设置*/
/*设置波特率*/
switch(baud_rate)
{
case 2400:
speed=B2400;
break;
case 4800:
speed=B4800;
break;
case 9600:
speed=B9600;
break;
case 19200:
speed=B19200;
break;
case 38400:
speed=B38400;
break;
default:
case 115200:
speed=B115200;
break;
}
cfsetispeed(&new_cfg,speed);
cfsetospeed(&new_cfg,speed);
/*设置停止位*/
switch(data_bits)
{
case 7:
new_cfg.c_cflag |= CS7;
break;
default:
case 8:
new_cfg.c_cflag |= CS8;
break;
}
/*设置奇偶校验位*/
switch(parity)
{
default:
case 'n':
case 'N':
{
new_cfg.c_cflag &= ~PARENB;
new_cfg.c_iflag &= ~INPCK;
}
break;
case 'o':
case 'O':
{
new_cfg.c_cflag |= (PARODD | PARENB);
new_cfg.c_iflag |= INPCK;
}
break;
case 'e':
case 'E':
{
new_cfg.c_cflag |= PARENB;
new_cfg.c_cflag &= ~PARODD;
new_cfg.c_iflag |= INPCK;
}
break;
}
/*设置停止位*/
switch(stopbits)
{
default:
case 1:
new_cfg.c_cflag &= ~CSTOPB;
break;
case 2:
new_cfg.c_cflag |= CSTOPB;
break;
}
/*设置等待时间和最小接收字符*/
new_cfg.c_cc[VTIME]=0;
new_cfg.c_cc[VMIN]=1;
/*处理未接收字符*/
tcflush(fd,TCIFLUSH);
/*激活新配置*/
if((tcsetattr(fd,TCSANOW,&new_cfg))!=0)
{
perror("tcsetattr");
return -1;
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2013-04-14 C++开发文章收藏