|
@@ -180,17 +180,11 @@ void CAN_Rx_ISR(CAN_Buf_TypeDef*ptCANRx,uint8_t ucLength)
|
|
|
|
|
|
void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef *CanHandle)
|
|
|
{
|
|
|
- #if 1
|
|
|
if((CanHandle->pRxMsg->IDE != CAN_ID_STD)||(CanHandle->pRxMsg->DLC == 0))
|
|
|
{
|
|
|
__HAL_CAN_ENABLE_IT(&hcan, CAN_IT_FMP0);//开接收中断
|
|
|
return;
|
|
|
}
|
|
|
- if((CanHandle->pRx1Msg->IDE != CAN_ID_STD)||(CanHandle->pRxMsg->DLC == 0))
|
|
|
- {
|
|
|
- __HAL_CAN_ENABLE_IT(&hcan, CAN_IT_FMP1);//开接收中断
|
|
|
- return;
|
|
|
- }
|
|
|
switch(CanHandle->pRxMsg->StdId)
|
|
|
{
|
|
|
case ID_PBU_BC: case ID_PBU_TO_MC://接收PBU数据
|
|
@@ -219,6 +213,17 @@ void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef *CanHandle)
|
|
|
}
|
|
|
default:break;
|
|
|
}
|
|
|
+
|
|
|
+ __HAL_CAN_ENABLE_IT(&hcan, CAN_IT_FMP0);//开接收中断
|
|
|
+}
|
|
|
+
|
|
|
+void HAL_CAN_Rx1CpltCallback(CAN_HandleTypeDef *CanHandle)
|
|
|
+{
|
|
|
+ if((CanHandle->pRx1Msg->IDE != CAN_ID_STD)||(CanHandle->pRxMsg->DLC == 0))
|
|
|
+ {
|
|
|
+ __HAL_CAN_ENABLE_IT(&hcan, CAN_IT_FMP1);//开接收中断
|
|
|
+ return;
|
|
|
+ }
|
|
|
switch(CanHandle->pRx1Msg->StdId)
|
|
|
{
|
|
|
case ID_ENVIOLO_TO_MC_1: case ID_ENVIOLO_TO_MC_2:
|
|
@@ -233,137 +238,8 @@ void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef *CanHandle)
|
|
|
}
|
|
|
default:break;
|
|
|
}
|
|
|
- __HAL_CAN_ENABLE_IT(&hcan, CAN_IT_FMP0);//开接收中断
|
|
|
- __HAL_CAN_ENABLE_IT(&hcan, CAN_IT_FMP1);//开接收中断
|
|
|
-
|
|
|
- #elif 0
|
|
|
- //FIFO0中断
|
|
|
- if(__HAL_CAN_GET_IT_SOURCE(CanHandle, CAN_IT_FMP0))
|
|
|
- {
|
|
|
- if((CanHandle->pRxMsg->IDE != CAN_ID_STD)||(CanHandle->pRxMsg->DLC == 0))
|
|
|
- {
|
|
|
- __HAL_CAN_ENABLE_IT(&hcan, CAN_IT_FMP0);//开接收中断
|
|
|
- return;
|
|
|
- }
|
|
|
- switch(CanHandle->pRxMsg->StdId)
|
|
|
- {
|
|
|
- case ID_PBU_BC: case ID_PBU_TO_MC://接收PBU数据
|
|
|
- {
|
|
|
- CAN_RxBuf_Struct_PBU.ucBufID = CanHandle->pRxMsg->StdId;
|
|
|
- CAN_Rx_ISR(&CAN_RxBuf_Struct_PBU,CanHandle->pRxMsg->DLC);
|
|
|
- break;
|
|
|
- }
|
|
|
- case ID_BMS_BC: case ID_BMS_TO_MC://接收BMS数据
|
|
|
- {
|
|
|
- CAN_RxBuf_Struct_BMS.ucBufID = CanHandle->pRxMsg->StdId;
|
|
|
- CAN_Rx_ISR(&CAN_RxBuf_Struct_BMS,CanHandle->pRxMsg->DLC);
|
|
|
- break;
|
|
|
- }
|
|
|
- case ID_HMI_BC: case ID_HMI_TO_MC://接收HMI数据
|
|
|
- {
|
|
|
- CAN_RxBuf_Struct_HMI.ucBufID = CanHandle->pRxMsg->StdId;
|
|
|
- CAN_Rx_ISR(&CAN_RxBuf_Struct_HMI,CanHandle->pRxMsg->DLC);
|
|
|
- break;
|
|
|
- }
|
|
|
- case ID_CDL_BC: case ID_CDL_TO_MC:case ID_CDL_TO_MC_TE://接收CDL数据
|
|
|
- {
|
|
|
- CAN_RxBuf_Struct_CDL.ucBufID = CanHandle->pRxMsg->StdId;
|
|
|
- CAN_Rx_ISR(&CAN_RxBuf_Struct_CDL,CanHandle->pRxMsg->DLC);
|
|
|
- break;
|
|
|
- }
|
|
|
- default:break;
|
|
|
- }
|
|
|
- __HAL_CAN_ENABLE_IT(&hcan, CAN_IT_FMP0);//开接收中断
|
|
|
- }
|
|
|
- //FOFO1中断
|
|
|
- else if(__HAL_CAN_GET_IT_SOURCE(CanHandle, CAN_IT_FMP1))
|
|
|
- {
|
|
|
- if((CanHandle->pRx1Msg->IDE != CAN_ID_STD)||(CanHandle->pRx1Msg->DLC == 0))
|
|
|
- {
|
|
|
- __HAL_CAN_ENABLE_IT(&hcan, CAN_IT_FMP1);//开接收中断
|
|
|
- return;
|
|
|
- }
|
|
|
- switch(CanHandle->pRx1Msg->StdId)
|
|
|
- {
|
|
|
- case ID_ENVIOLO_TO_MC_1: case ID_ENVIOLO_TO_MC_2:
|
|
|
- {
|
|
|
- if(CanHandle->pRx1Msg->DLC == 8)//由于没有帧头帧尾和CRC,故保证数据的准确性必须为8字节才解析
|
|
|
- {
|
|
|
- GearBox_CanData.RefreshFlag = TRUE;
|
|
|
- GearBox_CanData.ID = CanHandle->pRx1Msg->StdId;
|
|
|
- memcpy((uint8_t*)GearBox_CanData.Data, (uint8_t*)CanHandle->pRx1Msg->Data, 8);
|
|
|
- }
|
|
|
- break;
|
|
|
- }
|
|
|
- default:break;
|
|
|
- }
|
|
|
- __HAL_CAN_ENABLE_IT(&hcan, CAN_IT_FMP1);//开接收中断
|
|
|
- }
|
|
|
|
|
|
- #elif 1
|
|
|
- //FIFO0中断
|
|
|
- if(__HAL_CAN_MSG_PENDING(CanHandle, CAN_FIFO0))
|
|
|
- {
|
|
|
- if((CanHandle->pRxMsg->IDE != CAN_ID_STD)||(CanHandle->pRxMsg->DLC == 0))
|
|
|
- {
|
|
|
- __HAL_CAN_ENABLE_IT(&hcan, CAN_IT_FMP0);//开接收中断
|
|
|
- return;
|
|
|
- }
|
|
|
- switch(CanHandle->pRxMsg->StdId)
|
|
|
- {
|
|
|
- case ID_PBU_BC: case ID_PBU_TO_MC://接收PBU数据
|
|
|
- {
|
|
|
- CAN_RxBuf_Struct_PBU.ucBufID = CanHandle->pRxMsg->StdId;
|
|
|
- CAN_Rx_ISR(&CAN_RxBuf_Struct_PBU,CanHandle->pRxMsg->DLC);
|
|
|
- break;
|
|
|
- }
|
|
|
- case ID_BMS_BC: case ID_BMS_TO_MC://接收BMS数据
|
|
|
- {
|
|
|
- CAN_RxBuf_Struct_BMS.ucBufID = CanHandle->pRxMsg->StdId;
|
|
|
- CAN_Rx_ISR(&CAN_RxBuf_Struct_BMS,CanHandle->pRxMsg->DLC);
|
|
|
- break;
|
|
|
- }
|
|
|
- case ID_HMI_BC: case ID_HMI_TO_MC://接收HMI数据
|
|
|
- {
|
|
|
- CAN_RxBuf_Struct_HMI.ucBufID = CanHandle->pRxMsg->StdId;
|
|
|
- CAN_Rx_ISR(&CAN_RxBuf_Struct_HMI,CanHandle->pRxMsg->DLC);
|
|
|
- break;
|
|
|
- }
|
|
|
- case ID_CDL_BC: case ID_CDL_TO_MC:case ID_CDL_TO_MC_TE://接收CDL数据
|
|
|
- {
|
|
|
- CAN_RxBuf_Struct_CDL.ucBufID = CanHandle->pRxMsg->StdId;
|
|
|
- CAN_Rx_ISR(&CAN_RxBuf_Struct_CDL,CanHandle->pRxMsg->DLC);
|
|
|
- break;
|
|
|
- }
|
|
|
- default:break;
|
|
|
- }
|
|
|
- __HAL_CAN_ENABLE_IT(&hcan, CAN_IT_FMP0);//开接收中断
|
|
|
- }
|
|
|
- //FOFO1中断
|
|
|
- else if(__HAL_CAN_MSG_PENDING(CanHandle, CAN_FIFO1))
|
|
|
- {
|
|
|
- if((CanHandle->pRx1Msg->IDE != CAN_ID_STD)||(CanHandle->pRx1Msg->DLC == 0))
|
|
|
- {
|
|
|
- __HAL_CAN_ENABLE_IT(&hcan, CAN_IT_FMP1);//开接收中断
|
|
|
- return;
|
|
|
- }
|
|
|
- switch(CanHandle->pRx1Msg->StdId)
|
|
|
- {
|
|
|
- case ID_ENVIOLO_TO_MC_1: case ID_ENVIOLO_TO_MC_2:
|
|
|
- {
|
|
|
- if(CanHandle->pRx1Msg->DLC == 8)//由于没有帧头帧尾和CRC,故保证数据的准确性必须为8字节才解析
|
|
|
- {
|
|
|
- GearBox_CanData.RefreshFlag = TRUE;
|
|
|
- GearBox_CanData.ID = CanHandle->pRx1Msg->StdId;
|
|
|
- memcpy((uint8_t*)GearBox_CanData.Data, (uint8_t*)CanHandle->pRx1Msg->Data, 8);
|
|
|
- }
|
|
|
- break;
|
|
|
- }
|
|
|
- default:break;
|
|
|
- }
|
|
|
- __HAL_CAN_ENABLE_IT(&hcan, CAN_IT_FMP1);//开接收中断
|
|
|
- }
|
|
|
- #endif
|
|
|
+ __HAL_CAN_ENABLE_IT(&hcan, CAN_IT_FMP1);//开接收中断
|
|
|
}
|
|
|
|
|
|
//CAN发送数据
|