STC官方能提供个远程帧的例程吗?
本帖最后由 newlined 于 2024-3-1 11:55 编辑贵司各位大佬好,官网有关CAN的例程里没有关于远程帧的例程,最近在做一个东西,希望对各个节点名,看看有几个节点接入,好像用远程帧的方式比较好?能否提供一个。再就是在这里顺便请教下,数据帧中,起始位后的ID应该是发送方的ID,在远程帧中,起始位后的ID是不是接收方的ID?谢谢。
也许远程帧的例程比较简单?把以前的例程中数据帧改为远程帧即可?这样这个节点发出远程帧后,那个节点收到后会立即发出数据帧? 是不是改例程中这个地方? 远程帧是CAN通信中的一种帧类型,它与数据帧存在一些差异。
远程帧由目标节点发送,用于请求源节点发送特定的数据帧。
以下是远程帧的几个关键特点:
1. 远程帧的RTR位为隐性状态,这是与数据帧的一个主要区别,
数据帧的RTR位为显性状态。
2. 远程帧没有数据字段,它只包含必要的控制信息,
如帧起始、仲裁场、控制场、CRC场、应答场和帧结束。
3. 远程帧发送时会指定一个特定的CAN ID,当源节点接收到这个ID的远程帧后,
它会发送一个包含相同ID的数据帧以响应远程帧请求。
当远程帧和带有相同ID的数据帧同时发出时,由于数据帧的RTR位为显性,
数据帧将赢得仲裁,从而源节点会发送所需的数据帧。
这样,发送远程帧的节点能够立即收到所需的数据。
发送远程帧时将RTR=1,DLC=0,CAN ID=目标节点ID。
乘风飞扬 发表于 2024-3-3 09:49
远程帧是CAN通信中的一种帧类型,它与数据帧存在一些差异。
远程帧由目标节点发送,用于请求源节点发送特定 ...
谢谢乘风老师您的回复,我还有一个疑问,向你请教,假设节点A发出了一个远程帧,这个远程帧中的ID是B节点的,B节点收到后,它是立即通过CAN管理器发出一个带有自己节点ID的数据帧,当然这个数据帧中的数据要提前准备好,还是程序编写者写一段程序:判断是否收到远程帧?收到远程帧后,我要发送哪些数据?数据准备好后,再启动发送程序? newlined 发表于 2024-3-4 08:34
谢谢乘风老师您的回复,我还有一个疑问,向你请教,假设节点A发出了一个远程帧,这个远程帧中的ID是B节点 ...
编程判断收到自己ID的远程帧后,发送本节点需要发的数据帧。 乘风飞扬 发表于 2024-3-4 09:00
编程判断收到自己ID的远程帧后,发送本节点需要发的数据帧。
明白了,谢谢您的回复,当节点B收到一个帧,这个帧中的ID是自己的,他就知道需要发出一个一个数据帧,编程者把需要发出的数据放到数据帧的数据字段,发出即可。 QW123 发表于 2024-3-2 22:37
是不是改例程中这个地方?
我不知道您看的是那个例程,看语句应该是表明要发出哪个类型的帧,应该可以,我是看的这个例程:
CAN1_Tx.FF = STANDARD_FRAME; //标准帧
CAN1_Tx.RTR = 0; //0:数据帧,1:远程帧
CAN1_Tx.DLC = 0x01; //数据长度
CAN1_Tx.ID = 0x0345; //CAN ID
CAN1_Tx.DataBuffer = 0x11; //数据内容
CAN1_Tx.DataBuffer = 0x12;
CAN1_Tx.DataBuffer = 0x13;
CAN1_Tx.DataBuffer = 0x14;
CAN1_Tx.DataBuffer = 0x15;
CAN1_Tx.DataBuffer = 0x16;
CAN1_Tx.DataBuffer = 0x17;
CAN1_Tx.DataBuffer = 0x18;
修改 《CAN1_Tx.RTR = 0; //0:数据帧,1:远程帧 》
这一句应该可以,我还没有实际试试。
newlined 发表于 2024-3-4 09:28
我不知道您看的是那个例程,看语句应该是表明要发出哪个类型的帧,应该可以,我是看的这个例程:
{:4_167:} 应该是你这段修改,我看的例子应该和你一样,只是我刚好找到底层去了, 现在想想,我找到的那一段,没啥移植要求可能不能去动,
页:
[1]