找回密码
 立即注册
楼主: stcstc

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

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-11-01 11:09:43
已绑定手机

0

主题

5

回帖

18

积分

新手上路

积分
18
发表于 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
  • 打卡总天数:544
  • 最近打卡:2025-10-31 09:14:02
已绑定手机

48

主题

2300

回帖

8120

积分

论坛元老

积分
8120
发表于 2025-10-9 11:59:02 | 显示全部楼层
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, 下载次数: 7

回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-11-01 11:09:43
已绑定手机

0

主题

5

回帖

18

积分

新手上路

积分
18
发表于 昨天 11:09 | 显示全部楼层
乘风*** 发表于 2025-10-9 11:59
屏蔽验收代码寄存器参考例子设置:

AMRx寄存器相关位置0,无关位置1。

恩人,你这个好用,我算不下20遍结果就是这个:       
        CanWriteReg(ACR0,0x5A);                //总线验收代码寄存器
        CanWriteReg(ACR1,0x00);
        CanWriteReg(ACR2,0x5A);
        CanWriteReg(ACR3,0x40);
        CanWriteReg(AMR0,0x00);                //总线验收屏蔽寄存器
        CanWriteReg(AMR1,0x0F);
        CanWriteReg(AMR2,0x00);
        CanWriteReg(AMR3,0x0F);

只有2D0好用,2D2就是不行,你的40好用了,我在研究下你怎么算的,太感谢啦!!!
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-11-01 11:09:43
已绑定手机

0

主题

5

回帖

18

积分

新手上路

积分
18
发表于 昨天 11:24 | 显示全部楼层
乘风*** 发表于 2025-10-9 11:59
屏蔽验收代码寄存器参考例子设置:

AMRx寄存器相关位置0,无关位置1。

刚才又重算了一遍,移位时候2D2的移动错了一位。。。哎,要不是你给出的0X40我现在还没明白。。。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-11-01 11:09:43
已绑定手机

0

主题

5

回帖

18

积分

新手上路

积分
18
发表于 昨天 12:32 | 显示全部楼层
乘风*** 发表于 2025-10-9 11:59
屏蔽验收代码寄存器参考例子设置:

AMRx寄存器相关位置0,无关位置1。

还有就是想请教下这个STC32又2路can,一路can只能过滤2个ID,所以说这个单片机最多也就只能过滤4路canID吗?
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-11-2 05:35 , Processed in 0.130051 second(s), 74 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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