串口通信 订阅
串行接口是一种可以将接收来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接收的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节的通信方式。 展开全文
串行接口是一种可以将接收来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接收的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节的通信方式。
信息
外文名
Serial Communications
类    型
概念
类    别
通信
中文名
串口通信
标    准
ANSI/EIA-232
串口通信原理
串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。典型地,串口用于ASCII码字符的传输。通信使用3根线完成,分别是地线、发送、接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配。这是一个衡量符号传输速率的参数。指的是信号被调制以后在单位时间内的变化,即单位时间内载波参数变化的次数,如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位,1个停止位,8个数据位),这时的波特率为240Bd,比特率为10位*240个/秒=2400bps。一般调制速率大于波特率,比如曼彻斯特编码)。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。 [1]  这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据往往不会是8位的,标准的值是6、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准 ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位为1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。
收起全文
精华内容
下载资源
问答
  • VB串口通信第三节串行通信接口标准.pptx
  • 1, 485通讯串口通讯区别跟串口通信一样的。在串口上加个485转换器好了。 可以用现成的spcomm控件等对于软件来说,485通信串口通信是一回事,都是操作串口。这两者只是硬件上的区别而已,跟软件没关系的。所谓的...

    1, 485通讯与串口通讯区别

    84a6b067c3ecf33eaf5762586f0f5f73.png

    跟串口通信一样的。在串口上加个485转换器好了。 可以用现成的spcomm控件等对于软件来说,485通信和串口通信是一回事,都是操作串口。这两者只是硬件上的区别而已,跟软件没关系的。所谓的485通信,只是在串口上加了一个转换器而已,就这么简单。 我以前做过的。答案补充 跟串口通信一样的。在串口上加个485转换器好了。 可以用现成的spcomm控件等对于软件来说,485通信和串口通信是一回事,都是操作串口。这两者只是硬件上的区别而已,跟软件没关系的。所谓的485通信,只是在串口上加了一个转换器而已,就这么简单。 我以前做过的。

    2, 485 通讯 多点

    4b6e84e6223362818617ba8969a64788.png

    RS485是物理层不是通讯协议,以RS485为物理层的通讯协议有很多,例如:MODBUS,西门子的PROFIBUS DP , PA, MPI ,PPI ,等等。RS485是物理层,不是通讯协议,以RS485为物理层的通讯协议有很多,例如:MODBUS,西门子的PROFIBUS DP , PA, MPI ,PPI 等等。1、物理层(或称物理层,Physical Layer)是计算机网络OSI模型中最低的一层。物理层规定:为传输数据所需要的物理链路创建、维持、拆除,而提供具有机械的,电子的,功能的和规范的特性。简单的说,物理层确保原始的数据可在各种物理媒体上传输。局域网与广域网皆属第1、2层。2、物理层是OSI的第一层,它虽然处于最底层,却是整个开放系统的基础。物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境。如果您想要用尽量少的词来记住这个第一层,那就是“信号和介质”。OSI采纳了各种现成的协议,其中有RS-232、RS-449、X.21、V.35、ISDN、以及FDDI、IEEE802.3、IEEE802.4、和IEEE802.5的物理层协议。

    名词解释

    串口

    串行接口(SerialInterface)简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口,指数据一位一位地顺序传送。 串行接口的特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。常见的有一般计算机应用的RS-232(使用 25 针或 9 针连接器)和工业计算机应用的半双工RS-485与全双工RS-422。

    485

    串口是一种接口标准,它规定了接口的电气标准,简单说只是物理层的一个标准。没有规定接口插件电缆以及使用的协议,所以只要我们使用的接口插件电缆符合串口标准就可以在实际中灵活使用,在串口接口标准上使用各种协议进行通讯及设备控制。所以485的使用范围广,通用性强。典型的串行通讯标准是RS232和RS485。

    通信

    通信,指人与人或人与自然之间通过某种行为或媒介进行的信息交流与传递,从广义上指需要信息的双方或多方在不违背各自意愿的情况下采用任意方法,任意媒质,将信息从某方准确安全地传送到另方。

    展开全文
  • matlab串口通信-基于MATLAB的MCU串行通信.pdf 不错的文章有点启发 适合作为毕业设计的一部分 基于MATLAB的MCU串行通信
  • 实现无线串口通讯串口通信(Serial Communication), 是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式。这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其...
  • 之前一直有点搞混串行通信串口通信的概念 有挺多芯片的datasheet上会说“串行接口” 之前也傻乎乎地理解为就是串口 忘记了是谁还吐槽过“国产芯片手册上写着好好的是串口 可是通信协议根本不是串口” 可能也许...
    之前一直有点搞混串行通信和串口通信的概念  有挺多芯片的datasheet上会说“串行接口” 之前也傻乎乎地理解为就是串口
    忘记了是谁还吐槽过“国产芯片手册上写着好好的是串口 可是通信协议根本不是串口”
    可能也许说不定 国产芯片的datasheet默默背了下黑锅

    昨晚小泽老师甩给我一份datasheet说这是啥通信协议呀

    ←datasheet的残骸(x

    我仔细瞅了瞅感觉挺像SPI的 然后面向搜索引擎搜索一波 终于理清关系了

    串行通信是一种 概念,大概意思就是1bit 1bit地收发数据,和n bit n bit地收发的并行通信是并列关系。常见的SPI,I2C,串口,USB都是串行通信的具体实现。而所谓的串行接口,其实也就是能实现串行通信的接口的意思,并不能简单缩写成串口来理解(x

    串口通信呢就是熟悉的串口通信啦,属于串行通信的一个 子类

    顺便 SPI的全称是Serial Peripheral Interface,就是 串行外设接口,好像喊一喊串行接口也没毛病,=L=好像又不小心让国产新片datasheet背了个黑锅


    展开全文
  • 非常适合 单片机进一步学习 和串行通讯
  • 串口通讯试验1.0,串口通信实验,C,C++源码
  • 串口通讯试验1.0,串口通信实验,C,C++源码.rar
  • 串行通信的基本原理及用MFC实现串口通信 在Windows应用程序的开发中,我们常常需要面临与外围数据源设备通信的问题。计算机和单片机(如MCS-51)都具有串行通信口,可以设计相应的串口通信程序,完成二者之间的数据...
  • 实验15:串口通信,串口通讯实验报告,C,C++源码
  • 实验15:串口通信,串口通讯实验报告,C,C++源码.rar
  • 在计算机系统中,CPU和外部通信有两种通信方式:并行通信和串行通信。而按照串行数据的时钟控制方式,串行通信又可分为同步通信和异步通信两种方式。 1、异步串行方式的特点 所谓异步通信,是指数据传送以字符为...

    在计算机系统中,CPU和外部通信有两种通信方式:并行通信和串行通信。而按照串行数据的时钟控制方式,串行通信又可分为同步通信和异步通信两种方式。

    1、异步串行方式的特点

    所谓异步通信,是指数据传送以字符为单位,字符与字符间的传送是完全异步的,位与位之间的传送基本上是同步的。异步串行通信的特点可以概括为:

    ①以字符为单位传送信息。

    ②相邻两字符间的间隔是任意长。

    ③因为一个字符中的比特位长度有限,所以需要的接收时钟和发送时钟只要相近就可以。

    ④异步方式特点简单的说就是:字符间异步,字符内部各位同步。

    2、异步串行方式的数据格式

    异步串行通信的数据格式如图8-1所示,每个字符(每帧信息)由4个部分组成:

    ①1位起始位,规定为低电0;

    ②5~8位数据位,即要传送的有效信息;

    ③1位奇偶校验位;

    ④1~2位停止位,规定为高电平1。

     

    图1 异步串行数据格式

    3、同步串行方式的特点

    所谓同步通信,是指数据传送是以数据块(一组字符)为单位,字符与字符之间、字符内部的位与位之间都同步。同步串行通信的特点可以概括为:

    ①以数据块为单位传送信息。

    ②在一个数据块(信息帧)内,字符与字符间无间隔。

    ③因为一次传输的数据块中包含的数据较多,所以接收时钟与发送进钟严格同步,通常要有同步时钟。

    4、同步串行方式的数据格式

    同步串行通信的数据格式如图8-2所示,每个数据块(信息帧)由3个部分组成:

    ①2个同步字符作为一个数据块(信息帧)的起始标志;

    ②n个连续传送的数据

    ③2个字节循环冗余校验码(CRC)

     

    图2 同步串行数据格式

    转载于:https://www.cnblogs.com/gudu0723/archive/2012/05/29/2523588.html

    展开全文
  • 51单片机串口通信模拟实验,串口通信入门。
  • 施耐德M218的串口通讯范例
  • 串口串口通讯范例——介绍串口通信,vb,讯范例,值得参考!
  • 串口通讯技术实现--两台pc机通过串口通信
  • 这是一个上位机通讯的参考源码,相当实用,依此你可能编写出串口助手,也可用于调试MODEM,PLC,PLC解密等各各串口通讯的工程当中,也是VB学习的参见手册,对你的学习,工作会有相当的帮助。
  • 串口通信

    2020-03-13 22:20:45
    串行接口简称串口,也称为串行通信接口或串行通讯接口(COM接口),是采用串行通信方式的拓展接口。串行接口是指数据一位一位的顺序传送。其特点是通信简单,只要一对数据线就可以实现双向通信,从而大大降低了成本...

    串口通信

    串行接口简称串口,也称为串行通信接口或串行通讯接口(COM接口),是采用串行通信方式的拓展接口。串行接口是指数据一位一位的顺序传送。其特点是通信简单,只要一对数据线就可以实现双向通信,从而大大降低了成本,特别适合远距离通信,但传送速度较慢

    常见接口类型

    • RS-232:也称标准接口,是最常用的一种串行通讯接口,传统的标准接口有22根线,现简化为9根,采用单向传输,其传送距离最大为15米,最高速率为20kb/s,常用于“点对点”的数据传输
    • RS-422:其接收器采用高输入阻抗和发送驱动器比RS-232更强,因此允许在相同的传输线上连接多个接收节点,最多可接10个节点(一主多从),支持“点对多”的双向传输,最大传输距离为1219米,最大传输速率为10Mb/s(距离和传输速率成反比),100米左右的双绞线的传输速率大概为1Mb/s
    • RS-485:是RS-422基础上发展得到的,因此其满足RS-422的所有规范,不同的仅为二者共模输出电压不同,传输距离和传输速率也是相同的

    串口编程流程

    在这里插入图片描述

    打开串口

    通过硬件电路原理图可知串口号为“ttySACx”,即串口设备文件名为“/dev/ttySACx”(此处使用ttySAC3)

    打开串口实例如下:

    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <string.h>
    
    int main()
    {
    		int fd;
    		char *uart = "/dev/ttySAC3";
    
    		fd = open(uart,O_RDWR | O_NDELAY);
    		if(fd < 0)
    				printf("Open uart failed!\n");
    		else
    				printf("%s is working!\n",uart);
    
    		close(fd);
    		return 0;
    }
    

    初始化串口

    初始化串口之前,需要了解串口部分内核参数定义的源码结构(建议使用source insight):

    //开发板资料存放路径\iTOP-4412精英版光盘资料\20191007\iTOP-4412精英版光盘资料\06_源码_uboot和kernel\iTop4412_Kernel_3.0\iTop4412_Kernel_3.0\arch\arm\include\asm\termios.h
    
    //我们需要的串口信息在结构体termio中
    struct termio {
    	unsigned short c_iflag;		/*输入模式标志*/
    	unsigned short c_oflag;		/*输出模式标志*/
    	unsigned short c_cflag;		/*控制模式标志*/
    	unsigned short c_lflag;		/*本地模式标志*/
    	unsigned char c_line;		/*线路专业*/
    	unsigned char c_cc[NCC];	/*控制字符*/
    };
    

    串口初始化的步骤

    • 读取当前参数
    • 修改参数
    • 配置参数

    串口参数读取函数:tcgetattr

    //函数头文件
    #include <termios.h>
    #include <unistd.h>
    
    //函数原型
    int tcgetattr(int fd, struct termios *termios_p);
    
    //函数读取的信息保存在参数2代表的结构体中
    
    • 参数1:文件描述符
    • 参数2:串口信息结构体
    • 成功返回0,失败返回非零

    串口参数设置函数:tcsetattr

    //函数原型
    int tcsetattr(int fd, int optional_actions,const struct termios *termios_p);
    
    • 参数1:文件描述符
    • 参数2:参数生效时间,常见为以下三种:
      1. TCSANOW:立即生效
      2. TCSADRAIN:所有数据传输完毕之后生效
      3. TCSAFLUSH:清空输入输出缓冲区之后生效
    • 参数3:更改后参数之后的结构体
    • 成功返回0,失败返回-1

    串口波特率相关函数

    //获取当前波特率
    speed_t cfgetispeed(const struct termios *termios_p);	//接收波特率
    speed_t cfgetospeed(const struct termios *termios_p);	//发送波特率
    
    //波特率设置函数
    int cfsetispeed(struct termios *termios_p,speed_t speed);
    int cfsetospeed(struct termios *termios_p,speed_t speed);
    
    //speed波特率的常见数据有:B2400、B4800、B9600、B115200、B460800
    
    • 函数成功返回0,失败返回-1

    串口发送

    • 使用write函数向串口文件ttyASC文件写入数据,即可实现数据的发送

    串口发送实例

    #include <stdio.h>
    #include <string.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <termios.h>
    #include <errno.h>
    
    int set_opt(int,int,int,char,int);
    void main()
    {
    	int fd,wr_static,i=10;
    	char *uart3 = "/dev/ttySAC3";
    	char *buffer = "hello world!\n";
    	
    	printf("\r\nitop4412 uart3 writetest start\r\n");
    	
    	if((fd = open(uart3, O_RDWR|O_NOCTTY|O_NDELAY))<0){
    		printf("open %s is failed",uart3);
    	}
    	else{
    		printf("open %s is success\n",uart3);
    		set_opt(fd, 115200, 8, 'N', 1); 
    		while(i--)
    		{
    			wr_static = write(fd,buffer, strlen(buffer));
    			if(wr_static<0)
    				printf("write failed\n");
    			else{
    				printf("wr_static is %d\n",wr_static);
    			}
    			sleep(1);
    		}
    	}
    	close(fd);
    }
    
    
    int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop)
    {
    	struct termios newtio,oldtio;
    	if  ( tcgetattr( fd,&oldtio)  !=  0) { 
    		perror("SetupSerial 1");
    		return -1;
    	}
        //bzero函数的作用:将字节字符串前n个字节置为0且包括'\0'
    	bzero( &newtio, sizeof( newtio ) );
    	newtio.c_cflag  |=  CLOCAL | CREAD;
    	newtio.c_cflag &= ~CSIZE;
    
    	switch( nBits )
    	{
    	case 7:
    		newtio.c_cflag |= CS7;
    		break;
    	case 8:
    		newtio.c_cflag |= CS8;
    		break;
    	}
    
    	switch( nEvent )
    	{
    	case 'O':
    		newtio.c_cflag |= PARENB;
    		newtio.c_cflag |= PARODD;
    		newtio.c_iflag |= (INPCK | ISTRIP);
    		break;
    	case 'E': 
    		newtio.c_iflag |= (INPCK | ISTRIP);
    		newtio.c_cflag |= PARENB;
    		newtio.c_cflag &= ~PARODD;
    		break;
    	case 'N':  
    		newtio.c_cflag &= ~PARENB;
    		break;
    	}
    
    	switch( nSpeed )
    	{
    	case 2400:
    		cfsetispeed(&newtio, B2400);
    		cfsetospeed(&newtio, B2400);
    		break;
    	case 4800:
    		cfsetispeed(&newtio, B4800);
    		cfsetospeed(&newtio, B4800);
    		break;
    	case 9600:
    		cfsetispeed(&newtio, B9600);
    		cfsetospeed(&newtio, B9600);
    		break;
    	case 115200:
    		cfsetispeed(&newtio, B115200);
    		cfsetospeed(&newtio, B115200);
    		break;
    	case 460800:
    		cfsetispeed(&newtio, B460800);
    		cfsetospeed(&newtio, B460800);
    		break;
    	default:
    		cfsetispeed(&newtio, B9600);
    		cfsetospeed(&newtio, B9600);
    		break;
    	}
    	if( nStop == 1 )
    		newtio.c_cflag &=  ~CSTOPB;
    	else if ( nStop == 2 )
    	newtio.c_cflag |=  CSTOPB;
    	newtio.c_cc[VTIME]  = 0;
    	newtio.c_cc[VMIN] = 0;
    	tcflush(fd,TCIFLUSH);
    	if((tcsetattr(fd,TCSANOW,&newtio))!=0)
    	{
    		perror("com set error");
    		return -1;
    	}
    	printf("set done!\n\r");
    	return 0;
    }
    

    如果需要使用串口程序实现主机与开发板的通信,需要使用UART1,但是没有连接超级终端就无法观察到通信效果,如果需要观察,可以将程序设置为开机自启动,就可以观察效果了

    展开全文
  • VB编程实现串口通信 VB编程实现串口通信 VB编程实现串口通信
  • 三菱plc串口通信协议与串口初始化1、系统硬件构成三菱fx系列plc自带的编程口是rs-422接口,而pc机的串行通信口则是rs-232c接口,两者之间需要通过sc-09适配电缆才能通信。不同设备上相同类型的通信接口的引脚定义...
  • 在计算机系统中,CPU和外部通信有两种通信方式:并行通信和串行通信。而按照串行数据的时钟控制方式,串行通信又可分为同步通信和异步通信两种方式。
  • 打算机和单片机(如MCS-51)都具有串行通讯口,可以设计相应的串口通讯程序,完成二者之间的数据通讯义务。  实际工作中运用串口完成通讯义务的时候非常之多。已有一些文章介绍串口编程的文章在打算机杂志上发表。...
  • 计算机和单片机(如MCS-51)都具有串行通信口,可以设计相应的串口通信程序,完成二者之间的数据通信任务。  实际工作中利用串口完成通信任务的时候非常之多。已有一些文章介绍串口编程的文章在计算机
  • 打算机和单片机(如MCS-51)都具有串行通讯口,可以设计相应的串口通讯程序,完成二者之间的数据通讯义务。  实际工作中运用串口完成通讯义务的时候非常之多。已有一些文章介绍串口编程的文章在打算机杂志上发表...
  • Arduino 串行通信串口通信 UART 原理及释义

    万次阅读 多人点赞 2019-03-28 09:43:53
    本系列中提到的串口通信一般指Arduino上面的USART通信模式,USART也是串行通信的一种,可以有硬串口,软串口两种实现方式,并且USART是一种异步串行通信.   相关案例: 环境监测 温湿度传感器 案例  

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 237,630
精华内容 95,052
关键字:

串口通信