目录
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)
{
uint32_t button0
= PINS_DRV_GetPinExIntFlag(BTN0_EIRQ
);
uint32_t button1
= PINS_DRV_GetPinExIntFlag(BTN1_EIRQ
);
bool sendFrame
= false
;
if (button0
!= 0)
{
ledRequested
= LED0_CHANGE_REQUESTED
;
sendFrame
= true
;
PINS_DRV_ClearPinExIntFlag(BTN0_EIRQ
);
}
else if (button1
!= 0)
{
ledRequested
= LED1_CHANGE_REQUESTED
;
sendFrame
= true
;
PINS_DRV_ClearPinExIntFlag(BTN1_EIRQ
);
}
else
{
PINS_DRV_ClearExIntFlag();
}
if (sendFrame
)
{
SendCANData(TX_MAILBOX
, TX_MSG_ID
, &ledRequested
, 1UL);
}
}
3.1.2 报文接收
while(1)
{
flexcan_msgbuff_t recvBuff
;
FLEXCAN_DRV_Receive(INST_CANCOM1
, RX_MAILBOX
, &recvBuff
);
while(FLEXCAN_DRV_GetTransferStatus(INST_CANCOM1
, RX_MAILBOX
) == STATUS_BUSY
);
if((recvBuff
.data
[0] == LED0_CHANGE_REQUESTED
) &&
recvBuff
.msgId
== RX_MSG_ID
)
{
PINS_DRV_TogglePins(LED_PORT
, (1 << LED0
));
}
else if((recvBuff
.data
[0] == LED1_CHANGE_REQUESTED
) &&
recvBuff
.msgId
== RX_MSG_ID
)
{
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闪烁。