Linuxでのシリアルポート操作-組み込み-C言語実装


組み込み型開発ボードは手に入れると一般的にシリアルポートが開きますが、シリアルポートの操作は最も基本的な操作と言えますが、開発ボードを手に入れた後、どのようにシリアルポートを操作しますか?シリアルポートを使用してデータを外部に送信するにはどうすればいいですか?
私がやったのはシリアルポートを通じて文字を送信して、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を閉じることです.