Linuxでのシリアルポート操作-組み込み-C言語実装
組み込み型開発ボードは手に入れると一般的にシリアルポートが開きますが、シリアルポートの操作は最も基本的な操作と言えますが、開発ボードを手に入れた後、どのようにシリアルポートを操作しますか?シリアルポートを使用してデータを外部に送信するにはどうすればいいですか?
私がやったのはシリアルポートを通じて文字を送信して、NBIotの伝送を実現して、システムはlinuxシステムの下で、送信したデータは16進数のデータが必要です.以下はc言語開発シリアルポートに関するコードレコードである.
1.シリアルポートのデバイス番号を見つける
linuxシステムでは、すべてのデバイスがファイルなので、シリアルポートというデバイスファイルを見つけてから、このシリアルポートを操作することができます.
2.シリアルポートを開き、シリアルポートを初期化する
シリアルポートの開くにはopen関数が1つしか必要ありません.次に初期化された関数があります.まずシリアルポートを開き、開くとデバイス記述子が返されます.
set_opt関数はシリアルポートに関する基本パラメータを設定するために使用され、一般的にシリアルポートはボーレートなどを設定し、残りのパラメータが使用できるときにどういう意味かを検索します.set_opt関数の定義は次のとおりです.
これで設定が完了すると、シリアルポートの初期化は基本的に完了します.
3.シリアルポートで一連のデータを送信する
シリアルポートを利用して一連のデータを送信し、write
4.シリアルポートで受信したデータを読み出し、read
シリアルポートの基本的な操作は読み出しを読み込み、直接closeを閉じることです.
私がやったのはシリアルポートを通じて文字を送信して、NBIotの伝送を実現して、システムはlinuxシステムの下で、送信したデータは16進数のデータが必要です.以下はc言語開発シリアルポートに関するコードレコードである.
1.シリアルポートのデバイス番号を見つける
linuxシステムでは、すべてのデバイスがファイルなので、シリアルポートというデバイスファイルを見つけてから、このシリアルポートを操作することができます.
#define UART_DEV "/dev/ttyAMA2"
2.シリアルポートを開き、シリアルポートを初期化する
シリアルポートの開くにはopen関数が1つしか必要ありません.次に初期化された関数があります.まずシリアルポートを開き、開くとデバイス記述子が返されます.
int uart_init(void )
{
int fd=0;
fd = open(UART_DEV , O_RDWR|O_NOCTTY|O_NDELAY, 0);
if (fd < 0)
{
printf("open error!
");
return -1;
}
set_opt(fd);
return fd;
}
set_opt関数はシリアルポートに関する基本パラメータを設定するために使用され、一般的にシリアルポートはボーレートなどを設定し、残りのパラメータが使用できるときにどういう意味かを検索します.set_opt関数の定義は次のとおりです.
int set_opt(int fd)
{
struct termios old_cfg, new_cfg;
tcgetattr(fd, &new_cfg);
new_cfg.c_cflag |= (CLOCAL | CREAD);
cfsetispeed(&new_cfg, B9600);//
cfsetospeed(&new_cfg, B9600);
new_cfg.c_cflag &= ~CSIZE;
new_cfg.c_cflag |= CS8;
new_cfg.c_cflag &= ~PARENB;
new_cfg.c_cflag &= ~CSTOPB;
new_cfg.c_cc[VTIME] = 0;
new_cfg.c_cc[VMIN] = 0;
tcflush(fd,TCIFLUSH);
tcsetattr(fd, TCSANOW, &new_cfg);
return 0;
}
これで設定が完了すると、シリアルポートの初期化は基本的に完了します.
3.シリアルポートで一連のデータを送信する
シリアルポートを利用して一連のデータを送信し、write
int uart_send( int fd, char * str)
{
int wr_num;
char buf[1024];
sprintf(buf, "%s", str);
wr_num = write(fd,buf,strlen(buf));
close(fd);
return wr_num;
}
4.シリアルポートで受信したデータを読み出し、read
int uart_recv(int fd)
{
int nread;
char buf[1024];
nread = read(fd, buf, LEN);
if(nread > 0)
{
printf("%s
",buf);
}
close(fd);
return nread ;
}
シリアルポートの基本的な操作は読み出しを読み込み、直接closeを閉じることです.