#include "bsp_can.h" #define CAN_TX_PAD_EP (uint32_t)0xF070 #define CAN_RX_PAD_EP (uint32_t)0xF070 #define CAN_BAUDRATE (uint32_t)500000 #define CAN_CLOCK_DIVIDER (3U) #define RX_BUFFER_NUM (8) #define TX_BUFFER_NUM (9) #define CAN_RX_GLOBAL_MASK 0x30 #define CAN_TX_ID 0xF3 #define CAN_RX_ID 0xF3 flexcan_frame_t Rx_Frame; flexcan_frame_t Tx_Frame; volatile bool CanRxComplete = false; void Bsp_CanInit(void) { IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_15_FLEXCAN2_RX,0U); //IO功能选择 IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_14_FLEXCAN2_TX,0U); IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_15_FLEXCAN2_RX, CAN_RX_PAD_EP); //IO电器属性配置 IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_14_FLEXCAN2_TX, CAN_TX_PAD_EP); CLOCK_SetMux(kCLOCK_CanMux, 2U); //选择时钟源 CLOCK_SetDiv(kCLOCK_CanDiv, CAN_CLOCK_DIVIDER); //设置时钟分频 uint32_t CanClk=((CLOCK_GetFreq(kCLOCK_Usb1PllClk)/6)/(CAN_CLOCK_DIVIDER+1)); //获取CAN时钟频率 flexcan_rx_mb_config_t Rx_Mb_Config; //接收邮箱配置结构体 flexcan_config_t CanConfig; //初始化配置结构体 FLEXCAN_GetDefaultConfig(&CanConfig); //先获取默认值 CanConfig.baudRate = CAN_BAUDRATE; //波特率设置 CanConfig.maxMbNum = 16; //消息缓冲区数量 CanConfig.enableLoopBack = false; //回环模式 CanConfig.enableSelfWakeup = false; //唤醒模式 CanConfig.enableIndividMask = false; //单个缓冲区掩码 CanConfig.disableSelfReception = false; //自接收 CanConfig.enableListenOnlyMode = false; //监听模式 FLEXCAN_Init(CAN2,&CanConfig,CanClk); //初始化CAN2 FLEXCAN_SetRxMbGlobalMask(CAN2,FLEXCAN_RX_MB_STD_MASK(CAN_RX_GLOBAL_MASK,0,0)); //设置全局掩码 FLEXCAN_EnableMbInterrupts(CAN2,1<