在Linux串口编程的一些问题解决(4)

2019-04-15 20:03

#include <sys/stat.h>

#include <fcntl.h> //文件控制定义

#include <termios.h> //POSIX中断控制定义

#include <errno.h> //错误号定义2.打开串口串口位于/dev中,可作为标准文件的形式打开,其中:

串口1 /dev/ttyS0

串口2 /dev/ttyS1

代码如下: int fd;

fd = open(“/dev/ttyS0”, O_RDWR);

if(fd == -1) {

Perror(“串口1打开失败!”); } //else

//fcntl(fd, F_SETFL, FNDELAY);

除了使用O_RDWR标志之外,通常还会使用O_NOCTTY和O_NDELAY这两个标志。

O_NOCTTY:告诉Unix这个程序不想成为“控制终端”控制的程序,不说明这个标志的话,任何输入都会影响你的程序。

O_NDELAY:告诉Unix这个程序不关心DCD信号线状态,即其他端口是否运行,不说明这个标志的话,该程序就会在DCD信号线为低电平时停止。3.设置波特率最基本的串口设置包括波特率、校验位和停止位设置,且串口设置主要使用termios.h头文件中定义的termios结构,如下:

struct termios

{

tcflag_t c_iflag; //输入模式标志

tcflag_t c_oflag; //输出模式标志

tcflag_t c_cflag; //控制模式标志

tcflag_t c_lflag; //本地模式标志

cc_t c_line; //line discipline

cc_t c_cc[NCC]; //control characters }

代码如下: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

SetSpeed(int fd, int speed) { int i;

struct termios Opt; //定义termios结构if(tcgetattr(fd, &Opt) != 0) {

perror(“tcgetattr fd”); return; }

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]);

if(tcsetattr(fd, TCSANOW, &Opt) != 0) {

perror(“tcsetattr fd”); return; }

tcflush(fd, TCIOFLUSH); }


在Linux串口编程的一些问题解决(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:青州项目可行性报告1650136325 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: