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
请问我是哪里设置错误了吗?
规格书里有介绍扩展帧单滤波器配置规则:
按照你的设置,CAN控制器允许接收的CAN ID是:0x1828D0E0>>3
也就是:0x03051A1C 为什么按我的设置,发送的帧ID还得右移三位呢?0x1828D0E0不是最高位算ID.28,然后最低三位无效的吗? 乘风飞扬 发表于 2024-11-5 14:00
规格书里有介绍扩展帧单滤波器配置规则:
按照你的设置,CAN控制器允许接收的CAN ID是:0x1828D0E0>>3
按您的说法,那么AMR3应该是最低位对应的是RTR,然后AMR0最高两位无效,高5位对应ID.28吧? 牢星运 发表于 2024-11-5 14:17
按您的说法,那么AMR3应该是最低位对应的是RTR,然后AMR0最高两位无效,高5位对应ID.28吧? ...
AMR3的bit0,bit1无效,bit2是RTR。
AMR0~AMR2内容都是有效的。 乘风飞扬 发表于 2024-11-5 14:00
规格书里有介绍扩展帧单滤波器配置规则:
按照你的设置,CAN控制器允许接收的CAN ID是:0x1828D0E0>>3
嘶,懂了懂了,确实得先把ID左移三位才是寄存器的值,不然ID的低三位就被忽略了。ID的是29位,因为十六进制数的关系所以我平时发送的时候用了U32,其实高三位是无效的。 乘风飞扬 发表于 2024-11-5 14:00
规格书里有介绍扩展帧单滤波器配置规则:
按照你的设置,CAN控制器允许接收的CAN ID是:0x1828D0E0>>3
太感谢了老哥{:5_300:} <p>正好我也要用到过滤,感谢你们的讨论,我也学习了</p>
页:
[1]