我们平时用232,485对应用开发没有什么区别。唯一的不同的是485是半双工(在同一时刻只能发或者收)。引脚控制DE/RE。
因此在控制485通信时要控制DE/RE引脚。而不管是232还是485,都是接在芯片的串口引脚上。
“他妈的CSDN破编辑器!!!!!!!!!!!烂得要死,别的不说。。。图片都不能上传了”
各位如需要去空间图片中打rs485标题的图片
1. 图中的DE接在一个GPIO上。高电平发送,低电平接收。所以写一个简单的GPIO驱动。
int ctrlbits,value;
int fd1=open( "/dev/avt_gpio", 0 ); //gpg10 13 is send 14 is rev
if( fd1 < 0 )
{
printf( "Open avt_gpio fail.\n" );
//return -1;
}
if(val)
ctrlbits = 14; //rev
else
ctrlbits = 13; //send
ioctl( fd1, ctrlbits, &value );
至于设置波特率,数据位,停止位就不讲了:
tcflush(fd, TCIOFLUSH);
cfsetispeed(&Opt, speed_arr[i]);
cfsetospeed(&Opt, speed_arr[i]);
status = tcsetattr(fd, TCSANOW, &Opt);
发送:
ret = write( l_hand_rs485, buf,length);
2. 有的硬件工程师朋友会把DE/RE引脚如此到串口的CTSRTS引脚上
那连GPIO驱动都不用写了。直接使用
struct termios options;
tcgetattr(fd, &options);
先查询其它的属性
//options.c_cflag |= CRTSCTS; /* Also called CRTSCTS*/
/* set the input options */
改变这个
tcsetattr(fd, TCSANOW, &options);
你懂的!
至于串口的驱动,隔那么久时间,架构都不清楚了。。等有时间再写出来吧。希望能帮到同志们。