Browse Source

【主线待合】解决CAN帧ID处理有误的问题,之前没暴露出来是因为一直试的单字节ID

master
Lizongdi 1 day ago
parent
commit
a76e019cf9
  1. 7
      bspMCU/bsp_CAN.c
  2. 2
      bspMCU/include/bsp_CAN.h
  3. 2
      bspMCU/l_can.c

7
bspMCU/bsp_CAN.c

@ -127,10 +127,11 @@ void CAN_RX_IRQHandler(TComCtrl *_ptComCtrl)
} }
} }
int CAN_TX_FIFOQ(TComCtrl *_ptComCtrl, uint32_t _iFrameID, char *_pBuffer, uint32_t _iSize) int CAN_TX_FIFOQ(TComCtrl *_ptComCtrl, char *_pBuffer, uint32_t _iSize)
{ {
TCANUserData *ptCANUserData = (TCANUserData *)_ptComCtrl->m_pUserData; TCANUserData *ptCANUserData = (TCANUserData *)_ptComCtrl->m_pUserData;
ptCANUserData->m_cantx->BitRateSwitch = FDCAN_BRS_OFF; ptCANUserData->m_cantx->BitRateSwitch = FDCAN_BRS_OFF;
uint32_t iFrameID = (_pBuffer[0] & 0xFF) | ((_pBuffer[1] & 0xFF) << 8) | ((_pBuffer[2] & 0xFF) << 16) | ((_pBuffer[3] & 0xFF) << 24);
#if CONFIG_CAN_NEW_VERSION #if CONFIG_CAN_NEW_VERSION
ptCANUserData->m_cantx->DataLength = (uint32_t) _iSize; ptCANUserData->m_cantx->DataLength = (uint32_t) _iSize;
@ -139,9 +140,9 @@ int CAN_TX_FIFOQ(TComCtrl *_ptComCtrl, uint32_t _iFrameID, char *_pBuffer, uint3
#endif #endif
ptCANUserData->m_cantx->FDFormat = FDCAN_CLASSIC_CAN; ptCANUserData->m_cantx->FDFormat = FDCAN_CLASSIC_CAN;
ptCANUserData->m_cantx->IdType = FDCAN_STANDARD_ID; ptCANUserData->m_cantx->IdType = FDCAN_STANDARD_ID;
ptCANUserData->m_cantx->Identifier = _iFrameID; ptCANUserData->m_cantx->Identifier = iFrameID;
ptCANUserData->m_cantx->TxFrameType = FDCAN_DATA_FRAME; ptCANUserData->m_cantx->TxFrameType = FDCAN_DATA_FRAME;
HAL_FDCAN_AddMessageToTxFifoQ(ptCANUserData->m_can, ptCANUserData->m_cantx, (const uint8_t *)_pBuffer); HAL_FDCAN_AddMessageToTxFifoQ(ptCANUserData->m_can, ptCANUserData->m_cantx, (const uint8_t *)&_pBuffer[4]);
return ptCANUserData->m_cantx->DataLength; return ptCANUserData->m_cantx->DataLength;
} }

2
bspMCU/include/bsp_CAN.h

@ -97,7 +97,7 @@ typedef struct
extern void CAN_IT_init(TComCtrl *_ptComCtrl); extern void CAN_IT_init(TComCtrl *_ptComCtrl);
extern TCANUserData *CAN_userdata_init(FDCAN_HandleTypeDef *_fdCAN, uint32_t _Size, int _iIsLoop); extern TCANUserData *CAN_userdata_init(FDCAN_HandleTypeDef *_fdCAN, uint32_t _Size, int _iIsLoop);
extern void CAN_RX_IRQHandler(TComCtrl *_ptComCtrl); extern void CAN_RX_IRQHandler(TComCtrl *_ptComCtrl);
extern int CAN_TX_FIFOQ(TComCtrl *_ptComCtrl, uint32_t _iFrameID, char *_pBuffer, uint32_t _iSize); extern int CAN_TX_FIFOQ(TComCtrl *_ptComCtrl, char *_pBuffer, uint32_t _iSize);
#endif #endif

2
bspMCU/l_can.c

@ -15,7 +15,7 @@ TComCtrl *g_ptCAN1;
int CAN1_Send(char *_pBuffer, uint32_t _iSize) int CAN1_Send(char *_pBuffer, uint32_t _iSize)
{ {
return CAN_TX_FIFOQ(g_ptCAN1, _pBuffer[0], &_pBuffer[4], _iSize); return CAN_TX_FIFOQ(g_ptCAN1, _pBuffer, _iSize);
} }
void HAL_FDCAN_ErrorStatusCallback(FDCAN_HandleTypeDef *hfdcan, uint32_t ErrorStatusITs) void HAL_FDCAN_ErrorStatusCallback(FDCAN_HandleTypeDef *hfdcan, uint32_t ErrorStatusITs)

Loading…
Cancel
Save