起因:在使用stm32单片机can通讯时,参考手册的介绍与寄存器封装有差别,不好理解怎么去设置寄存器。在参考一些代码时,对怎么去设置过滤器还是难以理解。
解决:
在寄存器封装库中,我们发现CAN过滤器设置寄存器封装有CAN1->sFilterRegister[ x ].FR1 和 CAN1->sFilterRegister[ x ].FR2 两个寄存器,其封装如下:
typedef struct
{
__IO uint32_t FR1;
__IO uint32_t FR2;
} CAN_FilterRegister_TypeDef;
我所碰到的问题便是这两个寄存器的如何设置问题。
首先我们得理解过滤器的格式,如下:
我们所要设置的寄存器CAN1->sFilterRegister[ x ].FR1便是如上图所说的标识符屏蔽模式中的 ID,
而CAN1->sFilterRegister[ x ].FR2, 就是屏蔽寄存器; 在标识符列表模式中,两者都是ID。
我们按上面的格式去设置寄存器: 标准ID / 拓展ID + IDE + RTR + x 。
已知 IDE = 0 代表标准ID, IDE =1 代表拓展ID; RTR = 0代表数据帧,RTR = 1代表远程帧;