精华内容
下载资源
问答
  • RS485串口驱动源代码
    2022-03-29 08:53:53

    1、前言

           串口驱动是最简单的一种驱动了,在Linux下一切设备都认为是文件,打开设备就像打开文件一样简单,直接上代码

    2、RS485.c

    //--------------------------------------------------------------------------------------------------
    // Include head files
    //--------------------------------------------------------------------------------------------------
    #include <stdio.h>
    #include <string.h>
    #include <fcntl.h> 
    #include <termios.h> 
    #include <unistd.h>
    #include <errno.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <sys/ioctl.h>
    #include <sys/socket.h>
    
    #include "RS485.h"
    
    //-------------------------------------------------------------------------------------------------
    // Private Definitions
    //-------------------------------------------------------------------------------------------------
    
    //-------------------------------------------------------------------------------------------------
    // Private Members
    //-------------------------------------------------------------------------------------------------
    
    
    //-------------------------------------------------------------------------------------------------
    // Private Functions
    //-------------------------------------------------------------------------------------------------
    static int SetAttributes(int fd, RS485PARA Rs485Para)
    {
        struct termios newtio;
    
        bzero(&newtio, sizeof(newtio));
    
        newtio.c_cflag |= CLOCAL | CREAD;
        newtio.c_cflag &= ~CSIZE;
    
        switch (Rs485Para.m_Bits)
        {
            case SEVEN:
                newtio.c_cflag |= CS7;
                break;
            case EIGHT:
                newtio.c_cflag |= CS8;
                break;
            default:
                newtio.c_cflag |= CS8;
        }
    
        switch (Rs485Para.m_Parity)
        {
            case O:
                newtio.c_cflag |= PARENB;
                newtio.c_cflag |= PARODD;
                newtio.c_iflag |= (INPCK);
                break;
            case E:
                newtio.c_iflag |= (INPCK);
                newtio.c_cflag |= PARENB;
                newtio.c_cflag &= ~PARODD;
                break;
            case N:
                newtio.c_cflag &= ~PARENB;
                break;
            default:
                newtio.c_cflag &= ~PARENB;
        }
    
        switch (Rs485Para.m_BaudRate)
        {
            case B_9600:
                cfsetispeed(&newtio, B9600);
                break;
            case B_19200:
                cfsetispeed(&newtio, B19200);
                break;
            case B_38400:
                cfsetispeed(&newtio, B38400);
                break;
            case B_57600:
                cfsetispeed(&newtio, B57600);
                break;
            case B_115200:
                cfsetispeed(&newtio, B115200);
                break;
            default:
                cfsetispeed(&newtio, B19200);
        }
    
        if (Rs485Para.m_Stop == ONE)
        {
            newtio.c_cflag &= ~CSTOPB;
        }
        else if (Rs485Para.m_Stop == TWO)
        {
            newtio.c_cflag |= CSTOPB;
        }
        else
        {
            newtio.c_cflag &= ~CSTOPB;
        }
    
        newtio.c_cc[VTIME] = 5;
        newtio.c_cc[VMIN] = 0;
    
    	tcflush(fd, TCOFLUSH);
    
        if ((tcsetattr(fd, TCSADRAIN, &newtio)) != 0)
        {
            printf("com set error:%s\n", strerror(errno));
            return -1;
        }
    
        return 0;
    }
    
    //-------------------------------------------------------------------------------------------------
    // Public Functions
    //-------------------------------------------------------------------------------------------------
    int RS485Open(const char* pDevname, RS485PARA Rs485Para)
    {
        int ret = 0;
    	int fd = 0;
    	int nZero = 0;
    
        if (NULL == pDevname)
        {
            printf("RS485 device name is null\n");
            return -1;
        }
    
        fd = open(pDevname, O_RDWR | O_NOCTTY | O_NDELAY | O_NONBLOCK);
    	
        if (fd > 0)
        {
            ret = SetAttributes(fd, Rs485Para);
    
            if (ret != 0)
            {
                printf("Set RS485 port failed, error=%s\n", strerror(errno));
                return -1;
            }
        }
        else
        {
            printf("Can't open the port %s,error=%s\n", pDevname, strerror(errno));
            return -1;
        }
    
        return fd;
    }
    
    int RS485Read(int fd, void* buf, int size)
    {
        int nleft;
        int nread;
        char* ptr = NULL;
    
        ptr = buf;
        nleft = size;
     
        while (nleft > 0)
        {
        	nread = read(fd, ptr, nleft);
            if (nread <= 0)
            {
    			break;
            }
                
            nleft -= nread;
            ptr += nread;
        }
    	
        return (size - nleft);
    
    }
    
    int RS485Write(int fd, const void* buf, int size)
    {
        int nleft = 0;
        int nwritten = 0;
        const char* ptr = NULL;
     	struct termios option;
    	
        ptr = buf;
        nleft = size;
     
        while (nleft > 0)
        {
        	nwritten = write(fd, ptr, nleft);
        	if (nwritten <= 0)
            {
    			break;
            }
    		
            nleft -= nwritten;
            ptr   += nwritten;
        }
    	
        return size;
    }
    
    int RS485Close(int fd)
    {
        if (fd > 0)
        {
            close(fd);
        }
        else
        {
            return -1;
        }
        
    
        return 0;
    }
    

    3、RS485.h

    #ifndef RS485_H
    #define RS485_H
    
    //-------------------------------------------------------------------------------------------------
    // Public Includes
    //-------------------------------------------------------------------------------------------------
    
    
    //-------------------------------------------------------------------------------------------------
    // Public Definitions
    //-------------------------------------------------------------------------------------------------
    enum BaudRate
    {
        B_9600   = 0,
        B_19200  = 1,
        B_38400  = 2,
        B_57600  = 3,
        B_115200 = 4,
        B_40000  = 5,
        B_25000  = 6,
    };
    
    enum Bits
    {
        SEVEN = 7,
        EIGHT = 8,
    };
    
    enum Parity
    {
        O = 0,
        E = 1,
        N = 3,
    };
    
    enum Stop
    {
        ONE = 1,
        TWO = 2,
    };
    
    
    //-------------------------------------------------------------------------------------------------
    // Public Types
    //-------------------------------------------------------------------------------------------------
    typedef struct tag_RS485PARA
    {
        unsigned char m_BaudRate;
        unsigned char m_Bits;
        unsigned char m_Parity;
        unsigned char m_Stop;
    }RS485PARA;
    
    //-------------------------------------------------------------------------------------------------
    // Public Functions
    //-------------------------------------------------------------------------------------------------
    
    /**
     * Description: open a uart , rturn the fd
     *
     * @param pDevname          [in]  uart name with path
     * @param Rs485Para         [in]  uart parater which run correctly 
     * @return                  [out] fd value
     */
    extern int RS485Open(const char *pDevname, RS485PARA Rs485Para);
    
    /**
     * Description: read data to buf from fd
     *
     * @param fd                [in]  uart fd
     * @param buf               [in]  store data from uart 
     * @param size              [in]  data len from uart  
     * @return                  [out] data len to be read
     */
    extern int RS485Read(int fd, void* buf, int size);
    
    /**
     * Description: read data to buf from fd
     *
     * @param fd                [in]  uart fd
     * @param buf               [in]  store data from uart 
     * @param size              [in]  data len of buf  
     * @return                  [out] data len to be writen
     */
    extern int RS485Write(int fd, const void *buf, const int size);
    
    /**
     * Description: read data to buf from fd
     *
     * @param fd                [in]  uart fd
     * @return                  [out] RET_STATUS_OK if OK
     */
    extern int RS485Close(int fd);
     
     
    #endif 
    

    4、总结

    注意设置的方式是非阻塞,500毫秒等待时间,在外部程序中使用select/epool等方式去调用read读取数据就可以了

    更多相关内容
  • RS485驱动程序.rar

    2019-08-04 18:30:06
    基于STM32F103的RS485驱动程序,稳定使用的程序版本,!
  • USB转RS485驱动程序

    2018-08-10 15:09:24
    USB转RS485驱动程序,里面有详细步骤,经过本人实验,是可用的
  • usb转rs485驱动程序

    2021-07-26 03:00:32
    usb转rs485驱动程序是一款专业的USB编程电缆驱动,通过电脑的USB接口模拟成传统的串行口,实现编程电缆和plc等设备的连接通信。如果您的电脑缺少这款驱动,下载安装一下就可以正常使用了,具体的安装教程可以参考...

    usb转rs485驱动程序是一款专业的USB编程电缆驱动,通过电脑的USB接口模拟成传统的串行口,实现编程电缆和plc等设备的连接通信。如果您的电脑缺少这款驱动,下载安装一下就可以正常使用了,具体的安装教程可以参考下文,需要的朋友赶快下载吧!

    10612752eeaced30b04622e7e9f094f8.png

    软件功能

    1、支持的操作系统Windows2000/Windows XP

    2、完全兼容USB V1.1和USB CDC V1.1规范

    3、USB总线供电(非隔离电缆)、或USB总线供电与PLC的编程口同时供电(隔离型电缆)

    4、波特率:300bps~1Mbps自动适应

    5、每台PC只支持一根USB编程电缆

    使用说明

    将USB转换线插入电脑的USB接口中,系统会提示检测到新设备并出现新硬件添加向导,选择从列表或指定位置安装,手动安装,找到刚才驱动的解压目录,让WINDOWS自动搜索更新驱动即可。

    usb转rs485驱动安装教程

    驱动程序的安装非常简单,只需按提示进行即可,以Windows XP为例,按以下步骤进行:

    1、 打开将要连接USB编程电缆的电脑电源,并确认电脑的USB口已经启动并正常工作。

    2、 将USB编程电缆插入电脑的USB接口,Windows将检测到设备并运行添加新硬件向导帮助你设置新设备,插入驱动程序光盘并单击下一步继续。

    如果Windows没有提示找到新硬件,那么在设备管理器的硬件列表中,展开“通用串行总线控制器”,选择带问号的USB设备,单击鼠标右键并运行更新驱动程序。

    10612752eeaced30b04622e7e9f094f8.png

    3、 Windows将检测到安装信息,显示“DGYCGK USB Composite Device ”设备,并出现如下没有通过Windows徽标测试的信息框,单击“仍然继续”。

    cedc1df37d373e997202699b41976854.png

    4、 继续安装,让Windows拷贝驱动程序文件到你的硬盘。

    b2b9e4b4a53cbb409cf9d33c89347953.png

    5、 当Windows显示完成找到新硬件向导,单击“完成”结束安装。

    83712ab52683242f258310373b78b854.png

    6、 安装完成后,请确认在Windows的“开始\设置\控制面板\系统\硬件\设备管理器”菜单的“端口(COM和LPT)”展开条目中出现“DGYCGK USB to UART Bridge Controller(COMx)”,这个COMx就是USB编程电缆使用的COM口号。以后每次使用只要插入编程电缆就会出现该COM口,你只需在编程软件或通信软件等应用软件中选中该COM口即可。

    ece9e1ca2cf01ca19c94984b15d89dfb.png

    展开全文
  • 基于ARM与WINCE的RS485驱动程序设计.pdf
  • usb转rs485驱动

    2014-05-03 17:53:13
    usb转rs485驱动
  • 先安装驱动程序,然后更新驱动程序,选择浏览计算机以查找驱动程序,手动安装驱动程序软件,从计算机的设备程序驱动列表中选取,显示兼容硬件,选择Prolific USB-to-Serial Comm Port,单击下一步安装。
  • 用于64位的win10上的RS485转usb驱动, 楼主实测可用,带详细教程
  • RS485驱动

    千次阅读 2015-12-18 16:10:45
    一、原理 RS232用两根线实现全双工,两根线各做各的,互不影响,可以同时进行;... 1、驱动程序中已经含有对半双工情况下的接受切换,驱动程序会根据你读或写的动作,自动进行切换。这种情况下,RS485的编程就与RS2

    一、原理
    RS232用两根线实现全双工,两根线各做各的,互不影响,可以同时进行;RS485虽然可以用四根线实现全双工,但是实际应用中比较少见,更常见的是只用两根线实现半双工,这样一来,就涉及到“收状态”和“发状态”的切换,这一切换又涉及两种情况:
    1、驱动程序中已经含有对半双工情况下的接受切换,驱动程序会根据你读或写的动作,自动进行切换。这种情况下,RS485的编程就与RS232完全没有区别。
    2、驱动程序不带自动切换,此时,为了完成切换,必须使用额外的GPIO连接RS485收发模块的接受使能端,在接受、发送数据之前,首先对使能端置位,使之处于正确的“接收”或“发送”状态。

    二、支持平台
    此文是基于TI芯片AM1808平台的RS485驱动,由于他们的软串口不支持485串口数据传输,所以自己写了一个简单的485驱动,此驱动只用来简单的控制485的使能管脚,拉高或拉低电平,满足读写。

    1.rs485驱动

    #include <linux/fs.h>
    #include <linux/major.h>  
    #include <linux/blkdev.h>
    #include <linux/capability.h>
    #include <linux/smp_lock.h>
    #include <asm/io.h>
    #include <asm/uaccess.h>
    #include <linux/module.h>
    #include <linux/delay.h>
    #include <linux/kernel.h>
    #include <linux/sched.h>
    #include <linux/interrupt.h>     /* for in_interrupt */
    #include <linux/timer.h>
    #include <linux/init.h>
    #include <linux/version.h>
    #include <asm/irq.h>
    #include <linux/gpio.h>
    #include <linux/moduleparam.h>
    #include <linux/list.h>
    #include <linux/cdev.h>
    #include <linux/proc_fs.h>
    #include <linux/mm.h>
    #include <linux/seq_file.h>
    #include <linux/ioport.h>
    #include <linux/io.h>
    #include <linux/device.h>
    #include <linux/ioctl.h>
    
    #define RS485DE     GPIO_TO_PIN(2, 15)//lct add 2015/11/19
    #define nREV      0
    #define nSENT     1
    #define LAST_BYTES_FIFO_TO_SHIFTER 1
    //#define RS485SENTBEGIN  0  
    //#define RS485SENTOVER   1
    //ioctl函数传参的时候,命令字cmd最好不要自己定义宏,内核会过滤掉不合法的cmd,因为cmd分为4个部分,type,number,direction,size。自己定义的cmd没有这四个部分,内核直接过滤掉你的ioctl请求,所以ioctl根本不会到驱动,在应用层调用的时候就被返回错误了。
     #define DRIVERNAME  "rs485driver"
    
    static int rs485_open(struct inode*, struct file *);
    static int rs485_close(struct inode*, struct file *);
    static long rs485_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
    #ifdef DEBUG_WG
    #define PRIN_DEBUG printk
    #else
    #define PRIN_DEBUG
    #endif
    
    static         dev_t  dev;
    static struct  cdev   cdev;
    static struct  class  *rs485_class = NULL;
    
    static struct file_operations rs485_ctl_fops =
    {
         .owner = THIS_MODULE,
         .open  = rs485_open,
         .release = rs485_close,
         .unlocked_ioctl = rs485_ioctl,
    };
    
    //struct rs485de_ctl
    //{
    //     long BaudRate;     //19200
    //     int parity;               // 0
    //     int startBits;          // 1
    //     int dataBits;          // 8
    //     int stopBits;          // 1
    //     long count;          //  15字节
    //};
    
    //struct rs485de_ctl *dep;
    
    static int __init rs485_init(void)
    {
    
         int result;
    
         result = alloc_chrdev_region(&dev, 0, 1, DRIVERNAME);
         if(result < 0){
             printk("Error registering rs485 character device\n");
             return -ENODEV;
         }
         printk(KERN_INFO "rs485 major#: %d, minor#: %d\n", MAJOR(dev), MINOR(dev));
    
         cdev_init(&cdev, &rs485_ctl_fops);
         cdev.owner = THIS_MODULE;
         cdev.ops = &rs485_ctl_fops;
    
         result = cdev_add(&cdev, dev, 1);
         if(result){
             unregister_chrdev_region(dev, 1);
             printk("Error adding rs485.. error no:%d\n",result);
             return -EINVAL;
         }
         rs485_class = class_create(THIS_MODULE, DRIVERNAME);
         device_create(rs485_class, NULL, dev, NULL, DRIVERNAME);
    
         printk(DRIVERNAME " initialized\n");
    
         return 0;
    }
    
    static int rs485_open(struct inode*inode, struct file *filp)
    {         
         int status;
         printk("=======%s\n", __func__);
    
         status = gpio_request(RS485DE, "rs485 enable\n");
         printk("====status=%d\n", status);
         if (status < 0) {
              gpio_free(RS485DE);
              return status;
         }
    
         //set 485_DE/RE as output and set it to be low level as receive
         gpio_direction_output(RS485DE, 0);
         return 0;
    }
    
    static int rs485_close(struct inode*inode, struct file *filp)
    {
         printk("=======%s\n", __func__);
         gpio_free(RS485DE);
         return 0;
    }
    
    void set_rs485de_sent(void)
    {
         printk("=======%s\n", __func__);
         //set 485_DE/RE as output and set it to be high level as send
         gpio_direction_output(RS485DE, 0);
         gpio_set_value(RS485DE, 1);
    }
    
    void set_rs485de_receive(void)
    {
         //set 485_DE/RE as output and set it to be low level as receive
         gpio_direction_output(RS485DE, 0);
         gpio_set_value(RS485DE, 0);
    }
    
    //计算切换电平的延时时间,主要跟起始位,校验位,数据位,停止位
    //void read_delay_and_clr_de(void)
    //{
    //     unsigned int i;
    //     unsigned int delay_time_us;
    //     delay_time_us=(1000000/dep->BaudRate)+1;
    //     delay_time_us=delay_time_us*(dep->parity+dep->stopBits+dep->dataBits+dep->startBits)*LAST_BYTES_FIFO_TO_SHIFTER;
    //     printk("delay time is %dus\n",delay_time_us);    
    //
    //     for(i=0;i<delay_time_us;i++)
    //          udelay(1);
    //     set_rs485de_receive();    
    //}
    
    static long rs485_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
    {
         int ret = 0;
    
      switch(cmd)
      {
           case 0:
                 set_rs485de_sent();          
                 break;
           case 1:
                 set_rs485de_receive();    
                 break;
           default:
                 ret=-1;
    
                 break;
      }     
         return ret;
    }
    
    static void __exit rs485_exit(void)
    {
         //printk("=======%s\n", __func__);
         printk("rs485 chrdev exit!\n");
            cdev_del(&cdev);
            unregister_chrdev_region(dev, 1);
            device_destroy(rs485_class, dev);
            class_destroy(rs485_class);
    }
    
    MODULE_LICENSE("GPL");
    module_init(rs485_init);
    module_exit(rs485_exit);
    

    注意:在这个rs485驱动调试过程中,遇到的最大的问题就是电平切换后的延时时间的计算,
    delay_time_us=(1000000/dep->BaudRate)+1;
    delay_time_us=delay_time_us*(dep->parity+dep->stopBits+dep->dataBits+dep->startBits)*LAST_BYTES_FIFO_TO_SHIFTER;

    为了不增加驱动负担,可以把延时时间计算好之后,直接在用户空间调用,比如usleep(8500);

    2.测试程序

    #include <stdio.h>
    #include <string.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <errno.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <termios.h>
    #include <stdlib.h>
    #include <signal.h>
    #include <sys/time.h>
    
    int openport(char *strDev)
    {
    
         int fd = open( strDev, O_RDWR|O_NONBLOCK);//O_NDELAY |O_NONBLOCK|O_NOCTTY
    
         if(fd==-1)
         {
             printf("Open Serial Port Device %s error no %d\n",
                    strDev , fd );
             return 0;
         }
         if(fcntl(fd, F_SETFL, 0)<0)
            printf("fcntl failed!\n");
        else
            printf("fcntl=%d\n",fcntl(fd, F_SETFL,0));
         //测试是否为终端设备
         if(isatty(STDIN_FILENO) == 0)
             printf("standard input is not a terminal device\n");
         else
             printf("isatty success!\n");
         printf("fd-open=%d\n",fd);
         return fd;
    }
    
    int setport(int fd, int baud, int databits, int stopbits, int parity)
    {
        int baudrate;
        struct termios newtio;
    
        switch(baud)
        {
        case 300:
            baudrate=B300;
            break;
        case 600:
            baudrate=B600;
            break;
        case 1200:
            baudrate=B1200;
            break;
        case 2400:
            baudrate=B2400;
            break;
        case 4800:
            baudrate=B4800;
            break;
        case 9600:
            baudrate=B9600;
            break;
        case 19200:
            baudrate=B19200;
            break;
        case 38400:
            baudrate=B38400;
        case 57600:
            baudrate=B57600;
            break;
        case 115200:
            baudrate=B115200;
            break;
        default :
                baudrate=B9600;
        break;
        }
    
        tcgetattr(fd,&newtio);
        bzero(&newtio,sizeof(newtio));
        newtio.c_cflag &= ~CSIZE;
    
        switch (databits) //设置数据位数
        {
        case 7:
            newtio.c_cflag |= CS7; //7位数据位
            break;
        case 8:
            newtio.c_cflag |= CS8; //8位数据位
            break;
        default:
            newtio.c_cflag |= CS8;
            break;
        }
    
        switch (parity) //设置校验
        {
        case 'n':
        case 'N':
            newtio.c_cflag &= ~PARENB;   /* Clear parity enable */
            newtio.c_iflag &= ~INPCK;     /* Enable parity checking */
            break;
        case 'o':
        case 'O':
            newtio.c_cflag |= (PARODD | PARENB); /* 设置为奇效验*/
            newtio.c_iflag |= INPCK;             /* Disnable parity checking */
            break;
        case 'e':
        case 'E':
            newtio.c_cflag |= PARENB;     /* Enable parity */
            newtio.c_cflag &= ~PARODD;   /* 转换为偶效验*/
            newtio.c_iflag |= INPCK;       /* Disnable parity checking */
            break;
        case 'S':
        case 's':  /*as no parity*/
            newtio.c_cflag &= ~PARENB;
            newtio.c_cflag &= ~CSTOPB;break;
        default:
            newtio.c_iflag &= ~INPCK;     /* Enable parity checking */
            break;
        }
    
        switch (stopbits)//设置停止位
        {
        case 1:
            newtio.c_cflag &= ~CSTOPB;  //1
            break;  //请到HTTp://www.timihome.net访问
        case 2:
            newtio.c_cflag |= CSTOPB;  //2
            break;
        default:
            newtio.c_cflag &= ~CSTOPB;
            break;
        }
    
        newtio.c_cc[VTIME] = 0;
        newtio.c_cc[VMIN] = 13;
        newtio.c_cflag   |=   (CLOCAL|CREAD);
        newtio.c_oflag|=OPOST;
        newtio.c_iflag   &=~CRTSCTS;
        newtio.c_iflag   &=~(IXON|IXOFF|IXANY);
        cfsetispeed(&newtio,baudrate);
        cfsetospeed(&newtio,baudrate);
        tcflush(fd, TCIFLUSH);
    
        if (tcsetattr(fd,TCSANOW,&newtio) != 0)
        {
            return -1;
        }
    
        return 0;
    }
    
    int readport(int fd, char *buf, int maxLen)//读数据,参数为串口,BUF,长度
    {
        char szBuf[15] = {0};
        int nLen = 0;
    
        nLen = read(fd, buf, maxLen);
    
        if(nLen > 0)
        printf("\n nLen = %d\n", nLen);
    
        else if(nLen < 0)
        {
            printf("Read uart data failed  \r\n");
            return -1;
        }
        return nLen;
    }
    
    int writeport(int fd, char *buf, int len)  //发送数据
    {
        int wrnum = 0;
    
        wrnum = write(fd, buf, len);
    
        if(wrnum == len)
        {
            printf("write uart data success  \r\n");
            return wrnum;
    
        }
        else
        {
            printf("write uart data failed  \r\n");
            return -1;
        }
    
    }
    
    // 关闭串口
    void closeport(int fd)
    {
        close(fd);
    }
    
    int main(int argc, unsigned long *argv[])
    {
         int ret, i;
         int fd_485, fd_uart;
         int write_buf_size, read_buf_size;
         char write_buf[15] = {0X69, 0XA1, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XC8};
             char read_buf[15];
    
         fd_uart = openport("/dev/ttySU4");
         if(fd_uart==-1)
         {
              perror("The /dev/ttySU4 open error.");
              exit(1);
         }
    
         if((fd_485=open("/dev/rs485driver",O_RDONLY | O_NONBLOCK))<0)
         {
              perror("can not open device rs485driver\n");
              exit(1);
         }
         ret = setport(fd_uart, 19200, 8, 1, 'N');
         if(ret < 0)
         {
                  printf("Set Serial Port failed .\r\n");
                  return 0;
         }
    
         while(1)
         {              
              ret=ioctl(fd_485,0,NULL);//send
              write_buf_size=writeport(fd_uart,write_buf,15);
              if(write_buf_size<0)
                   return;
              usleep(8320);
              ioctl(fd_485,1,NULL);
              read_buf_size=read(fd_uart,read_buf,15);
    
              if(read_buf_size>0)
              {
                   printf("\n");
                   printf("read_buf_size len:%d",read_buf_size);
                   printf("      ");
                   for(i=0;i<read_buf_size;i++)
                        {
                        printf("0x%02x",read_buf[i]);
                        }
                   printf("\n");
              }else
                   printf("Timeout\n");
              printf("/dev/ttySU4 has received %d chars!\n",read_buf_size);    
              fflush(stdout);                             
         }
         closeport(fd_uart);
    
         return 0;
    }
    

    三。小结

    以上驱动程序和测试程序比较简单,只适合在AM1808平台使用,希望可以对同样在此平台开发的朋友们有点帮助吧。

    展开全文
  • USB转RS485串口驱动

    2021-05-17 18:51:59
    USB转RS485串口驱动是一款非常专业的USB转RS485驱动安装程序。这款软件适合WIN7/WIN XP/LINUX等系统,能够帮助用户一键解决USB无法转换成RS485的问题,需要的小伙伴可下载体验。【安装方法】1、在安装前可以先看看...

    USB转RS485串口驱动是一款非常专业的USB转RS485驱动安装程序。这款软件适合WIN7/WIN XP/LINUX等系统,能够帮助用户一键解决USB无法转换成RS485的问题,需要的小伙伴可下载体验。

    8ad1902ed2a20958b3d8d8546918b108.png

    【安装方法】

    1、在安装前可以先看看使用说明再安装。将USB转换线插入电脑的USB接口中,系统会提示检测到新设备并出现新硬件添加向导,选择从列表或指定的位置安装,手动安装,找到刚刚驱动的解压目录,让WINDOWS自动搜索更新驱动就OK了。

    2、最后看到设备管理器中出现COM7端口号表示已成功完成安装。根据硬件添加向导一步步的引导安装驱动

    【支持系统】

    Windows 8.1

    Windows 8.1 x64

    Windows 8

    Windows 8 x64

    Windows Server2012

    Windows Server 2008 R2

    Windows 7

    Windows 7 x64

    Windows Server 2008

    Windows Server 2008 x64

    Windows Vista

    Windows Vista x64

    Windows Server 2003

    Windows Server 2003 x64

    Windows XP

    Windows XP x64

    Windows ME

    Windows 98

    Linux

    Mac OS X

    Mac OS 9

    Mac OS 8

    Windows CE.NET (Version 4.2 and greater)

    Android

    Windows RT

    展开全文
  • linux下rs485驱动

    2011-11-21 11:20:35
    linux下rs485驱动,可支持115200波特率的数据的收发
  • 宇泰 UT-890A USB转RS485 422驱动程序zip,提供“宇泰 UT-890A USB转RS485 422驱动程序”免费资料下载,本文包含宇泰 UT-890A USB转RS485 422驱动程序文件,解压即可使用,可供学习使用。
  • 下面重点说一下在Linux平台上,应用程序该如何断帧,以及测试程序的编写;RS485应用底层最核心的部分就是断帧,连续接收数据,字节之间的间隔时间是很短的,如果超出波特率的设定时间,认为报文分帧了。 1、打开设备...
  • 包里面包含USB转232、485、422驱动程序,驱动装不上的可以查看安装说明。 尤其是转485/422,在其他地方下载驱动更新后仍无法使用的,可以试试这个。
  • usb转rs485

    2021-05-17 18:50:42
    从历史记录上的整体反馈,这款软件能够比较...usb转rs485软件功能1、支持的操作系统Windows2000/Windows XP2、完全兼容USB V1.1和USB CDC V1.1规范3、USB总线供电(非隔离电缆)、或USB总线供电与PLC的编程口同时供电(...
  • RS485_422通讯线驱动.rar

    2020-08-20 15:42:01
    usb转rs485驱动程序,通过电脑的USB接口模拟成传统的串行口,实现编程电缆和plc等设备的连接通信。如果您的电脑缺少这款驱动,下载安装一下就可以正常使用了
  • 2.2RS485驱动设计设计中使用ARM9处理器S3C2440内部集成的UART外设和RSM485模块构建而成,其驱动程序与RS232驱动程序相比多了一个通信方向控制引脚的控制,所以在Linux操作系统中,完全可以借助内核的串口驱动添加...
  • 003-RS485驱动

    2021-02-01 13:55:10
    完整的485测试程序 包含电路图 程序注释详细
  • RS485 驱动调试

    千次阅读 2018-10-26 15:24:50
    基于i.MX6Q平台,调试RK485,出现下面两个问题:  1)在115200波特率下,RK485必须先发送数据才能接收到数据,不先发送的话,不能接收数据;  2)在9600波特率下,不...分析问题:跟踪驱动代码,流控逻辑问题;...
  • 驱动包含 1.HXSP-2108D USB To RS-232 2.HXSP-2108F USB To RS-485 3.HXSP-2108G USB To RS-485 RS-422 4.PL2303 ReadMe [Root] Driver for Windows operating system: PL-2303 Driver Installer PL-2303 Vista...
  • 宇泰 UT-2003A USB转RS485RS422驱动程序zip,提供“宇泰 UT-2003A USB转RS485RS422驱动程序”免费资料下载,本文包含宇泰 UT-2003A USB转RS485RS422驱动程序文件,解压即可使用,可供学习使用。
  • RS485转USB 驱动

    2021-05-10 23:30:44
    支持以下 型号 CH340 CH341 FT232RL PL2303 Y-105
  • 13_STM32Cubeide开发_RS485总线驱动

    千次阅读 2022-03-29 14:37:52
    RS485总线通讯
  • 捷顺USB-RS485驱动

    2012-12-29 18:16:11
    捷顺USB-RS485驱动程序,适用于捷顺所有485设备USB-RS485驱动程序
  • usb转485通信,相当于电脑加了485芯片,有了485芯片就具备了通信的功能 1.485驱动程序免费下载 https://pan.baidu.com/s/1ELZR4Y4gXqQheSqXeAWU3Q?pwd=pear 提取码: pear 2....Windows应该检测驱动程序
  • 宇泰 RS485集线器 UT-2204 驱动程序zip,提供“宇泰 RS485集线器 UT-2204 驱动程序”免费资料下载,本文包含宇泰 RS485集线器 UT-2204 驱动程序文件,解压即可使用,可供调试和学习使用。
  • PL-2303&PL-2303HX驱动程序,支持Windows XP Windows 7 Windows 10系统 ,可解决Windows 10系统上PL2303已停产和感叹号问题。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,134
精华内容 1,253
关键字:

rs485驱动程序