厦门莫格电气自动化有限公司销售
Honeywell霍尼韦尔4DP7APXDH233
您迈开询价的一小步,我还您成功的一大步。
4DP7APXDH233
4DP7APXDH233
4DP7APXDH233
***步: 打开串口
调用open( ) 函数打开串口设备文件,若出错则返回- 1,成功则返回文件句柄。
#define UART1 /dev /ttySAC1
int fd;
fd = open( "UART1",O_***R) /* 以可读可写方式打开串口设备* /
第二步: 设置串口属性
函数tcsetattr ( ) 可以设置串口的结构属性,tcgetatt( ) 可以得到串口的结构属性。在termios 结构中,***重要的是c_cflag,用户通过对其进行赋值可以实现串口波特率、数据位、停止位、奇偶校验位等参数的设置。c_cc 数组中的两个变量VMIN 和VTIME 判断是否返回输入,c _cc[VTIME]设定字节输入时间计时器,c _cc[VMIN]设定满足读取功能的***低接收字节数。这两个变量的值要设定合理,才能保证串口的通信成功率。
int set_attr( int fd)
{
struct termios newtio,oldtio;
tcgetattr( fd,&oldtio) ;
cfsetispeed( &newtio,B9600) ; /* 设置读波特率为9600* /
cfsetospeed( &newtio,B9600) ; /* 设置写波特率为9600* /
memset( &newtio,0
, sizeof( newtio) )
;
newtio. c_cflag = CS8 | CREAD; /* 设置数据位为8 位并且使能接收* /
newtio. c_cflag & = ~ PARENB; /* 不进行奇偶校验* /
newtio. c_cflag & = ~ CSTOPB; /* 1 位停止位* /
newtio. c_cc[VMIN]= 1; /* 当接收到一个字节数据就读取* /
newtio. c_cc[VTIME]= 0; /* 不使用计时器* /
tcflush( fd,TCIOFLUSH) ; /* 刷清输入输出缓冲区* /
tcsetattr( fd,TCSANOW,&newtio) /* 使设置的终端属性立即生效* /
}
第三步: 串口读写,串口关闭
设置完通信参数后,就可以用标准的文件读写命令read( ) 和write( ) 操作串口了。***后在退出之前,用close( ) 函数关闭串口。
void rd_wr( )
{
write( fd,wbuf,10) ;
usleep( 500000) ; /* ***50 ms 等待下位机发送数据* /
read( fd, rbuf,10) ;
printf( "read string is %s \n", rbuf) ;
}
3 通信程序设计
ARM 与单片机的串口通信程序包括两方面: 一方面是作为上位机的ARM 的串口通信程序,另一方面是作为下位机的单片机的串口通信程序。在通信之前必须制定合理的通信协议以保证通信的可靠性和成功率。现约定双方通信协议如下:
( 1) 波特率为9600 bit /s,帧格式为1 - 8 - N - 1( 1 位起始位,8位数据位,无奇偶校验,1位停止位) ;( 2) 由于上位机ARM 的速度远远高于下位机单片机的速度,所以采用上位机主动联络,下位机等待的方式。在数据传送前ARM 先发送联络信号/0xaa,单片机收到后回答一个/0xbb,表示可以发送,否则继续联络;( 3) 单片机端可以有中断和查询方式收发串口数据。本文采用中断方式;( 4) ARM 处理器s3c2440 采用UART1 和单片机通信,UART0 则作为s3c2440 终端控制台。