RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_CAN1);
NVIC_EnableIRQRequest(USBD1_LP_CAN1_RX0_IRQn, 0, 0);
void CAN_GPIO_Init(void)
{
RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_AFIO);
RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_GPIOA);
GPIO_Config_T configStruct;
GPIO_ConfigPinRemap(GPIO_REMAP2_CAN1);
configStruct.pin = GPIO_PIN_12;
configStruct.mode = GPIO_MODE_AF_PP;
configStruct.speed = GPIO_SPEED_50MHz;
GPIO_Config(GPIOA, &configStruct);
configStruct.pin = GPIO_PIN_11;
configStruct.mode = GPIO_MODE_IN_PU;
GPIO_Config(GPIOA, &configStruct);
}
void CAN_Config_Init(void)
{
RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_CAN1); //使能CAN时钟
CAN_Config_T canConfig;
CAN_FilterConfig_T FilterStruct;
CAN_Reset(CAN1);
CAN_ConfigStructInit(&canConfig);
canConfig.autoBusOffManage = DISABLE;
canConfig.autoWakeUpMode = DISABLE;
canConfig.nonAutoRetran = DISABLE;
canConfig.rxFIFOLockMode = DISABLE;
canConfig.txFIFOPriority = ENABLE;
canConfig.mode = CAN_MODE_NORMAL;
canConfig.syncJumpWidth = CAN_SJW_1;
canConfig.timeSegment1 = CAN_TIME_SEGMENT1_3;
canConfig.timeSegment2 = CAN_TIME_SEGMENT2_2; // 100K
canConfig.prescaler = 60;
CAN_Config(CAN1,&canConfig);
FilterStruct.filterNumber = 1;
FilterStruct.filterMode = CAN_FILTER_MODE_IDMASK;
FilterStruct.filterScale = CAN_FILTER_SCALE_32BIT;
FilterStruct.filterIdHigh = 0x6420;
FilterStruct.filterIdLow = 0x0000;
FilterStruct.filterMaskIdHigh = 0x0000;
FilterStruct.filterMaskIdLow = 0x0000;
FilterStruct.filterFIFO = CAN_FILTER_FIFO_0;
FilterStruct.filterActivation = ENABLE;
CAN_ConfigFilter(CAN1,&FilterStruct);
}
void CAN_Transmit_Init(void)
{
// TxMessage.stdID = 0x321;
TxMessage.stdID = 0x00;
TxMessage.extID = 0x01;
TxMessage.remoteTxReq = CAN_RTXR_DATA;
TxMessage.typeID = CAN_TYPEID_STD;
TxMessage.dataLengthCode = 1;
}
CAN_EnableInterrupt(CAN1,CAN_INT_F0MP);
while(1)
{
TxMessage.data[0] = 0x55;
CAN_TxMessage(CAN1,&TxMessage);
}
|