这段程序是用来配置CAN过滤器的。根据传入的CAN_InitStruct->Filter值,进行不同的配置。

如果CAN_InitStruct->Filter等于CLOSE,则关闭过滤器,将MSCAN寄存器的CANIDAR_BANK_1、CANIDMR_BANK_1、CANIDAR_BANK_2和CANIDMR_BANK_2都设置为0xFFFFFFFF。

否则,说明需要开启过滤器,首先将MSCAN寄存器的CANIDAC设置为0x00,表示双滤波模式。

然后,根据传入的CAN_InitStruct->RID来配置过滤器。

第一组过滤器的设置为:

  • CANIDAR_BANK_1[0]和CANIDAR_BANK_1[1]分别为CAN_InitStruct->RID右移3位和左移5位的结果,用来设置过滤器的标识符。
  • CANIDAR_BANK_1[2]和CANIDAR_BANK_1[3]设置为0xFF,表示不对标识符的扩展位进行过滤。
  • CANIDMR_BANK_1[0]设置为0x00,表示不对标识符的位0进行过滤。
  • CANIDMR_BANK_1[1]设置为0x1F,表示对标识符的位1-5进行过滤。
  • CANIDMR_BANK_1[2]和CANIDMR_BANK_1[3]设置为0xFF,表示不对标识符的位6-31进行过滤。

第二组过滤器的设置与第一组类似。

总的来说,这段程序通过修改MSCAN寄存器的相应位来配置CAN过滤器,从而过滤出需要的CAN消息

if CAN_InitStruct-Filter == CLOSE 		uint32_t &MSCAN-CANIDAR_BANK_10 = 0xFFFFFFFF;		uint32_t &MSCAN-CANIDMR_BANK_10 = 0xFFFFFFFF;		uint32_t &MSCAN-CANIDAR_BANK_20 = 0xFFFFFFFF;		uint32_t &MSCAN-CANIDM

原文地址: http://www.cveoy.top/t/topic/ii3f 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录