BeHappy 发表于 2024-5-9 22:02:39

请教个问题:CAN外设对标准帧开启双过滤器设置未达预期 | 已清楚

事情是这样,手里有2块STC32G12K128-Beta mcu的开发板,分别用作CAN标准帧的接收和发送实验。

AMRx寄存器全部配置为0FFH的情况下,一收一发表现正常。
现在,想开启对CAN数据标准帧的双滤波设置。收/发端的CANID都设置为0177H,接收端,仅接收不发送数据。按照 20240415 发布的文档第 963 页的说明,只想让接收端接收CANID以17H开头的CAN数据标准帧,做了如下设置:
MOV                A, #ACR0
      MOV                B, #2EH
      LCALL      CANWRITEREG
      
      MOV                A, #ACR1
      MOV                B, #00H
      LCALL      CANWRITEREG
      
      MOV                A, #ACR2
      MOV                B, #00H
      LCALL      CANWRITEREG
      
      MOV                A, #ACR3
      MOV                B, #00H
      LCALL      CANWRITEREG
      
      MOV                A, #AMR0
      MOV                B, #00H
      LCALL      CANWRITEREG
      
      MOV                A, #AMR1
      MOV                B, #0FFH
      LCALL      CANWRITEREG
      
      MOV                A, #AMR2
      MOV                B, #0FFH
      LCALL      CANWRITEREG
      
      MOV                A, #AMR3
      MOV                B, #0FFH
      CALL      CANWRITEREG
      
      MOV                A, #IMR
      MOV                B, #0FFH
      CALL      CANWRITEREG
      
      MOV                A, #ISR
      MOV                B, #0FFH
      CALL      CANWRITEREG
      
      ; exit from reset mode
      MOV                A, #MR
      MOV                B, #00H
      CALL      CANWRITEREG
      
      ; enable CAN interrupt
      MOV                CANICR, #02H
      ; set CAN interrupt priority to #1
      ORL                CANICR, #01H
      ANL                CANICR, #NOT 08H其中,AMR0寄存器赋值为00H,表示只对CANID的高8位(ID.10~ID.3)感兴趣,剩下的AMRx全部赋值为0FFH,表示对剩下的bit位不感兴趣。
那么,对应的,ACR0被赋值为2EH。上面这段代码也是这个意思。

问题:
把发送端的CANID改为0117H后,接收端仍然可以收到数据(并不显示数据,在中断里以led闪烁表示收到数据)
想请教下,是我哪里配置错了吗?

乘风飞扬 发表于 2024-5-10 09:23:00

退出Reset模式时需要注意滤波模式选择,如果采用单滤波设置的话MR的bit0要置1:

BeHappy 发表于 2024-5-10 15:18:44

突然就搞清楚了!
事情是这样,上述案例开启的是双过滤器配置,且仅配置了一个过滤器,那么另一个过滤器则会对所有的CANID都放行。这样,只要有一个过滤器对CANID放行了,就算是通过了双过滤器的检验。
这样一来,解决方法就是要让过滤器1也起作用而不是对任意的CANID都放行,然后再配置过滤器2,选择期望的CANID通过,就这样。
页: [1]
查看完整版本: 请教个问题:CAN外设对标准帧开启双过滤器设置未达预期 | 已清楚