当前位置: 首页 > news >正文

stm32 can 遥控帧的问题

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

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

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

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函数中轮询接收就无效了
int main()
{
key=can1_receive_msg(0X12AB0001,canbuf);//开了中断这里就不好使了。
}
  1. 点对点通信 ≠ 远程帧:
  • 点对点通信可通过普通数据帧直接完成,无需远程帧。
  • 远程帧是一种请求机制,而非通信的必要条件。

相关文章:

  • 全局曝光与卷帘曝光
  • 海康摄像头通过Web插件进行预览播放和控制
  • IP 地址规划中的子网划分:/18 网络容纳 64 个 C 段(/24)的原理与应用解析
  • SpringCould微服务架构之Docker(8)
  • 面基:Java项目中跟钉钉接口对接,如何确保数据传输安全性和稳定性
  • 深度学习 Deep Learning 第11章 实用方法论
  • 25-智慧旅游系统(协同算法)三端
  • Redis:内存淘汰原则,缓存击穿,缓存穿透,缓存雪崩
  • 从零开始:如何打造一套完整的UI设计系统?
  • 数据可视化——让数据说话的魔法
  • java反射笔记、内省、动态代理
  • Redis 梳理汇总目录
  • torch.nn.Conv2d介绍——Pytorch中的二维卷积层
  • 非对称加密算法详解
  • Sourcetree安装教程及配合Gitee的使用
  • CD21.【C++ Dev】类和对象(12) 流插入运算符的重载
  • 埃文科技企业AI大模型一体机——昇腾体系+DeepSeek+RAG一站式解决方案
  • 附录:LInux编辑器学习笔记
  • 技术长期主义:用本分思维重构JavaScript逆向知识体系(一)Babel、AST、ES6+、ES5、浏览器环境、Node.js环境的关系和处理流程
  • Docker学习--本地镜像管理相关命令--docker build 命令
  • 名帅大挪移提前开启,意属皇马的阿隆索会是齐达内第二吗
  • 央行:当前我国债券市场定价效率、机构债券投资交易和风险管理能力仍有待提升
  • 协会:坚决支持司法机关依法打击涉象棋行业的违法行为
  • 复旦大学文科杰出教授裘锡圭逝世,享年90岁
  • 2024年上市公司合计实现营业收入71.98万亿元
  • 湖北奥莱斯轮胎公司逃避监管排放大气污染物被罚25万元