请教个问题: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闪烁表示收到数据)
想请教下,是我哪里配置错了吗?
退出Reset模式时需要注意滤波模式选择,如果采用单滤波设置的话MR的bit0要置1:
突然就搞清楚了!
事情是这样,上述案例开启的是双过滤器配置,且仅配置了一个过滤器,那么另一个过滤器则会对所有的CANID都放行。这样,只要有一个过滤器对CANID放行了,就算是通过了双过滤器的检验。
这样一来,解决方法就是要让过滤器1也起作用而不是对任意的CANID都放行,然后再配置过滤器2,选择期望的CANID通过,就这样。 学些了,正好我也想要测试接收特定的ID数据
页:
[1]