一、时钟配置SystemClockM7600MM4, AXI, AHB(1,2,5,6,9) clock is 300MHz,APB(1,2,5,6) clock is 150MHz./* Config PLL prescaler for FDCAN */ RCC_ConfigFDCAN1_2_5_6_KerSysDivider(RCC_FDCANKERCLK_SYSDIV4); // 300/475M /* Select PLL as FDCAN clock source */ RCC_ConfigFDCAN1KerClkSource(RCC_FDCANKERCLK_SRC_SYSDIV); RCC_ConfigFDCAN2KerClkSource(RCC_FDCANKERCLK_SRC_SYSDIV); RCC_ConfigFDCAN5KerClkSource(RCC_FDCANKERCLK_SRC_SYSDIV); RCC_ConfigFDCAN6KerClkSource(RCC_FDCANKERCLK_SRC_SYSDIV); RCC_ConfigFDCAN3_4_7_8_KerSysDivider(RCC_FDCANKERCLK_SYSDIV4); RCC_ConfigFDCAN3KerClkSource(RCC_FDCANKERCLK_SRC_SYSDIV); RCC_ConfigFDCAN4KerClkSource(RCC_FDCANKERCLK_SRC_SYSDIV); RCC_ConfigFDCAN7KerClkSource(RCC_FDCANKERCLK_SRC_SYSDIV); RCC_ConfigFDCAN8KerClkSource(RCC_FDCANKERCLK_SRC_SYSDIV);二、波特率配置FDCAN_InitType InitParam; FDCAN_FilterType FilterParam; NVIC_InitType NVIC_Struct; /* Enable NODE1 clock */ RCC_EnableAPB1PeriphClk5(NODE1_PERIPH,ENABLE); /* Reset NODE1 register */ RCC_EnableAPB1PeriphReset5(NODE1_PERIPHRST); /** FDCAN config parameter **/ InitParam.FrameFormat FDCAN_FRAME_FD_BRS; /* Frame format */ InitParam.Mode FDCAN_MODE_NORMAL; /* Work mode */ InitParam.Prescaler 3; /* Nominal timing */ InitParam.SyncJumpWidth 10; InitParam.TimeSeg1 39; InitParam.TimeSeg2 10; InitParam.DataPrescaler 3; /* Data timing */ InitParam.DataSyncJumpWidth 4; InitParam.DataTimeSeg1 20; InitParam.DataTimeSeg2 4; InitParam.MsgRamStrAddr FDCAN_START_ADDRESS_SRAM5BANK1; /* Msg ram start address, shared by all FDCAN modules */ InitParam.MsgRamOffset 0; /* Current NODE1 msg ram start offset */ InitParam.pMsgInfo Node1_msg; InitParam.StdFilterSize 0; /* Standard filter list */ InitParam.ExtFilterSize 1; /* Extended filter list */ InitParam.RxFifo0Size 2; /* Rx FIFO 0*/ InitParam.RxFifo0DataSize FDCAN_DATA_BYTES_16; InitParam.RxFifo1Size 0; /* Rx FIFO 1*/ InitParam.RxFifo1DataSize FDCAN_DATA_BYTES_16; InitParam.RxBufferSize 0; /* Dedicate Rx buffer */ InitParam.RxBufferDataSize FDCAN_DATA_BYTES_16; InitParam.TxBufferSize 1; /* Tx buffer*/ InitParam.TxBufferDataSize FDCAN_DATA_BYTES_16; InitParam.TxFifoQueueSize 0; /* Tx FIFO */ InitParam.TxFifoQueueMode FDCAN_TX_FIFO_MODE; InitParam.TxEventSize 0; /* Tx event fifo */ InitParam.AutoRetransmission ENABLE; /* Enable auto retransmission */ InitParam.TransmitPause DISABLE; /* Disable transmit pause*/ InitParam.ProtocolException ENABLE; /* Enable Protocol Exception Handling */ /* Init NODE1 */ FDCAN_Init(NODE1,InitParam); /* Configure standard ID reception filter to Rxfifo 0 */ FilterParam.IdType FDCAN_EXTENDED_ID; FilterParam.FilterIndex 0; FilterParam.FilterType FDCAN_FILTER_MASK; FilterParam.FilterConfig FDCAN_FILTER_TO_RXFIFO0; FilterParam.FilterID1 0x0AAAAAAA; FilterParam.FilterID2 0x1FFFFFFF; FDCAN_ConfigFilter(NODE1,FilterParam); FDCAN_ConfigGlobalFilter( NODE1, FDCAN_REJECT_STD, FDCAN_REJECT_EXT, FDCAN_REJECT_STD_REMOTE, FDCAN_REJECT_EXT_REMOTE); FDCAN_ConfigTSPrescaler(NODE1,FDCAN_TIMESTAMP_PRESC_16); FDCAN_Config_TS(NODE1,FDCAN_TIMESTAMP_INTERNAL); FDCAN_ConfigIntLine(NODE1,FDCAN_INT_TX_COMPLETE,FDCAN_INTERRUPT_LINE1); FDCAN_ActivateInt(NODE1,FDCAN_INT_TX_COMPLETE,FDCAN_TX_BUFFER0); /* Start the FDCAN module */ FDCAN_Start(NODE1); TxHeader.ID 0x15555555; TxHeader.IdType FDCAN_EXTENDED_ID; TxHeader.TxFrameType FDCAN_DATA_FRAME; TxHeader.DataLength FDCAN_DLC_BYTES_16; TxHeader.ErrorState FDCAN_ESI_PASSIVE; TxHeader.BitRateSwitch FDCAN_BRS_ON; TxHeader.FDFormat FDCAN_FD_CAN; TxHeader.TxEventFifo FDCAN_NO_TX_EVENTS; TxHeader.MsgMarker 0x55; NVIC_Struct.NVIC_IRQChannel NODE1_IRQN; NVIC_Struct.NVIC_IRQChannelSubPriority NVIC_SUB_PRIORITY_0; NVIC_Struct.NVIC_IRQChannelPreemptionPriority NVIC_PRE_PRIORITY_0; NVIC_Struct.NVIC_IRQChannelCmd ENABLE; NVIC_Init(NVIC_Struct);CANFD数据域波特率计算数据域波特率计算数据波特率 数据时钟频率 / (数据预分频器 × 数据位时间)数据波特率*数据预分配系数*数据位时间数据时钟频率预分频系数数据时钟频率/(数据波特率*数据位时时间)数据时钟频率75Mhz75000Mhz75000 000hz一个完整的数据位时间由同步段、相位段1和相位段2组成单位为时间量子Tq。即同步段相位段1相位段2总时间量子Tq同步段 (Sync_Seg):固定为1 Tq。相位段1 (DataTimeSeg1):配置为20Tq。相位段2 (DataTimeSeg2):配置为4 Tq。InitParam.DataPrescaler 3; /* Data timing */ InitParam.DataSyncJumpWidth 4; InitParam.DataTimeSeg1 20; InitParam.DataTimeSeg2 4;数据域波特率75000khz/(3*25Tq)1000K1M仲裁域数据波特率计算InitParam.Prescaler 3; /* Nominal timing */ InitParam.SyncJumpWidth 10; InitParam.TimeSeg1 39; InitParam.TimeSeg2 10;75000/(3*50)500K