CAN 要【3 ~ 4组 过滤器/筛选器】
STC32G12K128 的2组CAN, 每个独立的 CAN,其 过滤器/筛选器,有单滤波、双滤波两种模式。
STC32G8K64 的2组CAN, 每个独立的 CAN,其 过滤器/筛选器,有单滤波、双滤波两种模式。
STC32G144K246 的2组CAN-FD, 每个独立的 CAN-FD,都最大支持16组 过滤器/筛选器 !
===CAN-FD 支持 CAN.
但 STC32G12K128 / STC32G8K64 已过车规认证,已大批量生产
如何 让 STC32G12K128 / STC32G8K64 的CAN 支持【3 ~ 4组 过滤器/筛选器】
===只能 2组 CAN 当 1组 CAN 使用,这样就可以支持 【3~4 组 过滤器/筛选器】
使用双滤波模式一组CAN可以设置2个滤波器,
如果需要设置只接受 3~4个 CANID 数据的话,
可以同时开启两组CAN模块并联接到CAN总线。
附件例子的几种过滤器设置:
- //定义过滤器接收的标准帧ID
- #define ACR_ID1 0x123
- #define ACR_ID2 0x125
-
- //定义过滤器接收的扩展帧ID
- #define ACR_ID5 0x12305678UL
- #define ACR_ID6 0x1234567aUL
-
- //标准帧,单滤波器
- CanWriteReg(ACR0,(u8)(ACR_ID1>>3));
- CanWriteReg(ACR1,(u8)(ACR_ID1<<5));
- // CanWriteReg(ACR2,(u8)(ACR_ID2>>8)); //过滤数据字节1内容
- // CanWriteReg(ACR3,(u8)(ACR_ID2)); //过滤数据字节2内容
- CanWriteReg(AMR0,0x00); //总线验收屏蔽寄存器
- CanWriteReg(AMR1,0x1F);
- CanWriteReg(AMR2,0xFF); //数据内容不过滤
- CanWriteReg(AMR3,0xFF);
-
- //扩展帧,单滤波器
- CanWriteReg(ACR0,(u8)(ACR_ID5>>21));
- CanWriteReg(ACR1,(u8)(ACR_ID5>>13));
- CanWriteReg(ACR2,(u8)(ACR_ID5>>5));
- CanWriteReg(ACR3,(u8)(ACR_ID5<<3));
- CanWriteReg(AMR0,0x00); //总线验收屏蔽寄存器
- CanWriteReg(AMR1,0x00);
- CanWriteReg(AMR2,0x00);
- CanWriteReg(AMR3,0x07);
-
- //标准帧,双滤波器
- CanWriteReg(ACR0,(u8)(ACR_ID1>>3));
- CanWriteReg(ACR1,(u8)(ACR_ID1<<5));
- CanWriteReg(ACR2,(u8)(ACR_ID2>>3));
- CanWriteReg(ACR3,(u8)(ACR_ID2<<5));
- CanWriteReg(AMR0,0x00); //总线验收屏蔽寄存器
- CanWriteReg(AMR1,0x1F);
- CanWriteReg(AMR2,0x00);
- CanWriteReg(AMR3,0x1F);
-
- //扩展帧,双滤波器
- CanWriteReg(ACR0,(u8)(ACR_ID5>>21));
- CanWriteReg(ACR1,(u8)(ACR_ID5>>13));
- CanWriteReg(ACR2,(u8)(ACR_ID6>>21));
- CanWriteReg(ACR3,(u8)(ACR_ID6>>13));
- CanWriteReg(AMR0,0x00); //总线验收屏蔽寄存器
- CanWriteReg(AMR1,0x00);
- CanWriteReg(AMR2,0x00);
- CanWriteReg(AMR3,0x00);
复制代码 CAN1每秒钟发送一帧报文,CANID从0x342~0x348;CAN2每秒钟发送一帧报文,CANID从0x120~0x125
CAN1只会接收ID=0x123, 0x125的报文,CAN2只会接收ID=0x345, 0x348的报文:
|