CAN通信模块的滤波器设置

本文介绍了CAN通信模块中滤波器的设置方法,特别是针对标准帧的配置。通过MR+AR的方式,设置滤波器以匹配特定ID,并通过实例解释了如何根据需要的ID来配置16位寄存器AR和屏蔽寄存器MR。同时,提供了初始化及发送消息的示例代码。
摘要由CSDN通过智能技术生成

       昨天好不容调试通了CAN模块,首先是滤波器不能关闭,关了机不接受任何帧数据了,跟我想象中的完全部不一样啊,另外通信的是标准帧,到现在扩展帧怎么弄的还没搞清楚,先记录下标准帧的东西;相关的寄存器设置这个不用说了,我没有搞清楚的就是这个滤波器设置问题,后来研究了半天,16为滤波器标准帧总算勉强懂了一点。

     基本原理就是MR+AR的方式,在标准帧中ID有11为,ID10-ID0;所以如果想要通信的帧ID=0B001 0000 0000 =0x100的话,那么应该将这11个bit放入寄存器(AR0-AR1)组成的16为寄存器中,于是得到得到AR=001 0000 0000 00000(在最后面添加5个0)得到16bit,于是AR=0x2000;MR设置为全部比较,MR=0x0007;又例如,假设通信的ID=0B 0001 0000 000=0x080(最前面补0,这个数不变 ),那么将这个11bit放入寄存器中(AR0-AR1)组成的16为寄存器中,于是得到得到AR=0001 0000 000 00000(在最后面添加5个0)得到16bit,于是AR=0x1000;MR设置为全部比较,MR=0x0007;一次类推;

    接下来在讲一下MR的问题,MR也就是屏蔽的意义,因为在标准帧中只有11为有效;假如要通信的ID=0B 001 0000 000X,那么应该将这11个bit放入寄存器(AR0-AR1)组成的16为寄存器中,于是得到得到AR=001 0000 000X 00000(在最后面添加5个0)得到16bit,于是AR=0x2000(或者0x2020),MR=0B 000 0000 0001 + 00111(补5位,最后三个必须为111)=0x0027.

  标准帧中当设置应该是这样额。附一个网上的程序:

MSCAN学习

//

// MSCAN初始化

//

/*******************CAN0******************************/

void MSCAN0_Init()

{  

    // If MSCAN peripheral is not in Initialization Mode, enables the Inizialization Mode Request</

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值