/* CAN init function */
void MX_CAN_Init(void)
{
CAN_FilterConfTypeDef filter;
hcan.Instance = CAN1;
hcan.Init.Prescaler = 3;
// hcan.Init.Mode = CAN_MODE_NORMAL;
hcan.Init.Mode = CAN_MODE_LOOPBACK;
hcan.Init.SJW = CAN_SJW_1TQ;
hcan.Init.BS1 = CAN_BS1_12TQ;
hcan.Init.BS2 = CAN_BS2_2TQ;
hcan.Init.TTCM = DISABLE;
hcan.Init.ABOM = DISABLE;
hcan.Init.AWUM = DISABLE;
hcan.Init.NART = DISABLE;
hcan.Init.RFLM = DISABLE;
hcan.Init.TXFP = ENABLE;
//在cube生成的基础上添加以下三项,用于保存收发的内容
hcan.pTxMsg = &CAN_TX_MSG; //用于保存要发送的内容
hcan.pRxMsg = &CAN_RX0_MSG; //对应fifo0接收
hcan.pRx1Msg = &CAN_RX1_MSG; //对应fifo1接收
if (HAL_CAN_Init(&hcan) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
filter.FilterNumber=1;
filter.FilterMode=CAN_FILTERMODE_IDMASK;
filter.FilterScale=CAN_FILTERSCALE_32BIT;
filter.FilterIdHigh=0x0000;
filter.FilterIdLow=0x0000;
filter.FilterMaskIdHigh=0x0000;
filter.FilterMaskIdLow=0x0000;
filter.FilterFIFOAssignment=CAN_FIFO0;
filter.FilterActivation=ENABLE;
if( HAL_CAN_ConfigFilter(&hcan,&filter) != HAL_OK) //刚开始因为没有加过滤配置,导致数据一直收不到,所以接收中断进不去。
{
Error_Handler();
}
if(HAL_CAN_Receive_IT(&hcan,CAN_FIFO0) != HAL_OK) // 打开接收中断(注意cube自动生成的中断处理会再次清除中断使能,所以只能接受一次,想要反复接收每次接收万要重新打开)
{
Error_Handler();
}
}