找回密码
 立即注册
查看: 2084|回复: 10

关于CAN过滤器配置使用问题 | 已解决

[复制链接]
已绑定手机

2

主题

13

回帖

88

积分

注册会员

积分
88
发表于 2023-7-25 09:02:31 来自手机 | 显示全部楼层 |阅读模式
首先是看到我们实验箱例程中的CAN滤波配置,备注是过滤只接收的ID,看到程序下面实际配置ACR,AMR和备注接收的ID怎么对应上去,看了参考资料是说在AMR位为1是不屏蔽位这个好理解,手册上说当AMR位为0时需要ACR位和接收ID位必须相同才可以接收,比如例程里的标准帧单滤波器只接收0x07fe,那么ACR不是也应该和这个接收ID的数据相同吗?这样当AMR位为0时ACR位才能与接收ID进行位对应啊!所以根据手册上是这么理解的,但我看demo例程配置却根本又不是那么回事儿,度了下stm32的配置图就很好理解而和我的想法也相同,如果我们手册中有这么简单明了的配置图就好了,不知道我理解错误在哪方面寻思许久百思不得其解,希望论坛高手给指导一下
mmexport1690245828639.jpg
mmexport1690246600312.jpg
mmexport1690246575596.jpg
0001-cf62772ff51faf1dc6aaa39a4dce845e_preview.png
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:208
  • 最近打卡:2025-10-15 11:03:15

787

主题

1万

回帖

1万

积分

管理员

积分
19770
发表于 2023-7-25 11:17:17 | 显示全部楼层

点评

这个下载看过了,参考文献sja1000,zlg,,,别的can开发版资料我理解能力太差了琢磨不透  发表于 2023-7-25 11:49
回复

使用道具 举报 送花

已绑定手机

2

主题

13

回帖

88

积分

注册会员

积分
88
发表于 2023-7-25 16:18:47 来自手机 | 显示全部楼层
经过认真研究了资料手册,确实大意了感谢神长老的回复,遇到困难还是多得看资料啊!
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:53
  • 最近打卡:2025-05-12 10:50:27

0

主题

23

回帖

304

积分

中级会员

积分
304
发表于 2024-2-18 21:32:45 | 显示全部楼层
我的理解就是验收码和屏蔽码,屏蔽对应位为1时候,那么就忽略验收码,如果设置为0,那么就接收到ID这一位就要必须与验收码一致,通过这种组合可以实现过滤一定范围的ID。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:53
  • 最近打卡:2025-05-12 10:50:27

0

主题

23

回帖

304

积分

中级会员

积分
304
发表于 2024-2-18 21:35:18 | 显示全部楼层
STM32的匹配逻辑与STC32G好像是想反的,
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:208
  • 最近打卡:2025-10-15 11:03:15

787

主题

1万

回帖

1万

积分

管理员

积分
19770
发表于 2024-2-18 21:38:29 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:208
  • 最近打卡:2025-10-15 11:03:15

787

主题

1万

回帖

1万

积分

管理员

积分
19770
发表于 2024-2-18 21:40:11 | 显示全部楼层
结合最新的数据手册


截图202402182139179159.jpg

截图202402182140068468.jpg


回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2024-02-26 10:54:48

6

主题

18

回帖

172

积分

注册会员

积分
172
发表于 2024-2-22 14:02:42 | 显示全部楼层
我也研究半天,原来是有一位RTR给错位了
截图202402221401042386.jpg
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-10-06 16:41:53
已绑定手机

0

主题

2

回帖

8

积分

新手上路

积分
8
发表于 2025-10-6 16:41:53 | 显示全部楼层
求教,头都快炸了。厂家例程什么问题都没有,但是自己配的双滤波怎么都不好用,发送指定ID的消息就是没反应。求帮忙看看我哪里写的不对。我只想接收2D0和2D2的ID
void CANInit(void)
{
        P_SW2 |= 0x80;                            //将EAXFR位置1,以访问在XDATA区域的扩展SFR

        //-------- CAN2 --------
        CANEN = 1;          //CAN1模块使能
        CANSEL = 0;         //选择CAN1模块
        P_SW1 = (P_SW1 & ~0x30) | 0x10;                //CAN1: CANRX(P5.0), CANTX(P5.1)


        CanWriteReg(MR  ,0x04);                //使能 Reset Mode
        CANSetBaudrate();                                        //设置波特率

        // 滤波器:接收ID=0x2D0和2D2
        CanWriteReg(ACR0, 0xD2);   
        CanWriteReg(ACR1, 0x02);   
        CanWriteReg(ACR2, 0xD0);   
        CanWriteReg(ACR3, 0x02);   
        CanWriteReg(AMR0, 0x00);   
        CanWriteReg(AMR1, 0x0F);   
        CanWriteReg(AMR2, 0x00);   
        CanWriteReg(AMR3, 0x0F);   
               

        CanWriteReg(IMR ,0xff);                //中断寄存器
        CanWriteReg(ISR ,0xff);                //清中断标志
        CanWriteReg(MR  ,0x00);                //退出 Reset Mode   00
        CANICR |= 0x02;                                                //CAN1中断使能
}
9a52805ea954b081fec1bcedd556c8d.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:532
  • 最近打卡:2025-10-15 08:56:42
已绑定手机

47

主题

2274

回帖

7995

积分

论坛元老

积分
7995
发表于 7 天前 | 显示全部楼层
eqpw*** 发表于 2025-10-6 16:41
求教,头都快炸了。厂家例程什么问题都没有,但是自己配的双滤波怎么都不好用,发送指定ID的消息就是没反应 ...

屏蔽验收代码寄存器参考例子设置:

  1. CanWriteReg(MR  ,0x04);                //使能 Reset Mode
  2.         CANSetBaudrate();        //设置波特率
  3.        
  4.         CanWriteReg(ACR0,0x5A);                //总线验收代码寄存器
  5.         CanWriteReg(ACR1,0x00);
  6.         CanWriteReg(ACR2,0x5A);
  7.         CanWriteReg(ACR3,0x40);
  8.         CanWriteReg(AMR0,0x00);                //总线验收屏蔽寄存器
  9.         CanWriteReg(AMR1,0x0F);
  10.         CanWriteReg(AMR2,0x00);
  11.         CanWriteReg(AMR3,0x0F);
  12.         CanWriteReg(IMR ,0xff);                //中断寄存器
  13.         CanWriteReg(ISR ,0xff);                //清中断标志
  14.         CanWriteReg(MR  ,0x00);                //退出 Reset Mode, 双滤波模式
  15.         CANICR = 0x02;                                //CAN中断使能
复制代码
AMRx寄存器相关位置0,无关位置1。
ACRx寄存器相关位设置需要接收的ID值,无关位随便设(例子置0)。
截图202510091155384955.jpg
测试结果,CAN1只接收ID=0x2D0与0x2D2的报文:
截图202510091157135689.jpg

CAN1-CAN2总线标准帧同时使用收发测试-ID2D0与2D2.zip

21.51 KB, 下载次数: 3

回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-10-16 05:42 , Processed in 0.143641 second(s), 104 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表