can数据帧多少位,关于单片机读取汽车CAN数据的问题明白人进
来源:整理 编辑:亚灵电子网 2023-09-07 01:09:20
本文目录一览
1,关于单片机读取汽车CAN数据的问题明白人进
是的,通过CAN、SPI、IIC、UART等得到的基础数据都是Byte,最终为何种数据类型,需要根据双机之间通讯协议来组合。
2,can通讯桢的格式是怎样的
CAN通讯帧分为以下几类:数据帧(又分标准帧和扩展帧)、远程帧、错误帧(主动错误帧和被动错误帧)、超载帧、帧间空间。建议去看下CAN协议,里面讲的很详细。只有回原单位想办法,另外,要这玩意就是形式而已, 如果实在不行,可以找个“办证”的帮你“如实”地弄一个,也不会有什么不良社会后果, 这也是没办法的事。
3,51单片机的串口接收一帧数据有几位
发送的位数跟工作方式有关。51单片机的发送和接受,只有10位和11位两种。
先说单片机串口的工作方式:
单片机串口的工作方式共4种,方式0--方式3.
方式0:用移位脉冲。RXD做输入/输出,TXD进行移位。收发的数据为八位。
方式1:传送一帧信息为10位,即1位起始位(0),8位数据位(低位在先)和1位停止位(1)。数据位由TXD发送,由RXD接收
方式1:一帧信息也是10位;即 1位起始位,8位数据位(先低位),1位停止位。在起始位到达移位寄存器的最左位时,它使控制电路进行最后一次移位。
方式2和方式3:发送(通过TXD)和接收(通过RXD)一帧信息都是 11位: 1位起始位(0), 8位数据位(低位在先),1位可编程位(即第9位数据)和1位停止位(1)。
可见:不论单片机串口接收还是发送一帧数据是多少位,实际有效位数据位都是8位,其余位是为了奇偶校验、做起始位或终止位用的。
以前所述有误,特修正。
4,can总线发了几帧就停了
扩展帧和标准帧的区别在于:扩展帧的仲裁域有29位,可以出现2^29中报文,且在数据链路上是有间隙的(对操作者透明)。标准帧的仲裁域是连续的11位,可以出现2^11种报文;控制帧中的dlc(数据长度)完全相同,但保留位不同,标准帧ide、r0,扩展帧r1、r0,必须以显性电平发送(由数据链路层操作),对程序员透明;其它的都一模一样,所以,其实can标准帧和扩展帧只是在id的长度上不一样,以能扩展更多的can节点,更好地支持上层协议而已。CAN总线发多帧数据?是说不间断的发送多帧数据吗?这个不科学,给你举个例子。A的缓冲三帧连续发的CAN数据,ID是0x000005,在A发送第一帧的同时,B准备发送CAN数据,B的数据帧ID是0x000001,等A发完第一帧后,A的第二帧肯定是和B的数据一起仲裁,结果是A仲裁失利,等B发完才能继续发送。你要发多帧数据,可以看看ISO15765-2,里边就有CAN数据传输协议。
5,各位老师关于CAN总线的问题
差不多是这样的,我学校学过这的了,很久没有弄过了。参考资料链接那里有个文档,你可以看看。 从OSI网络模型的角度来看同,现场总线网络一般只实现了第1层(物理层)、第2层(数据链路层)、第7层(应用层)。因为现场总线通常只包括一个网段,因此不需要第3层(传输层)和第4层(网络层),也不需要第5层(会话层)第6层(描述层)的作用。 CAN(Controller Area Network)现场总线仅仅定义了第1层、第2层(见ISO11898标准);实际设计中,这两层完全由硬件实现,设计人员无需再为此开发相关软件(Software)或固件(Firmware)。 同时,CAN只定义物理层和数据链路层,没有规定应用层,本身并不完整,需要一个高层协议来定义CAN报文中的11/29位标识符、8字节数据的使用。而且,基于CAN总线的工业自动化应用中,越来越需要一个开放的、标准化的高层协议:这个协议支持各种CAN厂商设备的互用性、互换性,能够实现在CAN网络中提供标准的、统一的系统通讯模式,提供设备功能描述方式,执行网络管理功能。
6,can总线问题
1.标准格式数据帧包括:1位帧起始位,11位ID位+1IRQ位,8个控制位,8字节的数据位,2字节的CRC校验位,7个终止位(记得不一定全面)同时有码流控制功能,即位填充功能。当出现4个相同电平的位时,会在中间插入1个不同的位。码流填充区域包括从起始位一直到数据位结束。具体细节可以参见《现场总线CAN原理与应用》一书,北京航空航天大学出版社。2.11位标识符与屏蔽寄存器和代码寄存器组成了CAN总线的滤波模式。3.初始化总线定时寄存器,控制寄存器,输出寄存器,中断寄存器。4.屏蔽寄存器全部为0xFF,使滤波位“无关”5. 高8位为9,即为0000_1001,CODE0= 0000_1001 MASK0 = 1111_0110 (二进制表示)6. 这个我以前算过,《现场总线CAN原理与应用》一书中有详细介绍,现在书没有在手边,印象里是 BTR0 = 0x43;BTR1 = 0x1c;希望能解决您的问题。1,传感器是不能直接连can的,是由单片机采集传感器的信号然后通过can总线发出去,所以要考虑的是传感器和单片机的连接2.这个根据你的实际需求可以自己去设定时间3,。一般情况不用人去管了,只需要出问题了再进行维修4,这个就看你系统硬件是怎么设计的了,不同方案肯定不一样5,这个依然看你的硬件设计来估算1.标准格式数据帧包括:1位帧起始位,11位ID位+1IRQ位,8个控制位,8字节的数据位,2字节的CRC校验位,7个终止位(记得不一定全面)同时有码流控制功能,即位填充功能。当出现4个相同电平的位时,会在中间插入1个不同的位。码流填充区域包括从起始位一直到数据位结束。具体细节可以参见《现场总线CAN原理与应用》一书,北京航空航天大学出版社。2.11位标识符与屏蔽寄存器和代码寄存器组成了CAN总线的滤波模式。3.初始化总线定时寄存器,控制寄存器,输出寄存器,中断寄存器。4.屏蔽寄存器全部为0xFF,使滤波位“无关”5. 高8位为9,即为0000_1001,CODE0= 0000_1001 MASK0 = 1111_0110 (二进制表示)6. 这个我以前算过,《现场总线CAN原理与应用》一书中有详细介绍,现在书没有在手边,印象里是 BTR0 = 0x43;BTR1 = 0x1c;满意请采纳。1.标准格式数据帧包括:1位帧起始位,11位ID位+1IRQ位,8个控制位,8字节的数据位,2字节的CRC校验位,7个终止位(记得不一定全面)同时有码流控制功能,即位填充功能。当出现4个相同电平的位时,会在中间插入1个不同的位。码流填充区域包括从起始位一直到数据位结束。具体细节可以参见《现场总线CAN原理与应用》一书,北京航空航天大学出版社。2.11位标识符与屏蔽寄存器和代码寄存器组成了CAN总线的滤波模式。3.初始化总线定时寄存器,控制寄存器,输出寄存器,中断寄存器。4.屏蔽寄存器全部为0xFF,使滤波位“无关”5. 高8位为9,即为0000_1001,CODE0= 0000_1001 MASK0 = 1111_0110 (二进制表示)6. 这个我以前算过,《现场总线CAN原理与应用》一书中有详细介绍,现在书没有在手边,印象里是 BTR0 = 0x43;BTR1 = 0x1c;以上回答你满意么?
7,单片机串行通信里面的数据帧是怎么理解一帧数据的位数可以改变吗
感觉你的概念不太清晰。上面所说的“1+8bit+1+1”应该是串行通讯一个字节的格式,属于串行通讯中的最小数据格式单位的一种:1个起始位+8个数据位+1个校验位+1个停止位(也有1+8+0+1等等),也就是说如果需要收发N个字节,就有N x (1+8bit+1+1)个这样的组合出现在TXD或RXD线路上,而不是1+nbit+1+1或者1+nx8bit+1+1。这些位中: 1、起始位和停止位:用于同步 2、校验位:用来保证通讯信息的正确性 3、8个数据位:设备需要的真正数据。 起始位和停止位都是收发双方UART适配器自身的硬件完成的,校验位需要程序处理及判断以便知道信息是否正确。一般而言,在初始化设置完成后,软件编程者只需要关注8个数据位及校验位就可以了。 下面说一下帧。 串行通信中,帧信息一般是根据需要自己约定而确定的。其内容一般是由多个8位单字节数据组成,比如你所说的传感器,需要采集电压值,电流值等信息,假设这些信息需要10个字节,那么你的一帧信息最少需要10个字节,也就是收发两方都需要计数,计数到10时才能说明通讯完成。这是最简单的,但大多数应用中规范的做法一帧信息都会包含帧头标识符、帧长度、信息内容及校验信息。给你个链接,这是我以前的回答,其中简单的叙述了帧协议,理解后你可以规定自己的帧格式。http://zhidao.baidu.com/question/273360213.html 对于多个传感器,应给每一个分配一个唯一的地址,只有地址相符的传感器才对主端的信息做应答。地址信息可以包含到通讯协议中,比如: 帧头 + 帧长度 + 中断地址 + 信息内容 + 校验和 如果使用的是51单片机,也可以用串行通讯方式3方式完成,你可以查阅一下资料,我记不住了。兄弟呀,你干吗要那么着急的想一侦数据就要发完呢?你需要的采集的频率很大吗?我来给你理下思路吧:首先,你得知道并且设置你传感器的采集位数,即采集的精度。其次,你需要多少个采集通道,比如有5个采集通道,那么,你在传数据的时候,就的将每个通道的数据附一个标记,比如一通到为0X01,二通道为0X02等等。再次,你得将每个通道采集的数据放在单片机里的BUFFER里面,建议开一个缓存区来存放你一次采集的多个通道的数据,当然,每个通道采集的数据分开来放,然后,将这个缓存区的数据,一个个的读到串口通信的TX(BUFFER),发送采用中断的方式来做,读数据采用循环指针来读。最后,你得弄清楚一侦数据里每个数据的意思,通信,都是有通信协议的,有同步通信与异步通信之分,主机与单片机之间,最好用相同的通信方式,你所说的串行通信,你可以在8BIT的数据里用一个字节来标识是哪一通道的数据、、、51单片机串口通信里所说的一帧数据,不同的工作模式帧的格式有可能不一样,比如工作模式3的帧格式为:1位起始位+8位数据位+1位可编程位+1位停止位。一次只能发送8比特的数据,像你说的1+n+1+1,这里的n只能是8,不能是其它数,意思是一帧数据最多只能包含一个字节的数据,如果想要发送N字节,那你必需发送N帧。明白?最简单的控制(不想用数字电路的话)可以使用4位单片机(没见过吧?),一般复杂控制(比如空调、冰箱、热水器、微波炉等这类家电产品的控制都可以用8位单片机,你可以以这个为标准,凡是功能在这些以下的都可以用8位单片机。一些基础仪器,比如中低档的万用表、示波器、频率计、信号发生器都可以用8位单片机)比较复杂的控制(一些工业专用设备,比如汽车发动机信息采集,数据量比较大,但又较图形图像低的)可以用16位机。32位机一般是arm了,可以用来处理图形、图像、视频等多媒体信息,搭载windows ce操作系统(包括使用office 软件),可以有网络功能(tcp/ip),初初一看像台小电脑似的。我没有见过,一般都是起止位、8个数据位、奇偶校验位。你的意思是你的单片机tx,rx口上接了两个或者两个以上的传感器采集设备,这个方法不适合,容易造成采集到的数据穿插混乱,采集时序有可能这样:甲设备发送完一个字节,然后乙设备发送一个字节,甲设备发送一个字节、甲发送一个字节、乙发送一个字节……单片机没法去区分这些字节信息。而你想要的结果是甲发送的时候,乙不能发送,只有甲发送完了乙才能发,或者乙发完了甲才能发。建议你找一个支持多串口的MCU吧,或者设置主从机来解决这个问题,因为当前我没有发现一次串行通信可以发n个字节的情况,都是1个字节
文章TAG:
can数据帧多少位数据 数据帧 多少