Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C rs485通信linux的设置端口_C_Linux_Configuration_Serial Port_Rs485 - Fatal编程技术网

C rs485通信linux的设置端口

C rs485通信linux的设置端口,c,linux,configuration,serial-port,rs485,C,Linux,Configuration,Serial Port,Rs485,我在设置rs485传输的良好参数时遇到问题。我已经在第四天工作了,我不知道为什么它不工作 我正在写一个程序,它将通过rs485与其他设备通信。我有一台带有I.MX6和Linux Linaro的小型计算机。当我尝试在我的minicomp上发送运行我的程序的特殊帧时,它会发送,但我的设备不负责。此外,当我用与我的程序中相同的正确帧从PC发送回显时,设备会响应。所以问题是正确配置了我的UART端口/dev/ttyUSB 我需要波特率115200和帧8位和1停止位 void SetUARTPort()

我在设置rs485传输的良好参数时遇到问题。我已经在第四天工作了,我不知道为什么它不工作

我正在写一个程序,它将通过rs485与其他设备通信。我有一台带有I.MX6和Linux Linaro的小型计算机。当我尝试在我的minicomp上发送运行我的程序的特殊帧时,它会发送,但我的设备不负责。此外,当我用与我的程序中相同的正确帧从PC发送回显时,设备会响应。所以问题是正确配置了我的UART端口/dev/ttyUSB

我需要波特率115200和帧8位和1停止位

void SetUARTPort()
{

    int errnum;
    ctrl485.flags |= SER_RS485_ENABLED;
    ctrl485.flags |= SER_RS485_RX_DURING_TX;
    ctrl485.delay_rts_before_send = 0;
    ctrl485.delay_rts_after_send = 0;


    status = ioctl(fd, TIOCSRS485, &ctrl485);
    if (status <0 )
    {
             printf("%s: Unable to configure port in 485 mode, status (%i)\n", dev, status);
             errnum = errno;
                  fprintf(stderr, "Value of errno: %d\n", errno);
                  fprintf(stderr, "Error opening file: %s\n", strerror( errnum ));
     }

    option.c_cflag = B115200 | CS8 | CSTOPB | CLOCAL ;
    option.c_iflag = 0;
    option.c_oflag = 0;
    option.c_lflag = 0;
    option.c_iflag = IGNPAR | IGNBRK;

    speed = B115200 ;
    tcgetattr(fd, &option);
    cfsetospeed(&option, speed); //TX baude rate
    cfsetispeed(&option, speed); // RX baude rate
    tcsetattr(fd, TCSANOW, &option); //set new serial config}
我想我尝试了很多东西,但我仍然不知道为什么它不起作用。 有人能帮我吗


cvanny.

可能存在硬件和/或布线问题以及配置(全双工与半双工模式)问题,您必须处理这些问题以及编码问题。。。这里有一个来自kernel.org的链接,提供了一些可能有用的示例用户代码:我注意到您使用的是USB,这是否意味着您使用的是USB到RS485转换器?如果是这样,它的规格可能会指示它将支持的波特率以及半/全双工配置只有少数串行端口驱动程序实际支持Linux RS485扩展。您看到的ioctl()错误清楚地表明您使用的驱动程序不是其中之一。此外,您的termios设置与POSIX不兼容,并且与tcgetattr()调用顺序不一致;看见“我有一台微型计算机”——供参考的微型计算机早在20世纪90年代就被弃用了,当时微处理器取代了它们。不要编造你自己的行话好吧,ioctl()的问题我已经解决了。我用POSIX标准更正了tcgetattr(),但我的设备仍然没有响应。我设置了115k2波特、8位、1开始位、1停止位、奇偶校验和半双工。目前我不知道问题出在哪里,我做错了什么。可能有硬件和/或布线问题,以及配置(全双工与半双工模式)以及编码问题。。。这里有一个来自kernel.org的链接,提供了一些可能有用的示例用户代码:我注意到您使用的是USB,这是否意味着您使用的是USB到RS485转换器?如果是这样,它的规格可能会指示它将支持的波特率以及半/全双工配置只有少数串行端口驱动程序实际支持Linux RS485扩展。您看到的ioctl()错误清楚地表明您使用的驱动程序不是其中之一。此外,您的termios设置与POSIX不兼容,并且与tcgetattr()调用顺序不一致;看见“我有一台微型计算机”——供参考的微型计算机早在20世纪90年代就被弃用了,当时微处理器取代了它们。不要编造你自己的行话好吧,ioctl()的问题我已经解决了。我用POSIX标准更正了tcgetattr(),但我的设备仍然没有响应。我设置了115k2波特、8位、1开始位、1停止位、奇偶校验和半双工。目前我不知道问题出在哪里,我做错了什么。
/dev/ttyUSB0: Unable to configure port in 485 mode, status (-1)
Value of errno:25. Inappropriate ioctl for device