芯片:APMF072(与STM32F072全部适配)
在用Cubmx配置并生成代码后,需要另外手写CAN 滤波设置,否则无法使用。
//CAn filter config
CANFilterConfig();
//start can
HAL_CAN_Start(&hcan);
//enable FIFO 0 message pending interrupt
HAL_CAN_ActivateNotification(&hcan,CAN_IT_RX_FIFO0_MSG_PENDING);
void CANFilterConfig(void)
{
CAN_FilterTypeDef sFilterConfig;
sFilterConfig.FilterBank = 0;
sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
sFilterConfig.FilterIdHigh =0x0000;
sFilterConfig.FilterIdLow = 0x0000;
sFilterConfig.FilterMaskIdHigh = 0x0000;
sFilterConfig.FilterMaskIdLow = 0x0000;
sFilterConfig.FilterFIFOAssignment =CAN_RX_FIFO0;
sFilterConfig.FilterActivation = ENABLE;
sFilterConfig.SlaveStartFilterBank = 14;
HAL_CAN_ConfigFilter(&hcan, &sFilterConfig);
}
CAN滤波设置可以参考STM32CUBEMX系列——CAN通讯的配置_渔泽的博客-CSDN博客_stm32cubemx配置can
总结来讲:
1.CAN滤波设置主要设置滤波模式和位宽
滤波模式分为列表模式和掩码模式,位宽分为16位和32位,通过以上设置可以搭配出四种组合。
2.掩码模式的思路:对于一系列希望接收的ID,计算出这些ID的相同的部分,设置屏蔽码来保证只检查上述相同部分对应的位,并与验证码做对比,验证码可以是系统接收的任何一个ID。