RS485通信的时候,再应用程序中,可以进行对485设置为自动方向切换模式。防止由于我们手动切换引脚时,存在的时间问题,因为我们手动切换的时候,每次写串口的时候,都要将引脚拉高或拉低来切换成写模式,调用完写串口的函数后,就要去进行延时一段时间,确保数据在底层硬件层传输完毕了,然后将引脚拉高或拉低在切换到读状态,这样由于你计算的时间的误差性于你拉高拉低引脚的时间误差性都会导致485的通信不稳定。所以我们如果采用485的自动方向切换模式,将会将这个通信误差缩小,当每次写串口时,他自己就会切换为写状态,写完后,又自动切换为读状态。
在arm linux上的485自动切换的应用程序操作如下解释:
打开串口的方法,与设置串口的属性等,更正常我们在应用程序中使用串口一样,一样的方式进行打开串口就可以。
打开串口之后,我们要进行下一面一部,设置一个关于RS485自动方向模式切换要用的结构体和几个宏,这个结构体将来在填充好后,用ioctl函数写入到所打开的串口文件描述符中即可。
#define TIOCGRS485 0x542E
#define TIOCSRS485 0x542F
struct my_serial_rs485 //关于485自动方向切换模式要设置的内容的结构体。
{
unsigned longflags;/* RS485 feature flags */
#define SER_RS485_ENABLED(1 << 0)/* If enabled */
#define SER_RS485_RTS_ON_SEND(1 << 1)