飞思卡尔MC9S12XEP100 CAN学习总结(三) 滤波器配置

飞思卡尔MC9S12XEP100 CAN学习总结(一) 概述

飞思卡尔MC9S12XEP100 CAN学习总结(二) 波特率配置

飞思卡尔MC9S12XEP100 CAN学习总结(三) 滤波器配置

标准帧和扩展帧

标准帧格式:具有11位标识符;
扩展帧格式:具有29位标识符;
两种帧格式可以出现在同一总线上。
在这里插入图片描述

标准帧

CAN 标准帧的ID结构

在这里插入图片描述

标准帧发送相关代码

msg.id = 0x5C;
CAN0TXIDR0 = (unsigned char)(msg.id>>3);
CAN0TXIDR1 = (unsigned char)(msg.id<<5);

标准帧接收相关代码

msg->id = (unsigned int)(CAN0RXIDR0<<3) | (unsigned char)(CAN0RXIDR1>>5);

后续补充

扩展帧

CAN 扩展帧的ID结构
在这里插入图片描述
在我们给的ID里没包含SRR与IDE与RTT,比如扩展帧ID:0x10F81099,展开为:

0001 0000 1111 1000 0001 0000 1001 1001,这个ID里的标准帧11位于扩展后的18位直接相连的,我们需要把SRR与IDE和RTR加进去就是我们滤波的CANIDAR寄存器的值;

具体方法为,从第19位开始向左移3位,空出SRR和IDE;低18位向左移一位,空出RTR

1 0000 1111 10 xx 00 0001 0000 1001 1001 x

绿色的’x’为移动后空出的位

整理下为:1000 0111 110x x000 0010 0001 0011 001x

空出的位,根据帧类型填就行,也可随便填,我们CANIDMR的值,在该位取1,不关心该为就好了;

例如我们需要过滤出扩展帧0x10F81099;

则根据上面的,得出AR值为: 1000 0111 110x x000 0010 0001 0011 001x,把x取1,则为

1000 0111 1101 1000 0010 0001 0011 0011 即AR寄存器值为 0x87D82133 ,那么MR值只把SRR,IDE,RTR位取1

0000 0000 0001 1000 0000 0000 0000 0001 即MR寄存器值为 0x00180001 ,这样就能过滤出扩展帧ID0xF81099
转载于:https://blog.csdn.net/youmeichifan/article/details/80346990

扩展帧发送相关代码

msg.id = 0x10F81099
CAN0TXIDR0 = (unsigned char)(msg.id>>21);
CAN0TXIDR1 = (((unsigned char)(msg.id>>13))&0xe0)|0x18|(((unsigned char)(msg.id>>15))&0x07);
CAN0TXIDR2 = (unsigned char)(msg.id>>7);
CAN0TXIDR3 = ((unsigned char)(msg.id<<1));

扩展帧接收相关代码

msg->id = (((unsigned long)CAN0RXIDR0)<<21)|((unsigned long)(CAN0RXIDR1&0xe0)<<13)|
((unsigned long)(CAN0RXIDR1&0x07)<<15)|(((unsigned long)CAN0RXIDR2)<<7)|
((unsigned long)(CAN0RXIDR3&0xfe)>>1);

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖茄子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值