STM32H7的CANFD Rx Buffer回调函数处理方法

HAL库没有提供Rx Buffer的检索API,需要用户自己简单检索位置读取,实现代码如下:
`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 */                       
                            }               
                    }
            }
    }

}`

文章来源:https://www.armbbs.cn/forum.php?mod=viewthread&tid=119114

posted @ 2025-05-08 09:07  不惑而已  阅读(107)  评论(0)    收藏  举报