stm32 can 遥控帧的问题

STM32单片机使用CAN协议进行通信引用这个博客的一段话

txt 复制代码
CAN的遥控帧(Remote Frame)的主要作用是请求其他节点发送具
有特定ID的数据帧。具体来说,当一个节点需要从另一个节点获取数
据时,它可以发送一个遥控帧,而不是直接发送数据。这个遥控帧包
含了请求数据的ID,但没有包含数据本身。接收到遥控帧的节点如果
拥有与遥控帧ID相匹配的数据帧,就会响应并发送相应的数据帧。这
种方式允许节点仅请求需要的数据,而不是不断发送可能不需要的数
据,从而提高了网络的效率和减少了不必要的数据传输。

我们使用,只需要在发送的时候将rtr设置为1即可。

eg:

c 复制代码
u8 can1_send_msg(u32 id, u8 ide, u8 rtr, u8 *msg, u8 len)
can1_send_msg(0x12AB0001,1,0,canbuf,8);

//接收的时候也只需要加一个额外的判断即可
//注意判断条件 rtr==2才是遥控帧,看手册
u8 can1_receive_msg(u32 id, u8 *buf)
{
    u32 rid = 0;
    u8 ide, rtr, len = 0;

    if (can1_pend_msg(0) == 0)return 0;          /* 没有接收到数据,直接退出 */

    can1_rx_msg(0, &rid, &ide, &rtr, &len, buf); /* 读取数据 */
	 if (ide != 4|| rtr != 2 )       /* 不是扩展帧 / 不是远程帧 */
    {
        len = 0;    /* 接收错误 */
    }
		
    return len;
}

补充:

  1. 如果开启了接收中断,那在main函数中轮询接收就无效了
c 复制代码
int main()
{
key=can1_receive_msg(0X12AB0001,canbuf);//开了中断这里就不好使了。
}
  1. 点对点通信 ≠ 远程帧:
  • 点对点通信可通过普通数据帧直接完成,无需远程帧。
  • 远程帧是一种请求机制,而非通信的必要条件。
相关推荐
Lzh编程小栈30 分钟前
【嵌入式底层】SPI超透彻详解:通信原理、四线结构、四种模式、寄存器底层 + 面试全集
c语言·stm32·单片机·面试·职场和发展
Rocktech_ruixun34 分钟前
机器人数据采集能力取决于什么?瑞迅科技RK3588/3576核心板方案深度解析
人工智能·嵌入式硬件·机器人
水果里面有苹果36 分钟前
28-DRV8825PWPR步进电机驱动器
单片机
恒锐丰科技韩生1 小时前
率能 SS6625E|3.0~20V 单通道 H 桥直流电机驱动 SOP8 电子锁玩具机器人分享
嵌入式硬件·硬件工程
zlinear数据采集卡1 小时前
D223 ADC数据处理流水线:从原始采样值到工程单位的完整转换链
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
Dr.kangder2 小时前
嵌入式面试总结(十八)——JTAG调试
嵌入式硬件·面试·职场和发展·架构·嵌入式
恒锐丰科技韩生3 小时前
率能 SS6226|2.4~7.2V 低压双通道双 H 桥电机驱动 SOP16 玩具小家电专用芯片
嵌入式硬件·硬件工程
WWJA王文举3 小时前
RS485通信超时全面排查:终端电阻、A/B线、DE方向控制、串口参数和Modbus一次讲透
stm32·通信协议·rs485
Dr.kangder5 小时前
嵌入式面试总结(十九)——内存泄露
单片机·算法·面试·职场和发展·架构·硬件架构
萌新小白YXY7 小时前
SAE J1587/SAE J1708 协议笔记
笔记·单片机·嵌入式硬件