ARM linux 串口接收

C语言read函数的使用以及串口初始化的调用

废话不多说,直接上代码,有疑问可以看我之前的文章

https://blog.csdn.net/m0_38053897/article/details/108816643

https://blog.csdn.net/m0_38053897/article/details/108769501

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <errno.h>

int set_opt(int,int,int,char,int);
void main()
{
	int fd,wr_static,i=10;
	char *uart3 = "/dev/ttySAC3";
	char buffer[512] ;
	char *uartOut ="please input you code :\r\n";
	size_t nByte;
	memset(buffer,0,sizeof(buffer));
	
	
	if((fd = open(uart3, O_RDWR|O_NOCTTY|O_NDELAY))<0){
		printf("open %s is failed",uart3);
	}
	else{
		printf("open %s is success\n",uart3);
		set_opt(fd, 115200, 8, 'N', 1); 
		while(i--)
		{
			wr_static = write(fd,uartOut, strlen(uartOut));
			if(wr_static<0)
				printf("write failed\n");
			else{
				printf("wr_static is %d\n",wr_static);
				while (1)
				{
					while ((nByte=read(fd,buffer,512) )>0)
					{
						buffer[nByte+1]='\0';
						write(fd,buffer,strlen(buffer));
						memset(buffer,0,strlen(buffer));
						nByte = 0;
					}
					
				}
				
			}
			sleep(1);
		}
	}
	close(fd);
}


int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop)
{
	struct termios newtio,oldtio;
	if  ( tcgetattr( fd,&oldtio)  !=  0) { 
		perror("SetupSerial 1");
		return -1;
	}
	bzero( &newtio, sizeof( newtio ) );
	newtio.c_cflag  |=  CLOCAL | CREAD;
	newtio.c_cflag &= ~CSIZE;

	switch( nBits )
	{
	case 7:
		newtio.c_cflag |= CS7;
		break;
	case 8:
		newtio.c_cflag |= CS8;
		break;
	}

	switch( nEvent )
	{
	case 'O':
		newtio.c_cflag |= PARENB;
		newtio.c_cflag |= PARODD;
		newtio.c_iflag |= (INPCK | ISTRIP);
		break;
	case 'E': 
		newtio.c_iflag |= (INPCK | ISTRIP);
		newtio.c_cflag |= PARENB;
		newtio.c_cflag &= ~PARODD;
		break;
	case 'N':  
		newtio.c_cflag &= ~PARENB;
		break;
	}

	switch( nSpeed )
	{
	case 2400:
		cfsetispeed(&newtio, B2400);
		cfsetospeed(&newtio, B2400);
		break;
	case 4800:
		cfsetispeed(&newtio, B4800);
		cfsetospeed(&newtio, B4800);
		break;
	case 9600:
		cfsetispeed(&newtio, B9600);
		cfsetospeed(&newtio, B9600);
		break;
	case 115200:
		cfsetispeed(&newtio, B115200);
		cfsetospeed(&newtio, B115200);
		break;
	case 460800:
		cfsetispeed(&newtio, B460800);
		cfsetospeed(&newtio, B460800);
		break;
	default:
		cfsetispeed(&newtio, B9600);
		cfsetospeed(&newtio, B9600);
		break;
	}
	if( nStop == 1 )
		newtio.c_cflag &=  ~CSTOPB;
	else if ( nStop == 2 )
	newtio.c_cflag |=  CSTOPB;
	newtio.c_cc[VTIME]  = 0;
	newtio.c_cc[VMIN] = 0;
	tcflush(fd,TCIFLUSH);
	if((tcsetattr(fd,TCSANOW,&newtio))!=0)
	{
		perror("com set error");
		return -1;
	}
//	printf("set done!\n\r");
	return 0;
}


 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
串口ARM Linux系统中作为一种常见的通信方式,广泛应用于开发、调试和其他工程操作。本文将从“用户怎样在ARM Linux系统上进行串口调试?”这个问题入手,介绍串口的基本概念、通信类型、奇偶校验位等一些重要规范,以及在ARM Linux系统中进行串口调试时常见的问题、解决方法等内容。 首先,我们来看一下串口的基本概念。串口是一种同步通信方式,也称为“串行通信”,是一种在同一时间内仅传输一个字节或几个字节的数据的通信方式,与并口的“并行通信”相对。串口一般包括两条数据线:TXD(发送数据线)和RXD(接收数据线),以及两条控制线:RTS(即请求发送)和CTS(即清除发送)。通常,传输数据时由发送方将数据一位一位地发送,接收方接收并组合成完整的数据。串口的优点是可以走长线,适合远距离通信。由于许多机器都不带有串口,我们需要一些适配器(USB转串口适配器)来进行通信。 在进行ARM Linux系统中的串口调试时,需要了解一些串口的基本规范。其中包括波特率、数据位、停止位、奇偶校验位等。在Linux中,设置串口规范主要通过命令行或在运行时修改tty驱动程序来实现。在ARM Linux中,我们可以使用stty命令行工具来设置串口规范。stty命令行可以用来查看和设置串口的各种属性,这些属性包括波特率、数据位、停止位、奇偶校验位等,还可以设置流控制方式等。 接下来,我们来看一下在ARM Linux系统中进行串口调试时常见的问题及其解决方法。1. 数据发送不成功:可能是串口的波特率、数据位、停止位或奇偶校验位设置错误,或者硬件通信线路出现问题。解决方法:检查各项参数设置是否正确,并检查通信线路是否连接正确,排除硬件故障。2. 接收数据错误或丢失:可能是硬件通信线路出现问题,或是通信过程中出现误码,导致数据接收错误或丢失。解决方法:检查通信线路是否连接正确,以及数据接收是否存在丢包等问题。如果可能,可以尝试更换硬件设备,或进行软件升级。3. 串口卡死或崩溃:可能是系统内核出现问题,或是驱动程序出现故障。解决方法:重启系统或重新安装驱动程序,并检查系统内核是否存在异常运行的情况。 总的来说,进行ARM Linux系统中的串口调试需要掌握一些比较基本的规范、属性等,同时还需要注意一些常见的问题,并随时进行排查和解决。只有对这些知识进行深入学习和实践,才能更好地实现串口通信的功能,使得ARM Linux系统更加可靠和高效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

T触发器

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

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

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

打赏作者

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

抵扣说明:

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

余额充值