精华内容
下载资源
问答
  • 串口通信数据格式

    千次阅读 2020-09-17 12:21:38
    串口收发数据的单位:字节 (Byte) '', 1Byte = 8 bits , 串口收发数据格式一般为 :1bit 起始位(一般为0) + 8bits 数据位(一字节) +1bit 校验位(可有可无) + 1bit结束位(一般为1) 奇校验是指每数据中,包括...

    串行接口的定义:

    • 串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口)
    • 是指数据一位一位地顺序传送
    • 特点是通信线路简单,只要一对传输线就可以实现双向通信;成本低,适用于远距离通信,但传送速度较慢

     串口通信的定义:

    • 串口按位(bit)发送和接收字节。

    串口通讯的定义:

    • 串口通讯(Serial Communication), 是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式。一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯。

    在串行通信中,数据在1位宽的单条线路上进行传输,一个字节的数据要分为8次,由低位到高位按顺序一位一位的进行传送。

    串口收发数据的单位:字节 (Byte) '',   1Byte = 8 bits , 串口收发数据格式一般为  :1bit 起始位(一般为0)   8bits 数据位(一字节)  1bit 校验位(可有可无)  + 1bit结束位(一般为1)

     

    • 奇校验是指每帧数据中,包括数据位和奇偶校验位的全部9个位中1的个数必须为奇数;
    • 偶校验是指每帧数据中,包括数据位和奇偶校验位的全部9个位中1的个数必须为偶数。
    展开全文
  • 51串口通信 数据

    2014-11-01 07:36:19
    应用51 开发的 串口通信 带数据包格式
  • 文章目录 1 自定义帧格式 1.1 数据帧结构 1.2 填充数据帧 1.3 填充数发送缓冲区 1.4 通过串口发送数据 2 超时接收 2.1 串口中断服务程序 2.2 定时器中断服务函数: 2.3 数据处理 1 自定义帧格式 1.1 数据帧结构 定义...

    1 自定义帧格式

    1.1 数据帧结构

    定义一帧数据的结构

    strcut FRAME
    {
    	u8 head;//帧头
    	u8 len;//数据长度
    	u8 type;//数据包类型,例如 1代表成绩,2代表身高……
    	u8 data[16];//数据包缓冲区
    };
    
    1.2 填充数据帧

    接下来,假设我要发一个数据包。例如发五个学生的成绩(假设成绩在buf[5]数组里), 那么需要定义一个数据帧变量score,并初始化:

    strcut FRAME score;
    score.head='#'; 
    score.len=5; 
    score.type=0x01; 
    for(i=0;i<score.len,i++)
    {
    	score.data[i]=buf[i];
    }
    
    1.3 填充数发送缓冲区

    然后,把这帧数据放到发送缓冲区:

    u8 send_buf[18]={0},index=0,i;
    send_buf[index++]=score.head;
    send_buf[index++]=score.len;
    send_buf[index++]=score.type;
    for(i=0;i<score.len,i++)
    {
    	send_buf[index++]=score.data[i];
    }
    
    1.4 通过串口发送数据

    最后,将缓冲区数据发送出去

    for(i=0;i<score.len+3;i++)
    {
    	while((USART1->SR&0X40)==0);
    	USART1->DR = send_buf[i];
    }
    

    2 超时接收

    超时接收,就是接收过程可以不对数据进行任何处理。在接收到第一个数据时,就打开定时器开始计时,当定时器溢出后(例如设为10ms, 只要保证数据能传输完即可),认为数据接收结束,才开始处理数据。当然,不用定时器,使用空闲中断也可以,没用过所以这里不写。

    2.1 串口中断服务程序
    void USART1_IRQHandler(void)                	//´®¿Ú1ÖжϷþÎñ³ÌÐò
    {
    	u8 Res;	
    	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) 
    	{
    		if(0==over_flag)//未超时或者数据未处理
    		{
    			Res =USART_ReceiveData(USART1);	
    		    ReceiveBuf[index++]=Res;
    		    //当然,还要判断index的值是否过大,这里不做判断
    		    if(0==time_flag)
    		    {
    				TIM_Cmd(TIM3, ENABLE); //接收到第一个字节,开启定时器
    				time_flag=1;//定时器开启的标志
    			}
    		}
    	}
    }
    
    2.2 定时器中断服务函数:
    void TIM3_IRQHandler(void)
    { 		    		  			    
    	if(TIM3->SR&0X0001)
    	{
    		over_flag=1;//超时标志置1   				   				     	    	
    	}				   
    	TIM3->SR&=~(1<<0);   
    }
    
    2.3 数据处理

    业务程序大致这样:

    if(over_flag) //超时,且数据未被处理
    {
    	{
    		//对ReceiveBuf缓冲区的数据进行处理
    		//首先要做判断,判断第一个字节是不是‘#’(还有其他检验数据的正确性的方法,
    		//本文没涉及),如果数据有误,就丢弃
    	}
    	TIM_Cmd(TIM3, DISABLE);//关定时器
    	time_flag=0//定时器标志置零
    	over_flag=0; //超时标志清零,也表示数据已经被处理
    }
    

    大概就是上面写的这样啦,理解不到位还请见谅。临时写的,没有源代码……估计存在不少问题,仅供参考思路。谢谢!

    展开全文
  • 本文将为大家详细介绍串口经过转换后的CAN帧格式与注意事项。适用场景串口转CAN模块在什么时候需要用到呢?一是老产品面临升级,需要用到CAN总线通信,但硬件平台中的MCU没有集成CAN总线的控制器。二是选用的MCU已经...

    MCU没有CAN或CAN接口数量不够怎么办?目前市面上有串口转CAN的相关模块或设备,但大家知道串口转CAN是如何实现的吗?转换后的帧格式是如何的?本文将为大家详细介绍串口经过转换后的CAN帧格式与注意事项。

    适用场景

    串口转CAN模块在什么时候需要用到呢?一是老产品面临升级,需要用到CAN总线通信,但硬件平台中的MCU没有集成CAN总线的控制器。二是选用的MCU已经包含CAN总线接口,但数量上不能满足项目需求。若出现类似以上两种情况且MCU有闲置串口,则可以选用串口转CAN模块解决。

    20f9a353570201dde05a930ee344e784.png

    图1 应用行业

    使用方法

    该类模块可以很方便地嵌入到具有UART接口的设备中,在不需改变原有硬件结构的前提下使设备获得CAN-bus通讯接口,实现具有UART设备和CAN-bus网络之间的数据通讯。工业级的转换模块内部还包括实现带隔离的CAN和UART转换所必须的模拟和数字器件、光电耦合器、DC/DC变换器、CAN-bus接口等。

    144543a269b27b47a8e6c20c395c394d.png

    图2 产品架构

    转换说明

    CSM100系列模块提供3种协议转换方式:透明转换、透明带标示转换、自定义协议转换。下面以CSM100系列的模块简述模块的透明转换格式。

    该模式下,CSM100接收到一侧总线的数据就立即转换发送至另一总线侧。该模式下的模块数据转换效率最高,能承担较大流量的数据传输。串行帧转CAN帧时,模块将来自串口的数据直接打包,并插入预先配置的CAN帧信息、帧ID一同作为一帧数据发送到总线上。同理,来自CAN总线上的数据将按顺序拆分为字节流发送到串口上,字节流的前几个字节为该CAN帧的信息。

    ee2ec9e326d4e3f22990eeded6577e1f.png

    图3 转换方式

    说到这,大家肯定有个疑惑,CAN帧的信息及CAN帧ID是如何表示的呢?

    帧信息主要用来区分标准帧、扩展帧,长度为1个字节。在“自定义协议转换”中,标准帧固定为 0x00, 扩展帧固定为 0x80; 在“透明转换”“透明带标识转换” 中, 标准帧为 0x0_,扩展帧为 0x8_,其中“_” 代表每个帧中的数据域长度, 范围为 0~8。

    标准帧的帧ID拆分为2个字节表示,扩展帧的帧ID拆分为4个字节表示。如果实际配置时给帧ID预留的只有一个字节且帧类型为扩展帧,方向是CAN帧转串行帧,那么将只能得到帧ID的高8位。如果实际配置时给帧ID预留的只有一个字节且帧类型为扩展帧,方向是串行帧转CAN帧,那么将帧ID的高8位正常填充,其他三字节全补零。

    29c30cb5808a7351d574da8fadf804b9.png

    假设配置的转换成的CAN报文帧信息为“标准帧”,配置的帧ID1,ID0分别为“0x01,0x23”,串行帧的数据为01,02,03,04,05,06,07,08共8个字节,那么转换格式如图5。CAN报文的帧ID为0x0123(用户配置),帧信息:标准帧(用户配置),串行帧中的数据部分将不作任何修改地转换到CAN报文中。

    b57b125d499faeffa3e67b07eef10bbf.png

    图5 串行帧到CAN帧

    假设CAN报文中帧ID1为0x01,帧ID0为 0x23,数据为0x12,0x34,0x56,0x78,0xab,0xcd,0xef,0xff,则CAN报文和转换后的串行帧如图6。CAN报文的帧信息(0x08)转换到串行帧中的第1个字节(0x08),CAN报文中的ID:0x0123依次转换到串行帧中的第2个字节(0x01)及第3个字节(0x23)。CAN报文的数据域将不作任何修改地转换到串行帧中的数据部分。

    a8a63ca2cadce1e352d1dfd4f2fab29d.png

    图6 CAN帧到串行帧

    总结

    以上为串口转CAN透明格式下的转换方式,后续笔者将新增透明带标示转换、自定义协议转换以及moudbus转换的内容,欢迎持续关注。

    66a8742a1c81aaabc3f924fdaab3d011.png

    展开全文
  • 51单片机串口通信数据接收

    千次阅读 2015-12-12 21:35:42
    首先定义一个数据帧格式,Header :{ 0xAA 0x55} type:{ 0x01 | 0x02 | 0x03 } length:{ N } body :{____n个字节的数据___ } 数据的格式就是上面的定义 Header 为帧头 标记一个数据帧的开始,type 为类型 用来...


    首先定义一个数据帧格式,Header :{ 0xAA 0x55} type:{ 0x01 | 0x02 | 0x03 } length:{  N } body :{____n个字节的数据___ }

    数据的格式就是上面的定义  Header 为帧头 标记一个数据帧的开始,type 为类型 用来识别数据的类型 ,Length为长度标记 用来识别是否收完一帧的数据;

    这次的目的是为了获取来自PC端串口传来的汉字字模数据 —— 一条长为32字节的数据,所以定义N = 32;类型 因为是第一个要用到的数据就先使用type=0x01

    现在确定的格式 一帧数据 大概是  

    unsinged char code test[36]={0xaa,0x55,0x01,0x20,0x01,0x0D,0x1D,0x19,0x01,0x3F,0x3F,0x03,0x03,0x03,0x07,0x26,0x6E,0x7C,0x38,0x00,0x98,
    					0x98,0x98,0x8C,0x8C,0x8E,0xEF,0xED,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x00};

    当一个数据发来单片机进入中断程序开始接收数据

    void mReceive(){
    	uart_flag =0;//接收标志
    <span style="white-space:pre">	</span>RI=0;//手动清寄存器
    <span style="white-space:pre">	</span>receive[count]=SBUF;
    	if(count==0&&receive[count]==0xaa){
    		count=1;
    	}
    	else if(count==1&&receive[count]==0x55){
    			count=2;
    	}	
    	else if(count>=2){
    		if(count-3==receive[3]){ //当已经接收到的长度是该数据帧的长度时接收完成
    			count=0;
    <span style="white-space:pre">			</span>uart_flag=1;
    		}else if (count>=37)//超长验证,如果数据接收一帧的长度还没有完成验证一整帧则接受失败 开始新的接收
    		{
    			count  = 0;
    		}else{
                           count+=1;
                         }
    	else {
    		count=0;
    	}	
    }

    第一张是LabView上的模拟显示第二张是proteus仿真接收到的数据然后显示的结果

    展开全文
  • 异步同步通信数据帧格式

    千次阅读 2020-07-10 13:52:52
    1. 异步通信的特点及信息帧格式: 以起止式异步协议为例,下图显示的是起止式一帧数据的格式: 图1 起止式异步通信的特点是:一个字符一个字符地传输,每个字符一位一位地传输,并且传输一个字符时,总是以"起始位"开始,以...
  • 在编写PC与串口通信帧时或单片机与单片机通信帧时,经常会因为结构体对齐模式花费大量的时间进行调试,如声明一个结构体: typedef struct { unsigned char Start;//表头 unsigned char Address;//从机地址 ...
  • 用于接收数据格式为五位头+文本格式的模块串口通信,可用于myrio,mydAQ等开发板。
  • 单片机串口通信帧协议设计 数据格式: 0 1 2 3 … n+2 n+3 n+4 0xaa n data[0] ...
  • 串口通信协议

    2019-12-23 14:29:37
    T613通信协议 T613与客户使用的Soc通信方式有两种: Uart 方式通信 I2C 方式通信 下面我们分别介绍一下通信过程中,具体的实现原理和通信细节。...帧格式: 帧头 Cmd Cmd_Val ...
  • 串口通信知识总结

    2020-06-29 15:07:03
      之前断断续续的学习了解了串口通信的相关知识,但由于没有集中地学习,导致对串口通信的... 串口通信的数据格式3.1 一完整数据3.2 奇校验与偶校验3.3 起始位与停止位3.4 波特率四. 串口通信协议4.1 RS-2324.2 T
  • 串口通信发送的数据是以ASCII码形式,对数据进行处理需要将ASCII码转换成数值,对数值转换成二进制,再根据帧格式对其拆帧。 流程; 1、接收串口发送的数据(串口中断服务函数) 2、将串口发送的数据转换为数值。 3、...
  • 串口通信

    2019-12-21 23:01:21
    发送与接收 在51内部有一个全双工串行通信接口。SBUF位串行口数据缓冲...发送时,将帧格式写入SBUF,发送完成后,TI置1并发出中断信息 接收时,接收帧数据存入SBUF,接收完成后,RI置1发出中断 串行口控制 ...
  • 异常报文的处理问题描述在串口通信中,由于各种内外干扰的存在,可能会导致报文丢等异常情况。当出现这种情况时,上位机需要异常报文进行处理,否则可能会解析错报文,甚至影响后续正常报文的接收。问题复现正常...
  • 一种串口完整数据接收的实现方式

    万次阅读 多人点赞 2018-08-23 10:21:28
    本人采用的STM32HAL库,部分函数为库函数提供,其中硬件初始化反初始化函数部分需要自己实现,这里不给出实现代码,数据接收实现方式基本通用于所有串口通信,以下是实现的代码。 附:如果你想使用字符串形式的...
  • Stm32串口通信(USART)

    2019-03-30 10:40:00
    Stm32串口通信(UART) 串口通信的分类 ...串口通信三种传递方式 ...在一帧格式中,先是一个起始位0,然后是8个数据位,规定低位在前,高位在后,接下来是奇偶校验位(能省略),最后是停止位1。用这种格式表示...
  • python实现串口通信

    千次阅读 2020-02-08 23:43:26
    因为店家只给了我两页纸的vc0706通信...3 实现串口通信 3.1 发现端口 3.2 发送命令 3.2.1 协议格式 3.2.2serial传送的方式 3.3 获取版本号(hello world) 3.4 复位 3.5 照相 3.5.1停止当前刷新 3.5.2...
  • 通用同步异步收发器,使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换 rs232 rs485 同步 有时钟信号 IIC SPI 异步 UART(异步串行通信) 有起始位,停止位,校验位 在同步通讯中,数据信号...
  • STM32串口通信:USART

    2021-03-20 20:16:04
    串口通信一般是以帧格式传输数据,即一帧一帧传输,每帧包含有起始信号、数据信息、停止信息,可能还有校验信息。 2、串行通信的分类 (1)按照数据传送方向,分为: 单工:数据传输只支持数据在一个方向上传输...
  • UART串口通信

    2016-12-27 15:05:06
    什么是串行通信? 将数据字节分成一位一位的形式在一条传输线上逐位地发送。 ...什么是异步通信?...异步通信是指通信的发送与...第一,数据单元——,它是双方约定好的数据格式; 第二,波特率,它决定了‘

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 275
精华内容 110
关键字:

串口通信帧格式