I use these codes to initialize CAN3:
const flexcan_config_t CAN3_config = {
.clksrc=kFLEXCAN_ClkSrc0,
.wakeupsrc=kFLEXCAN_WakeupSrcFiltered,
.bitRate = 1000000UL,
.bitRateFD = 7500000UL,
.maxMbNum = 12U,
.enableLoopBack = false,
.enableTimerSync = true,
.enableSelfWakeup = false,
.enableIndividMask = false,
.disableSelfReception = false,
.enableListenOnlyMode = false,
.enableDoze = false,
.timingConfig = {
.preDivider = 5,
.propSeg = 1,
.phaseSeg1 = 1,
.phaseSeg2 = 4,
.rJumpwidth = 2,
.fpreDivider = 0,
.fpropSeg = 1,
.fphaseSeg1 = 2,
.fphaseSeg2 = 2,
.frJumpwidth = 2
}
};
/* Message buffer 0 configuration structure */
const flexcan_rx_mb_config_t CAN3_rx_mb_config_0 = {
.id = FLEXCAN_ID_EXT(134250504UL),
.format = kFLEXCAN_FrameFormatExtend,
.type = kFLEXCAN_FrameTypeData
};
flexcan_handle_t CAN3_handle;
static void CAN3_init(void) {
FLEXCAN_FDInit(CAN3_PERIPHERAL, &CAN3_config, CAN3_CLOCK_SOURCE, kFLEXCAN_64BperMB, true);
/* Message buffer 0 initialization */
FLEXCAN_SetRxMbConfig(CAN3_PERIPHERAL, 0, &CAN3_rx_mb_config_0, true);
/* Message buffer 1 initialization */
FLEXCAN_SetTxMbConfig(CAN3_PERIPHERAL, 1, true);
FLEXCAN_TransferCreateHandle(CAN3_PERIPHERAL, &CAN3_handle, NULL, NULL);
}



If clksrc is kFLEXCAN_ClkSrc1, then CTRL1[CLKSRC] will be 1.
If I set clksrc to kFLEXCAN_ClkSrc1, change CAN3_CLOCK_SOURCE from 60M to 150M, but do not modify the timingConfig, the baud rate observed on the oscilloscope will become 2/5 of the original, which is exactly 60/150. FLEXCAN_FDInit will modify the value of the prescaler according to timingConfig, so I think CAN3 does not successfully switch to the IPG clock source, and FLEXCAN_FDInit sets the prescaler according to the predetermined 150M, which causes the baud rate to drop.