单片机 > 单片机程序设计 > 详情

CAN过滤器、屏蔽器及标识符设置详解

发布时间:2023-02-06 发布时间:
|

CAN标识符、过滤器、屏蔽器之间的关系


CAN节点通过标识符来识别CAN帧是不是自己想要的,识别方法就是通过滤波屏蔽寄存器的设置来完

成,接收滤波寄存器设置了标识符每位的值,接收屏蔽寄存器一般有相同的数量匹配接收滤波寄存器,规定接

收滤波寄存器标识符每一位的值是否需要进行匹配,比如芯片设置有6个接收滤波寄存器和6个接收屏蔽寄

存器,从总线上接收 CAN 帧,然后依次将收到的 CAN 帧标识符与 6 对接收滤波和屏蔽寄存器进行匹配,符合

某对接收滤波和屏蔽寄存器要求了,就停止匹配,将数据接收到对应的缓冲区中.。


例如:设置某接收滤波寄存器 00000000001(11 位),接收屏蔽寄存器 11111111101(11 位),则该对

组合会拒绝接收 00000000011 和 00000000001 之外所有的标识符对应的 CAN 帧,因为屏蔽器规定第二位

(为 0)以外的所有标识符位要严格匹配(与滤波器值一致),第二位的滤波器值和收到的 CAN 标识符第

二位值是否一致都可以。


以PIC18F45K80单片机为例:


①、CAN发送


/扩展帧模式发送ID设置如下/


TXB0CON=0X03; //发送优先级为最高优先级,TXPRI=11

//ID设置如下【这里设置29位扩展标识符ID为 : 1fffffff】

TXB0SIDH=0XFF;

TXB0SIDL=0XEB; //配置扩展帧模式EXIDE=1, EID17=1,EID16=1

TXB0EIDH=0XFF; //EID8-EID15

TXB0EIDL=0XFF; //EID0-EID7


/-------------------------------------------------------------------------

can发送数据长度设置,发送缓冲器初始化

-------------------------------------------------------------------------/


//设置数据长度为8个字节

TXB0DLC=0X08;

//初始化发送缓冲器

TXB0D0=0x00;

TXB0D1=0x00;

TXB0D2=0x00;

TXB0D3=0x00;

TXB0D4=0x00;

TXB0D5=0x00;

TXB0D6=0x00;

TXB0D7=0x00;


②、CAN接收


RXB0CON=0X40; //仅仅接收标准标识符的有效信息,FILHIT0=0表示RXB0采用filter0

RXB0DLC=0X08; //设置接收缓冲器0的数据区长度

RXB0D0=0X00; //初始化接收缓冲器0的数据区数据

RXB0D1=0X00;

RXB0D2=0X00;

RXB0D3=0X00;

RXB0D4=0X00;

RXB0D5=0X00;

RXB0D6=0X00;

RXB0D7=0X00;


//初始化接收滤波器0和接收屏蔽,(扩展帧配置)

RXF0SIDH=0XFF;

RXF0SIDL=0XEB; /*(EXIDEN = 1,使能扩展帧)*/

RXF0EIDH=0XFF;

RXF0EIDL=0XFF;

//扩展表示符屏蔽寄存器设置

RXM0SIDH=0X00; /*无屏蔽*/ //标准标识符屏蔽位或扩展标识符屏蔽位 (EID<28:21>)

RXM0SIDL=0X00; //SID<2:0>:标准标识符屏蔽位或扩展标识符屏蔽位 (EID<20:18>)

RXM0EIDH=0xff;

RXM0EIDL=0X00;



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STC89C52RC单片机的NRF24L01无线通信程序.收发一体