精华内容
下载资源
问答
  • 注意:电脑接口始终是 针 的!这样,就需要一根 两端 都是 孔 的 串口线。检测电脑的串口是否正常:如果只有1台电脑,可以 短接 串口 的 2、3针(不过,小心烧坏了 串口!)这时可以用 串口调试工具 发送数据,如果 ...

    串口调试工具 可以用来调试 串口通信程序。

    这时:串口调试工具 作为一端,串口通信程序 作为另外一端。

    调试时,一端发送,另外一端接收。

    多机情况下,用串口线 连接 2台电脑就可以了。注意:电脑接口始终是 针 的!这样,就需要一根 两端 都是 孔 的 串口线。

    检测电脑的串口是否正常:如果只有1台电脑,可以 短接 串口 的 2、3针(不过,小心烧坏了 串口!)

    这时可以用 串口调试工具 发送数据,如果 串口功能正常,串口调试工具 的接收窗口 会有数据 回显;否则,串口功能不正常。

    当然,1台电脑也可以用 串口调试工具 来调试 串口通信程序,这时 就不需硬件,但需要 虚拟串口软件工具,原理 同上。

    如果 需要 上述 涉及 的软件工具,可以 联系 !

    或者 直接 去 武汉鸿伟光电 页面下载

    祝你顺利

    SecureCRT软件的串口模式怎样设置

    点击按钮。

    在出现的“Connect”界面中,点击红色箭头设置的按钮。

    然后选择“Serial”选项。

    接着,点击“下一步”按钮。

    对照下面的参数,进行串口的配置。

    对配置的串口连接进行命名。

    然后点击红框中的“Connect”按钮。

    就是已经连接到Cisco交换机上的图示。

    SecureCRT软件的串口模式怎样设置

    在系统的Options中设置。

    国内流行的比较好用的,如串口调试助手、格西烽火、SSCOM等,都不错。

    6e13e0cee27f21305b84186fae0cf15a.png

    71133967e3fb0bdfc8d8e7f4fce3635c.png

    串口调试助手都能实现什么功能啊

    串口调试助手就是相当于PC机,也就是上位机。通过串口和其它设备(比如单片机或仪器,甚至也可以是PC机)通信。在助手上可以收发,看出结果 。

    求助:大家好,我急需一个串口调试软件!,

    功能较强的串口调试软件。既可可手动发送数据,也可自动发送数据。发送与接收类型用户可自定义(分为十六进制和ASCII码),可计算校验(CheckSum,CRC,求反加1等等),可进行字节加减运算及字节反序与自动补0等等。可进行对传测试...

    你直接下载吧!

    串口调试软件 V1.3

    求一个能用串口设置拼接屏的软件!

    这个要专门的液晶拼接屏才可以的,要用软件控制,大屏要使用网线串联,然后总输出给到串口,在链接电脑,然后通过软件,可以实现百变的拼接规则。楼主是要做这个东西吗?

    我刚会回收到的几个拼接屏,现在不会独立显示 我用网口转串口连电脑没反应。。

    73595b4e4a52f6e4bdaffed1b1ea1f3c.pngf519a8415878b617d7e1a927eb607596.png

    编写一个专门通过串口发送数据的软件

    可以 用 虚拟串口软件 虚拟下位机

    请看 武汉鸿伟光电, 有 虚拟串口软件 下载

    上位机 用 VB 或 VC 等等 都可以

    你 说的 发送、接收、绘图、存数据库 都可以

    有 Visual_Basic与_RS-232_串行通信控制 pdf 电子文档

    也有 VC 的

    需要可以联系

    怎么设置自己电脑的串口

    设置自己电脑的串口的具体步骤如下:

    我们需要准备的材料分别是:电脑、

    1、首先我们右键单击打开我的电脑中的“属性”。

    37fa5e60a532e7619e5664b78894fc7e.png

    2、然后我们在弹出来的窗口中点击打开设备管理器中的“端口”。

    02a6d054b1f086edc17397fba20f834d.png

    3、然后我们在弹出来的窗口中右键单击打开想要设置的端口的属性,打开端口设置,即可根据自己的要求设置,之后回车确定即可。

    6640bc20bd7f982a52eec41131fe2e0b.png

    展开全文
  • 串口配置的一般步骤

    2021-01-26 16:41:53
    串口配置的一般步骤 1、串口时钟使能,GPIO时钟使能: RCC_APB2PeriphClockCmd() 2、串口复位 USART_DeInit(); ——非必需 3、GPIO端口模式设置 GPIO_Init(); ——模式设置为GPIO_Mode_AF_PP GPIO_Mode_IN_...

    串口配置的一般步骤

    1、串口时钟使能,GPIO时钟使能: RCC_APB2PeriphClockCmd()

    2、串口复位 USART_DeInit(); ——非必需

    3、GPIO端口模式设置 GPIO_Init(); ——模式设置为GPIO_Mode_AF_PP
    GPIO_Mode_IN_FLOATING;
    在这里插入图片描述

    4、串口参数初始化
    USART_Init();
    图片: https://uploader.shimo.im/f/7Gwz6R4nd6xZEmrR.png

    typedef struct { uint32_t USART_BaudRate;//波特率 uint16_t
    USART_WordLength;//传输字长 uint16_t USART_StopBits;//停止位 uint16_t
    USART_Parity;// 校验方式(奇偶校验) uint16_t USART_Mode;//单/双工 uint16_t
    USART_HardwareFlowControl;//硬件流控制 } USART_InitTypeDef;

    5、开启中断并初始化NVIC(当开启中断的时候才需要这个步骤) NVIC_Init();//初始化
    USART_ITConfig();//中断配置 6、使能串口 USART_Cmd(); 7、编写中断处理函数
    USARTx_IRQHandler();//中断主体配置(需要自己手写) 8、串口数据收发 void
    USART_SendData();//发送数据到串口,DR uint16_t
    USART_ReceiveData();//接受数据,从DR读取接受到的数据 9、串口传输状态获取 FlagStatus
    USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG); void
    USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);

    1、初始化代码 void uart_init(u32 bound){

     //GPIO端口设置
    
      GPIO_InitTypeDef GPIO_InitStrue;      //在GPIO_Init函数调用时需定义一个GPIO_InitTypeDef结构体类型变量
      USART_InitTypeDef USART_InitStrue;  //USART_Init函数调用时需定义一个USART_InitTypeDef结构体类型变量
      NVIC_InitTypeDef NVIC_InitStrue;    //USART_Init函数调用时需定义一个NVIC_InitTypeDef结构体类型变量
    
    	 
    
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);	//使能USART1,GPIOA时钟
    
    	//USART1_TX   GPIOA.9
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//复用推挽输出
      GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9
    
      //USART1_RX	  GPIOA.10初始化
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
      GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10  
    
      //Usart1 NVIC 配置
      NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3  
      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;      //子优先级3
      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;		  //IRQ通道使能
      NVIC_Init(&NVIC_InitStructure);	//根据指定的参数初始化VIC寄存器
    
       //USART 初始化设置
       USART_InitStructure.USART_BaudRate = bound;//串口波特率
       USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
       USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
       USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
       USART_InitStructure.USART_HardwareFlowControl =    USART_HardwareFlowControl_None;//无硬件数据流控制
       USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//收发模式
       USART_Init(USART1, &USART_InitStructure); //初始化串口1
       USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接中断
       USART_Cmd(USART1, ENABLE);                    //使能串口1 
    }
    

    2、中断中的相关代码

    void USART1_IRQHandler(void)                	//串口1中断服务程序
    	{
    	u8 Res;
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
          {
    		Res =USART_ReceiveData(USART1);	//读取接收到的数据
    		if((USART_RX_STA&0x8000)==0)//接收未完成
    			{
    			if(USART_RX_STA&0x4000)//接收到了0x0d
    				{
    				if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
    				else USART_RX_STA|=0x8000;	//接收完成了 
    				}
    			else //还没收到0X0D
    				{	
    				if(Res==0x0d)USAR_RX_STA|=0x4000;
    				else
    					{
    					USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
    					USART_RX_STA++;
    					if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收	  
    					}		 
    				}
    			}   		 
         } 									 
    #endif
    
    } 
    
    
    
    展开全文
  • Linux下串口配置

    2021-01-26 17:24:34
    串口属于终端设备,其接口属性用termios结构体来描述 struct termios { tcflag_t c_cflag/* 控制标志*/ tcflag_t c_iflag;/* 输入标志*/ tcflag_t c_oflag;/* 输出标志*/ tcflag_t c_lflag;/* 本地标志*/ ...

    一、串口属性
    (标题一部分内容摘录自原文地址
    1.termios结构体
    串口属于终端设备,其接口属性用termios结构体来描述

    struct termios {
        tcflag_t  c_cflag/* 控制标志*/
        tcflag_t  c_iflag;/* 输入标志*/
        tcflag_t  c_oflag;/* 输出标志*/
        tcflag_t  c_lflag;/* 本地标志*/
        tcflag_t  c_cc[NCCS];/* 控制字符*/
    };
    

    1>c_cflag成员
    c_cflag成员控制波特率、数据位、奇偶校验、停止位、流控制
    【注】CREAD和CLOCAL选项通常要启用,这俩个选项使驱动程序启动接收字符装置,忽略串口信号线的状态。
    在这里插入图片描述
    2>c_iflag
    c_iflag成员负责控制串口输入数据的处理
    在这里插入图片描述
    <1>设置输入校验
    当c_flag成员的PARENB(奇偶校验)选项启用时,c_iflag的也应该启用奇偶校验选项。

    struct termios options;
    options.c_iflag |= (INPCK | ISTRIP);
    【注】IGNPAR选项在一些场合的应用带有一定的危险性,它指示串口驱动程序忽略奇偶校验错误,也就是说,IGNPAR使奇偶校验出错的字符也通过输入。这在测试通信链路的质量时也许有用,但在通常的数据通信应用中不应使用。
    

    <2>设置软件流控制

    使用软件流控制是启用IXON、IXOFF和IXANY选项:
    options.c_iflag |= (IXON | IXOFF | IXANY);
    
    禁用软件流控制是禁止上面的选项:
    options.c_iflag &= ~(IXON | IXOFF | IXANY);
    

    3>输出标志c_oflag成员
    在这里插入图片描述
    <1>启用输出处理

    启用输出处理需要在c_oflag成员中启用OPOST选项,其操作方法如下:
    options.c_oflag |= OPOST;
    

    <2>使用原始输出

    使用原始输出,就是禁用输出处理,使数据能不经过处理、过滤地完整地输出到串口接口。
    当OPOST被禁止,c_oflag其它选项也被忽略,其操作方法如下:
    options.c_oflag &= ~OPOST; //取反求与
    

    4>本地标志c_lflag成员
    在这里插入图片描述
    <1>选择规范模式

    规范模式是行处理的。调用read读取串口数据时,每次返回一行数据。
    当选择规范模式时,需要启用ICANON、ECHO和ECHOE选项:
    options.c_lflag |= (ICANON | ECHO | ECHOE);
    
    【注】当串口设备作为用户终端时,通常要把串口设备配置成规范模式。
    

    <2>选择原始模式

    在原始模式下,串口输入数据是不经过处理的,在串口接口接收的数据被完整保留。
    要使串口设备工作在原始模式,需要关闭ICANON、ECHO、ECHOE和ISIG选项,其操作方法如下:
    options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
    

    5>控制字符组c_cc成员
    c_cc数组的长度是NCCS,一般介于15-20之间。c_cc数组的每个成员的下标都用一个宏表示,表13.8列出了c_cc的部分下标标志名及其对应说明。
    在这里插入图片描述
    【注】在规范模式下,调用read读取串口数据时,通常是返回一行数据。而在原始模式下,串口输入数据是不分行的。在原始模式下,返回读取数据的数量需要考虑两个变量:MIN和TIME。MIN和TIME在c_cc数组中的下标名为VMIN和VTIME。

    MIN是指一次read调用期望返回的最小字节数。TIME与MIN组合使用,其具体含义分以下四种情形:

    1)当MIN > 0,TIME > 0时
    
    TIME为接收到第一个字节后允许的数据传输或等待的最长分秒数(1分秒= 0.1秒)。
    定时器在收到第一个字节后启动,在计时器超时之前,若已收到MIN个字节,
    则read返回MIN个字节,否则,在计时器超时后返回实际接收到的字节。
    
    注意:因为只有在接收到第一个字节时才启动,所以至少可以返回1个字节。
    这种情形中,在接到第一个字节之前,调用者阻塞。如果在调用read时数据已经可用,
    则如同在read后数据立即被接到一样。 
    
    2)当MIN > 0,TIME = 0时
    MIN个字节完整接收后,read才返回,这可能会造成read无限期地阻塞。
    
    3)当MIN = 0, TIME > 0时
    TIME为允许等待的最大时间,计时器在调用read时立即启动,在串口接到1字节数据或者计时器超时后即返回,
    如果是计时器超时,则返回04)当MIN = 0,TIME = 0时
    如果有数据可用,则read最多返回所要求的字节数,如果无数据可用,则read立即返回0

    2.属性设置
    使用函数tcgetattr和tcsetattr可以获取和设置串口termios结构属性。

    #include <termios.h>
    #include <unistd.h>
    
    int tcgetattr(int fd, struct termios *termios_p);
    参数:1:fd为串口设备文件描述符
    	 2:用于存放串口设置的termios结构体
    	 
    int tcsetattr(int fd, int optional_actions,
                  const struct termios *termios_p);
    参数:1:fd为串口设备文件描述符
    	 2:opt是整形变量{
    	 1)TCSANOW:更改立即发生;
    	 2)TCSADRAIN:发送了所有输出后更改才发生,若更改输出参数则应用此选项;
    	 3)TCSAFLUSH:发送了所有输出后更改才发生,更进一步,
    	    在更改发生时未读的所有输入数据被删除(Flush)。
    	  }
    	 3:用于存放串口设置的termios结构体
    
    【注】在串口驱动程序里,有输入缓冲区和输出缓冲区。在改变串口属性时,缓冲区中的数据可能还存在,
    	  这时需要考虑到更改后的属性什么时候起作用。tcsetattr的参数opt可以指定在什么时候新的串口属性才起作用。
    
    返回值:上述两函数执行时,若成功则返回0,若出错则返回-1

    1>设置波特率

    #include <unistd.h>
    #include <termios.h>
    
    int cfsetispeed(struct termios *termptr, speed_t speed);
    参数1:用于存放串口设置的termios结构体
       2:波特率
    int cfsetospeed(struct termios *termptr, speed_t speed);
    参数1:用于存放串口设置的termios结构体
       2:波特率
    返回值:这两个函数若执行成功返回0,若出错则返回-1。
    
    【注】使用这两个函数时,应当理解输入、输出波特率是存在串口设备termios结构中的。
    	 在调用任一cfset函数之前,先要用tcgetattr获得设备的termios结构。
    	 与此类似,在调用任一cfset函数后,波特率都被设置到termios结构中。
    

    波特率设置示例

    struct termios opt;
    
    if (tcgetattr(fd, &opt)< 0) {
        return ERROR;
    }
     
    cfsetispeed(&opt, B9600);
    cfsetospeed(&opt, B9600);
     
    if (tcsetattr(fd,   TCSANOW,   &opt)<0) {
        return   ERROR;
    }
    

    2>设置数据位
    设置数据位不需要专用的函数,只需要在设置数据位之前用数据位屏蔽标志(CSIZE)把对应数据位清零,然后再设置新的数据位即可,如下所示:

    int set_bsize(struct termios *s, int bsize)
    {
    	if(s){
    		options.c_cflag &= ~CSIZE;/* 先把数据位清零*/
    		switch (bsize) 
    		{
    			case 5:
    				s->c_cflag |= CS5;//5位数据位 
    				break;
    			case 6:
    				s->c_cflag |= CS6;//6位数据位 
    				break;
    			case 7:
    				s->c_cflag |= CS7;//7位数据位 
    				break;
    			case 8:
    				s->c_cflag |= CS8;//8位数据位 
    				break;
    		}
    	}
    }
    

    3>设置奇偶校验
    正如设置数据位一样,设置奇偶校验是在直接在cflag成员上设置。

    1.无奇偶校验(8位数据)
    options.c_cflag &= ~PARENB; //取消进行奇偶校验
    options.c_cflag &= ~CSTOPB; //不设置<2位停止位,否则为1位>
    options.c_cflag &= ~CSIZE; //取消数据位屏蔽
    options.c_cflag |= CS8; //8位数据
    
    2.7位数据位奇偶校验
    options.c_cflag |= PARENB; //进行奇偶校验
    options.c_cflag &= ~PARODD; //取反偶检验,<奇校验,否则为偶校验>
    options.c_cflag &= ~CSTOPB;//取反1位停止位<2位停止位,否则为1位>
    options.c_cflag &= ~CSIZE;//取消数据位屏蔽
    options.c_cflag |= CS7;//8位数据
    
    3.奇校验
    options.c_cflag|= PARENB; //进行奇偶校验
    options.c_cflag |= PARODD; //奇校验,否则为偶校验
    options.c_cflag &= ~CSTOPB; //取反1位停止位<2位停止位,否则为1位>
    options.c_cflag &= ~CSIZE; //取消数据位屏蔽
    options.c_cflag |= CS7; //7位数据
    

    串口初始化示例

    #include<stdio.h>
    #include<fcntl.h>
    #include<unistd.h>
    #include<sys/stat.h>
    #include <termios.h>
    #include<sys/types.h>
    
    
    int fd = -1;
    
    //初始化串口
    int init_uart(char *uart);
    
    //启动接收 
    int enable_read(struct termios *s);
    
    
    //查看串口属性
    void show_termios(const struct termios *s);
    
    //获取串口属性
    int get_termios(int fd, struct termios *s);
    
    //波特率设置
    int set_speed(struct termios *s, int speed);
    
    //设置数据位
    int set_bsize(struct termios *s, int bsize);
    
    //设置停止位 
    int set_stop(struct termios *s, int stop);
    
    //不启用RTS/CTS(硬件)流控制
    int disable_flow_control(struct termios *s);
    
    //奇偶校验 
    int set_parity(struct termios *s, int parity);
    
    //设置控制字符 
    int set_c_cc(struct termios *s, int vtime, int vmin);
    
    //配置串口属性
    int uart_set(int fd, int baud, char parity, int bsize, int stop)int get_speed(const struct termios *s);
    
    char get_parity(const struct termios *s);
    
    int get_bsize(const struct termios *s);
    
    int get_stop(const struct termios *s);
    
    int main()
    {
    	int ret;
    	char *uart = "/dev/ttyS1"; //默认打开的串口,字符设备文件
    	ret = init_uart(uart);
    	
    	...
    	
    	return 0;
    }
    
    /**********************************
     *功能:从串口读取数据到buf中
     *参数1:@fd:串口描述符
     *参数2:@buf:存放数据的内存地址
     *参数3:@len:读取的长度
     *Return : -1失败
     *************************************/
    int uart_read(int fd, unsigned char *buf, int len)
    {
    
    	if (fd < 0 || 0 == buf || len < 1) {
    		return -1;
    	}
    	return read(fd, buf, len);
    }
    
    /**********************************
     *Describe:把数据写入到串口中
     *参数1:@fd:串口描述符
     *参数2:@buf:要写入的数据村的地址
     *参数3:@len:要写入的长度
     *Return : -1失败
    *************************************/
    int uart_write(int fd, const unsigned char *data, int len)
    {
    	if (fd < 0 || 0 == data || len < 1) {
    		return -1;
    	}
    
    	return write(fd, data, len);
    }
    
    /**********************
    **关闭串口
    **********************/
    int uart_close(int fd)
    {
    	return close(fd);
    }
    
    
    int init_uart(char *uart)
    {
    		int value;
    		struct termios old; //设置前的结构
    		struct termios new; //设置后的新结构,打印对比设置是否成功
    		
    		if(NULL == uart)
    		{
    			printf("uart is NULL!");
    			return -1;
    		}
    		
    //1.打开一个串口
    /*************************************************************************************
    **O_NOCTTY:如果path指的是终端设备,则不将此设备分配作为此进程的控制终端。
    **O_NONBLOCK:如果path指的是一个FIFO,一个块特殊文件或一个字符特殊文件,
    **            则此选择项为此文件的本次打开操作和后续的I/O操作设置非阻塞方式。
    **************************************************************************************/
    		fd = open(path, O_RDWR | O_NOCTTY); 
    		if( 1 > fd)
    		{
    			printf("open error");
    			return -1;
    		}
    	  
    //2.F_SETFL:设置文件flag为0,即默认,即阻塞状态
    		if(-1 == fcntl(fd,F_SETFL,0))
    		{
    			printf("fcntl error");
    			return -1;
    		}
    		
    		//获取与终端相关的参数
    		if(-1 == get_termios(g_fd, &old))
    		{
    			printf("get termios error");
    			return -1;
    		}
    		
    		show_termios(&old);
    	
    //3.串口配置	
    		value = uart_config(g_fd, 57600, 0, 8, 1);
    		if (0 != value)
    		{
    			printf("config error");
    			return -1;
    		}
    		
    		printf("57600 , 0 ,8,  1");
    		value = get_termios(g_fd, &new);
    
    		if (-1 == value)
    		{
    			printf("get termiso");
    			return -1;
    		}
    
    		printf("config ok,fd is %d\n", g_fd);
    		show_termios(&new);
    
    		return 0;
    }
    
    									
    }
    
    
    
    int get_termios(int fd, struct termios *s)
    {
    	if (-1 == fd || 0 == s) {
    		return -1;
    	}
    
    //tcgetattr函数用于获取与终端相关的参数
    	return tcgetattr(fd, s);
    }
    
    void show_termios(const struct termios *s)
    {
    	if (s) {
    		printf("speed=%d", get_speed(s));
    		printf(" parity=%c", get_parity(s));
    		printf(" bsize=%d", get_bsize(s));
    		printf(" stop=%d\n", get_stop(s));
    	}
    }
    
    /*****************************************
     *函数功能:配置串口
     *参数1:fd:串口的文件描述符
     *参数2:baud:串口的波特率
     *参数3:parity:串口的奇偶
     *参数4:bsize:数据的位数
     *参数5:stop:停止位
     *Return : -1失败
     ****************************************/
    int uart_set(int fd, int baud, char parity, int bsize, int stop)
    {
    	if (fd < 0) {
    		printf("param_errror");
    		return -1;
    	} else {
    		struct termios new = {0};
    
    		bzero(&new, sizeof(new));
    
    		//设置波特率
    		if (set_speed(&new, baud)) {
    			return -2;
    		}
    
    		//设置奇偶校验
    		if (set_parity(&new, parity)) {
    			return -3;
    		}
    
    		//设置数据位
    		if (set_bsize(&new, bsize)) {
    			return -4;
    		}
    
    		//设置停止位
    		if (set_stop(&new, stop)) {
    			return -5;
    		}
    
    		//控制字符组设置
    		set_c_cc(&new, 5 * 10 * 60, 0);  //如果是阻塞模式,30s唤醒read一次
    		enable_read(&new); //启动接收
    		disable_flow_control(&new);//禁用流控制
    
    		if (set_termios(fd, &new)) {
    			return -6;
    		}
    	}
    
    	return 0;
    }
    
    /******************* 波特率设置 start***************************/
    int speed_to_baud(int speed)
    {
    	switch (speed) {
    	case 1200:
    		return B1200;
    
    	case 2400:
    		return B2400;
    
    	case 4800:
    		return B4800;
    
    	case 9600:
    		return B9600;
    
    	case 19200:
    		return B19200;
    
    	case 38400:
    		return B38400;
    
    	case 57600:
    		return B57600;
    
    	case 115200:
    		return B115200;
    	}
    
    	return B9600;
    }
    
    int set_speed(struct termios *s, int speed)
    {
    	if (s) {
    		s->c_cflag &= ~CBAUD;
    		s->c_cflag |= speed_to_baud(speed);
    		return 0;
    	}
    
    	return -1;
    }
    /******************* 波特率设置 end***************************/
    
    
    /******************** 奇偶校验 start ************************/
    int set_parity(struct termios *s, int parity)
    {
    	if (s) {
    		switch (parity) {
    		case 0:
    				break;
    		case 1:
    			s->c_cflag &= ~PARENB;//取消进行奇偶校验
    			break;
    
    		case 2:
    			s->c_cflag |= PARENB;//进行奇偶校验
    			s->c_cflag |= PARODD;//奇校验,否则为偶校验
    			break;
    
    		case 3:
    			s->c_cflag |= PARENB;//进行奇偶校验
    			s->c_cflag &= ~PARODD;//偶校验
    			break;
    		default:
    			break;
    		}
    		return 0;
    	}
    	return -1;
    }
    /******************** 奇偶校验 end ***********************************/
    
    
    /******************** 设置数据位 start ******************************/
    int set_bsize(struct termios *s, int bsize)
    {
    	if (s) {
    		s->c_cflag &= ~CSIZE;
    
    		switch (bsize) {
    		case 5:
    			s->c_cflag |= CS5;
    			break;
    
    		case 6:
    			s->c_cflag |= CS6;
    			break;
    
    		case 7:
    			s->c_cflag |= CS7;
    			break;
    
    		case 8:
    			s->c_cflag |= CS8;
    			break;
    		}
    
    		return 0;
    	}
    
    	return -1;
    }
    /******************** 设置数据位 end ******************************/
    
    
    /*************** 设置停止位 start *****************************/
    int set_stop(struct termios *s, int stop)
    {
    	if (s) {
    		if (1 == stop) {
    			s->c_cflag &= ~CSTOPB; //1位停止位
    		} else {
    			s->c_cflag |= CSTOPB; //2位停止位
    		}
    
    		return 0;
    	}
    
    	return -1;
    }
    /****************** 设置停止位 end *****************************/
    
    
    /******************设置控制字符 start ******************************/
    int set_c_cc(struct termios *s, int vtime, int vmin)
    {
    	if (s) {
    		s->c_cc[VTIME] = vtime; //时间
    		s->c_cc[VMIN] = vmin; //位数
    		return 0;
    	}
    	return -1;
    }
    /******************设置控制字符 end ******************************/
    
    
    /*******************启动接收 start ******************************/
    int enable_read(struct termios *s)
    {
    	if (s) {
    		s->c_cflag |= CREAD;
    		return 0;
    	}
    
    	return -1;
    }
    
    //不启用接收数据功能
    int disable_read(struct termios *s)
    {
    	if (s) {
    		s->c_cflag &= ~CREAD;
    		return 0;
    	}
    
    	return -1;
    }
    /*******************启动接收 end ******************************/
    
    
    /*********** 不启用RTS/CTS(硬件)流控制 ************/
    int disable_flow_control(struct termios *s)
    {
    	if (s) {
    		s->c_cflag &= ~CRTSCTS;
    		return 0;
    	}
    
    	return -1;
    }
    /**************************************/
    
    
    
    /*************** display 相关 *****************/
    int get_speed(const struct termios *s)
    {
    	if (s) {
    		return baud_to_speed(s->c_cflag & CBAUD);
    	}
    
    	return -1;
    }
    
    char get_parity(const struct termios *s)
    {
    	if (s) {
    		if (s->c_cflag & PARENB) {
    			if (s->c_cflag & PARODD) {
    				return 'O';
    			} else {
    				return 'E';
    			}
    		}
    
    		return 'N';
    	}
    
    	return -1;
    }
    
    int get_bsize(const struct termios *s)
    {
    	if (s) {
    		switch (s->c_cflag & CSIZE) {
    		case CS5:
    			return 5;
    
    		case CS6:
    			return 6;
    
    		case CS7:
    			return 7;
    
    		case CS8:
    			return 8;
    		}
    	}
    
    	return -1;
    }
    
    int get_stop(const struct termios *s)
    {
    	if (s) {
    		if (s->c_cflag & CSTOPB) {
    			return 2;
    		}
    
    		return 1;
    	}
    
    	return -1;
    }
    /*************************************************************/
    
    展开全文
  • 内核版本是linux-rt-4.1.18,现在想修改uart2,使用rs485的功能,使用gpio0_5作为控制引脚配置完成没有办法使用,需要手动对gpio0_5拉高或拉低才能完成收发,请问这种情况应该怎么处理设备树配置如下uart2_pins_...

    内核版本是linux-rt-4.1.18,现在想修改uart2,使用rs485的功能,使用gpio0_5作为控制引脚

    配置完成没有办法使用,需要手动对gpio0_5拉高或拉低才能完成收发,请问这种情况应该怎么处理

    设备树配置如下

    uart2_pins_default: pinmux_uart2_pins {

    pinctrl-single,pins = <

    0x150 (PIN_INPUT_PULLUP | MUX_MODE1) /* (A17) spi0_sclk.uart2_rxd */

    0x154 (PIN_OUTPUT_PULLDOWN | MUX_MODE1) /* (B17) spi0_d0.uart2_txd */

    0x15c (PIN_OUTPUT | MUX_MODE7) /* (A16) spi0_cs0.gpio0[5] */

    >;

    };

    &uart2 {

    pinctrl-names = "default";

    pinctrl-0 = ;

    rts-gpio = ;

    rs485-rts-active-high;

    rs485-rts-delay = <1 1>;

    linux,rs485-enabled-at-boot-time;

    status = "okay";

    };

    展开全文
  • zigbee 串口配置 串口0 备用位置2配置

    千次阅读 2021-10-12 10:04:43
    其io口和一般的io口不太一样,一般的开发板用于串口传输的引脚为p0_2 p0_3,也就是串口0(uart0),备用位置1, 但是新的开发板没有使用p0_2 p0_3来作为串口输出 接收引脚,zigbee协议栈默认的配置不能使用,需要自己修改...
  • STM32CubeMX之串口配置

    千次阅读 2021-04-08 21:10:53
    STM32CubeMX之串口配置   串口通信是一种设备间非常常用的串行通信方式,以比特位的形式发送或接收数据,电子工程师经常使用这种方式来调试数据。本章节我们将学习串口发送和接收数据。STM32F103C8开发板通过串口...
  • 思科交换机配置串口初始配置

    千次阅读 2021-01-13 21:28:03
    思科交换机配置串口初始配置】 Cisco交换机和路由器主要使用超级终端、CRT来配置,此外还可以远程telnet来设置,ssh设置,使用浏览器设置,使用cisco的网管软件来设置,sdm软件等方式来对交换机进行管理。 ...
  • 华为S5720S-28P-SI-AC通过串口配置

    千次阅读 2021-02-03 13:48:00
    选择串口后默认串行口是COM1,我们可以打开设备管理器查看,这是是COM4,我们在putty上修改成对应的串行口,点击打开 默认账户admin,密码admin@huawei.com,第一次登陆回提示你当前密码存在风险是否立即修改 当然...
  • Linux stty 指令设置串口参数

    千次阅读 2021-04-22 14:26:43
    目录 1. Stty 指令简介 2. Stty 指令语法 1. Stty 指令简介 ...Linux系统中,stty(set tty,设置tty)命令,即改变并打印终端行设置,用于检查和修改当前注册的终端的通信参数。 2. Stty 指令语法 # .
  • VirtualBox虚拟机的串口通信机制有...1.启用串口新建虚拟机后在设置中会出现串口面板,可以进行串口设置,默认是不起用的,一般端口选择使用COM1对应虚拟机的/dev/ttyS0,端口模式选择Host Pipe,表示将虚拟机的串口...
  • 树莓派串口配置

    2020-12-21 08:08:06
    插上蓝牙模块以下是树莓派原理图image.png配置串口首先可以查看串口映射关系ls -l /devimage.png以上图片是我已经配置完之后截图的,一开始的话是没有serial0->ttyS0的。先安装gedit便于修改配置文件sudo apt-get...
  • STM32的串口通信接口: UART异步通信方式-引脚连接方式: 常见的串行通信接口 STM32串口异步通信需要定义的参数: 常用的串口相关寄存器: 外设GPIO配置-USART 串口配置一般步骤: 串口配置步骤小结: STM...
  • Ubuntu18.04下串口配置设备绑定USB端口号 1.查看串口设备ID 使用 lsusb 可以看到 star@star:/etc/udev/rules.d$ lsusb Bus 001 Device 002: ID 8087:8001 Intel Corp. Bus 001 Device 001: ID 1d6b:0002 Linux ...
  • putty 串口调试设置

    2021-10-29 18:48:25
  • int open_port(int fd,int comport){char *dev[]={"/dev/ttySAC0","/dev/ttySAC1","/dev/...if(comport==0){//串口0fd=open("/dev/ttySAC0",O_RDWR|O_NOCTTY|O_NDELAY);if(-1==fd){perror("Can't Open Serial P...
  • Linux串口设置

    2021-05-14 17:03:47
    Linux串口是连接许多外围设备的重要接口,因此掌握linux串口设置十分的重要。Linux串口设置主要分为四步:第一:打开需要使用的串口设备第二:获取该串口设备的属性第三:根据应用设置串口的属性第四:将设置生效第一...
  • 可以用stty指令,查看或设置某个串口的波特率等信息。 在控制台输入:stty -F /dev/ttySn -a #ttySn为要查看的串口 用stty设置串口参数: stty -F /dev/ttyS0 ispeed 115200 ospeed 115200 cs8 该命令将串口1(/...
  • 6.7.2 设置串口通信参数串口通信参数指的是波特率、数据位、奇偶校验位和停止位。对串口实现控制的时候同样要用到termio结构体。下面将结合具体的代码说明如何设置这些参数。1.波特率设置获得端口波特率信息是通过...
  • 通过查看官方文档:树莓派0、1、2 以及 3 的双串口 UART0(PL011)和 ...一、 raspberry 4B 在ubuntu20.04 配置串口的方法 通过命令查看支持的串口数: dtoverlay -a | grep uart 官方文档:Raspberry Pi Do...
  • 串口缓存大小设置

    2021-08-11 11:44:33
    设置 串口 软 fifo int UartBuffSizeSet(char dev_path,int size) { int ret; int fd = open(dev_path, O_RDWR | O_NOCTTY | O_NONBLOCK); if(fd < 0){ return -1; } struct serial_struct serial; ret = ioctl...
  • moxa串口服务器通讯设置参数 串口服务器简介 串口服务器提供串口转网络功能,能够将RS-232/485/422串口转换成TCP/IP网络接口,实现RS-232/485/422串口与TCP/IP网络接口的数据双向透明传输。使得串口设备能够立即...
  • 有一个需求是调用串口接收GPS模块信息,在配置串口时候绕了好大一圈,现在准备总结下。 树莓派包含两个串口 1.硬件串口(/dev/ttyAMA0),硬件串口由硬件实现,有单独的波特率时钟源,性能高,可靠。一般优先选择这个...
  • Linux标准输入输出重定向到串口指南邮箱:追风哥455546798@http://www.doczj.com/doc/f04262717e21af45b307a81b.html描述:设置linux系统的标准输入输出到com0(console口),以便维护人员在无网络、无显示器的情况下...
  • NPort串口服务器有分“驱动模式”及“socket模式”如果您的程序是通过串口进行通讯,那么请选择NPort的“驱动模式”,也就是为主机添加虚拟串口,具体安装配置是(这里以windows为例):1、通过NPort Search Utility...
  • You want to use the serial IOCTLTIOCSSERIALwhich allows changing both receive buffer depth and send buffer depth (among other things). The maximums depend on your hardware, but if a 16550A is in pla.....
  • 配置USART和UART之前,得先明白什么是USART和UART以及它们之间有什么区别,其实两者是同步和...一般而言,单片机中,名称为UART的接口一般只能用于异步串行通讯,而名称为USART的接口既可以用于同步串行通讯,也能
  • 做个记录实现串口IAP 参考官方实例D:\STM32Cube_FW_F1_V1.7.0\Projects\STM3210C_EVAL\Applications\IAP首先制作IAP程序,使用到外设一个串口 一个输入按键 楼主使用的MCU型号为stm32F103RCT61、配置IAP程序的系统...
  • 串口操作需要的头文件#include /*标准输入输出定义*/#include /*标准函数库定义*/#include /*Unix标准函数定义*/#include#include#include /*文件控制定义*/#include /*PPSIX终端控制定义*/#include /*错误号定义*/1...
  • 串口服务器485 设置

    2021-08-11 11:33:25
    串口服务器485 设置 内容精选换一换购买多台云服务器时,有以下两种方式设置有序的云服务器名称。自动排序:购买多台云服务器时自动按序增加4位数字后缀。正则排序:按照name_prefix[begin_number,bits]name_suffix...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 281,197
精华内容 112,478
关键字:

串口配置

友情链接: routing.zip