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. 点对点通信 ≠ 远程帧:
  • 点对点通信可通过普通数据帧直接完成,无需远程帧。
  • 远程帧是一种请求机制,而非通信的必要条件。
相关推荐
不悔哥2 天前
开源OV-Watch:怎么做一个智能手表
单片机·开源·嵌入式
XiHongShi20162 天前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
优信电子2 天前
AIT1001 非接触式红外测温模块 STM32 驱动开发实战:从引脚到代码全解析
stm32·嵌入式·温度传感器·红外测温·非接触式测温·ait1001
深圳老胡2 天前
STM32F407 控制 L6470 步进电机驱动 —— 控制过程简介
笔记·stm32·单片机·嵌入式硬件·代码规范
wuyk5552 天前
《WiFi 嵌入式物联网开发全套实战》| 第 16 章 ESP32 AP+STA 双模共存原理与工程坑点
网络·stm32·物联网
女神下凡2 天前
嵌入式设计的各种存储芯片的硬件/软件设计规范,非常全面。
arm开发·单片机·嵌入式硬件
梅梅9662 天前
一款mipi转lvds的lcd调试(LT8912B)
单片机·计算机外设·电脑·显示器·pd芯片
开发笔记-阿牛2 天前
蓝牙音乐灯拆解,又一次拆到蓝牙音乐灯芯片CK6865L
人工智能·单片机·嵌入式硬件·音视频·音频
从零开始的嵌入式之旅2 天前
day47
arm开发·经验分享·笔记·嵌入式硬件
恒锐丰科技林技术员2 天前
EG1164 高压大电流升压同步整流芯片解析
经验分享·嵌入式硬件·硬件工程