HAL库没有提供Rx Buffer的检索API,需要用户自己简单检索位置读取,实现代码如下:
[C] 纯文本查看 复制代码 void HAL_FDCAN_RxBufferNewMessageCallback(FDCAN_HandleTypeDef *hfdcan)
{
HAL_StatusTypeDef Status;
uint8_t i, off;
if (hfdcan == &hfdcan1)
{
for(i = 0; i < 32; i++)
{
off = (hfdcan->Instance->NDAT1 & (1<<i) ) >> i;
if(off == 1)
{
/* 从RX Buffer读取数据, i值等同于FDCAN_RX_BUFFER */
Status = HAL_FDCAN_GetRxMessage(hfdcan, i, &g_Can1RxHeader, g_Can1RxData);
if(Status == HAL_OK)
{
bsp_PutMsg(MSG_CAN1_RxBuffer, 0); /* 发消息收到数据包,结果在g_Can1RxHeader, g_Can1RxData */
}
}
}
for(i = 0; i < 32; i++)
{
off = (hfdcan->Instance->NDAT2 & (1<<i) ) >> i;
if(off == 1)
{
/* 从RX Buffer读取数据, i值等同于FDCAN_RX_BUFFER */
Status = HAL_FDCAN_GetRxMessage(hfdcan, i+31, &g_Can1RxHeader, g_Can1RxData);
if(Status == HAL_OK)
{
bsp_PutMsg(MSG_CAN1_RxBuffer, 0); /* 发消息收到数据包,结果在g_Can1RxHeader, g_Can1RxData */
}
}
}
}
}
|