【笔记,5744P】FlexCAN模块demo测试验证

    科技2024-05-13  76

    目录

    1. 新建demo工程2. 编译下载3. 测试验证3.1 代码分析3.1.1 按键3.1.2 报文接收 3.2 验证3.2.1 按键发送报文3.2.2 接收报文关闭LED


    1. 新建demo工程



    2. 编译下载



    3. 测试验证


    3.1 代码分析


    3.1.1 按键


    void buttonISR(void) { /* Check if one of the buttons was pressed */ uint32_t button0 = PINS_DRV_GetPinExIntFlag(BTN0_EIRQ); uint32_t button1 = PINS_DRV_GetPinExIntFlag(BTN1_EIRQ); bool sendFrame = false; /* Set FlexCAN TX value according to the button pressed */ if (button0 != 0) { ledRequested = LED0_CHANGE_REQUESTED; sendFrame = true; /* Clear interrupt flag */ PINS_DRV_ClearPinExIntFlag(BTN0_EIRQ); } else if (button1 != 0) { ledRequested = LED1_CHANGE_REQUESTED; sendFrame = true; /* Clear interrupt flag */ PINS_DRV_ClearPinExIntFlag(BTN1_EIRQ); } else { PINS_DRV_ClearExIntFlag(); } if (sendFrame) { /* Send the information via CAN */ SendCANData(TX_MAILBOX, TX_MSG_ID, &ledRequested, 1UL); } }

    3.1.2 报文接收


    while(1) { /* Define receive buffer */ flexcan_msgbuff_t recvBuff; /* Start receiving data in RX_MAILBOX. */ FLEXCAN_DRV_Receive(INST_CANCOM1, RX_MAILBOX, &recvBuff); /* Wait until the previous FlexCAN receive is completed */ while(FLEXCAN_DRV_GetTransferStatus(INST_CANCOM1, RX_MAILBOX) == STATUS_BUSY); /* Check the received message ID and payload */ if((recvBuff.data[0] == LED0_CHANGE_REQUESTED) && recvBuff.msgId == RX_MSG_ID) { /* Toggle output value LED1 */ PINS_DRV_TogglePins(LED_PORT, (1 << LED0)); } else if((recvBuff.data[0] == LED1_CHANGE_REQUESTED) && recvBuff.msgId == RX_MSG_ID) { /* Toggle output value LED0 */ PINS_DRV_TogglePins(LED_PORT, (1 << LED1)); } }

    3.2 验证


    3.2.1 按键发送报文


    分别按一下按键SW1和SW2,可以在PCAN View上收到ID为0x01,长度为1的报文0x00和0x01,如下图:


    3.2.2 接收报文关闭LED


    配置PCAN View,新建并编辑Message,ID为0x02,发送长度为1,数据为0x00的报文,循环发送,周期为1000ms。配置如下图: 可以看到,LED闪烁。


    Processed: 0.010, SQL: 8