牢星运 发表于 2024-11-5 11:01:56

AI32CAN总线滤波问题 (已解决)

本帖最后由 牢星运 于 2024-11-5 14:35 编辑

如题,我想让上位机给AI32发送指定ID的扩展帧。对AI32的两个CAN总线验收寄存器做了如下设置:

                CAN_write_reg(MR ,0x01);      //退出Reset Mode,设置为单滤波器
                CAN_write_reg(ACR0,0x18);      //总线验收代码寄存器
                CAN_write_reg(ACR1,0x28);      
                CAN_write_reg(ACR2,0xD0);      
                CAN_write_reg(ACR3,0xE0);      
                CAN_write_reg(AMR0,0x00);      //总线验收屏蔽寄存器
                CAN_write_reg(AMR1,0x00);
                CAN_write_reg(AMR2,0x00);
                CAN_write_reg(AMR3,0x07);

上位机发送扩展帧的ID是0x1828D0E0,但是单片机就是没有接收到。我是让单片机接收到帧后,就发出数据到电脑,但现在电脑的帧发出去后,单片机就没反应,不会往回发消息。
我把总线验收都屏蔽后,就能正常实现上述功能,就是把AMR都设成0xFF
请问我是哪里设置错误了吗?

乘风飞扬 发表于 2024-11-5 14:00:31

规格书里有介绍扩展帧单滤波器配置规则:

按照你的设置,CAN控制器允许接收的CAN ID是:0x1828D0E0>>3
也就是:0x03051A1C

牢星运 发表于 2024-11-5 14:14:25

为什么按我的设置,发送的帧ID还得右移三位呢?0x1828D0E0不是最高位算ID.28,然后最低三位无效的吗?

牢星运 发表于 2024-11-5 14:17:23

乘风飞扬 发表于 2024-11-5 14:00
规格书里有介绍扩展帧单滤波器配置规则:

按照你的设置,CAN控制器允许接收的CAN ID是:0x1828D0E0>>3


按您的说法,那么AMR3应该是最低位对应的是RTR,然后AMR0最高两位无效,高5位对应ID.28吧?

乘风飞扬 发表于 2024-11-5 14:22:03

牢星运 发表于 2024-11-5 14:17
按您的说法,那么AMR3应该是最低位对应的是RTR,然后AMR0最高两位无效,高5位对应ID.28吧? ...

AMR3的bit0,bit1无效,bit2是RTR。
AMR0~AMR2内容都是有效的。

牢星运 发表于 2024-11-5 14:29:57

乘风飞扬 发表于 2024-11-5 14:00
规格书里有介绍扩展帧单滤波器配置规则:

按照你的设置,CAN控制器允许接收的CAN ID是:0x1828D0E0>>3


嘶,懂了懂了,确实得先把ID左移三位才是寄存器的值,不然ID的低三位就被忽略了。ID的是29位,因为十六进制数的关系所以我平时发送的时候用了U32,其实高三位是无效的。

牢星运 发表于 2024-11-5 14:30:26

乘风飞扬 发表于 2024-11-5 14:00
规格书里有介绍扩展帧单滤波器配置规则:

按照你的设置,CAN控制器允许接收的CAN ID是:0x1828D0E0>>3


太感谢了老哥{:5_300:}

llyymm 发表于 2024-12-20 20:28:23

<p>正好我也要用到过滤,感谢你们的讨论,我也学习了</p>
页: [1]
查看完整版本: AI32CAN总线滤波问题 (已解决)