CAN_InitType CAN_InitStructure;
CAN_FilterInitType CAN_FilterInitStructure = {0};
CAN_InitStructure.CAN_TTC = DISABLE;
CAN_InitStructure.CAN_ABO = ENABLE;
CAN_InitStructure.CAN_AWU = ENABLE;
CAN_InitStructure.CAN_NART = DISABLE;
CAN_InitStructure.CAN_RFL = DISABLE;
CAN_InitStructure.CAN_TFP = DISABLE;
CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
switch (bulv)
{
case 1000:
{
CAN_InitStructure.CAN_BS1 = CAN_BS1_8tq;
CAN_InitStructure.CAN_BS2 = CAN_BS2_3tq;
CAN_InitStructure.CAN_Prescaler = 10;
}
break;
case 800:
{
CAN_InitStructure.CAN_BS1 = CAN_BS1_10tq;
CAN_InitStructure.CAN_BS2 = CAN_BS2_2tq;
CAN_InitStructure.CAN_Prescaler = 10;
}
break;
case 500:
{
CAN_InitStructure.CAN_BS1 = CAN_BS1_2tq;
CAN_InitStructure.CAN_BS2 = CAN_BS2_1tq;
CAN_InitStructure.CAN_Prescaler = 60;
}
break;
case 250:
{
CAN_InitStructure.CAN_BS1 = CAN_BS1_8tq;
CAN_InitStructure.CAN_BS2 = CAN_BS2_3tq;
CAN_InitStructure.CAN_Prescaler = 40;
}
break;
case 100:
{
CAN_InitStructure.CAN_BS1 = CAN_BS1_14tq;
CAN_InitStructure.CAN_BS2 = CAN_BS2_5tq;
CAN_InitStructure.CAN_Prescaler = 60;
}
break;
case 50:
{
CAN_InitStructure.CAN_BS1 = CAN_BS1_14tq;
CAN_InitStructure.CAN_BS2 = CAN_BS2_5tq;
CAN_InitStructure.CAN_Prescaler = 120;
}
break;
case 20:
{
CAN_InitStructure.CAN_BS1 = CAN_BS1_14tq;
CAN_InitStructure.CAN_BS2 = CAN_BS2_5tq;
CAN_InitStructure.CAN_Prescaler = 300;
}
break;
default:
{
CAN_InitStructure.CAN_BS1 = CAN_BS1_8tq;
CAN_InitStructure.CAN_BS2 = CAN_BS2_3tq;
CAN_InitStructure.CAN_Prescaler =10;
}
break;
}
CAN_Init(CAN2, &CAN_InitStructure); ///<SYSCLK=240M, APB1CLK=120M, CAN Baudrate=(240/2)*1000K)/((1+9)*(3+7+2)) = 1000K
CAN_FilterInitStructure.CAN_FilterNumber=0;
CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;
CAN_FilterInitStructure.CAN_FilterIdHigh=0x0;
CAN_FilterInitStructure.CAN_FilterIdLow=0x0;
CAN_FilterInitStructure.CAN_FilterMskIdHigh=0x0;
CAN_FilterInitStructure.CAN_FilterMskIdLow=0x0;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FIFO0;
CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
CAN_FilterInit(CAN2, &CAN_FilterInitStructure);
CAN_INTConfig(CAN2,CAN_INT_RFP0,ENABLE);
CAN配置 |