|
@@ -46,31 +46,40 @@
|
|
|
CanTxMsgTypeDef CAN_TxMessaage;
|
|
|
CanRxMsgTypeDef CAN_RxMessaage;
|
|
|
|
|
|
-uint8_t CAN_RxBuf_MC_BC[CAN_BUFF_SIZE];
|
|
|
-CAN_Buf_TypeDef CAN_RxBuf_Struct_MC_BC = {0,CAN_BUFF_SIZE,0,0,0,0,CAN_RxBuf_MC_BC,0,FALSE};
|
|
|
-uint8_t CAN_RxBuf_MC_TO_CDL[CAN_BUFF_SIZE];
|
|
|
-CAN_Buf_TypeDef CAN_RxBuf_Struct_MC_TO_CDL = {0,CAN_BUFF_SIZE,0,0,0,0,CAN_RxBuf_MC_TO_CDL,0,FALSE};
|
|
|
-
|
|
|
-uint8_t CAN_RxBuf_MC_TE_TO_CDL[CAN_BUFF_SIZE];
|
|
|
-CAN_Buf_TypeDef CAN_RxBuf_Struct_MC_TE_TO_CDL = {0,CAN_BUFF_SIZE,0,0,0,0,CAN_RxBuf_MC_TO_CDL,0,FALSE};
|
|
|
+const uint16_t ID_Index[CAN_BUFF_SIZE] =
|
|
|
+{
|
|
|
+ ID_MC_BC ,//0x710
|
|
|
+ ID_MC_TO_BMS ,//0x712
|
|
|
+ ID_MC_TO_PBU ,//0x713
|
|
|
+ ID_MC_TO_HMI ,//0x714
|
|
|
+ ID_MC_TO_CDL ,//0x715
|
|
|
|
|
|
-uint8_t CAN_RxBuf_PBU_BC[CAN_BUFF_SIZE];
|
|
|
-CAN_Buf_TypeDef CAN_RxBuf_Struct_PBU_BC = {0,CAN_BUFF_SIZE,0,0,0,0,CAN_RxBuf_PBU_BC,0,FALSE};
|
|
|
-uint8_t CAN_RxBuf_PBU_TO_CDL[CAN_BUFF_SIZE];
|
|
|
-CAN_Buf_TypeDef CAN_RxBuf_Struct_PBU_TO_CDL = {0,CAN_BUFF_SIZE,0,0,0,0,CAN_RxBuf_PBU_TO_CDL,0,FALSE};
|
|
|
+ ID_MC_TE_TO_CDL ,//0x615
|
|
|
+
|
|
|
+ ID_BMS_BC ,//0x720
|
|
|
+ ID_BMS_TO_MC ,//0x721
|
|
|
+ ID_BMS_TO_PBU ,//0x723
|
|
|
+ ID_BMS_TO_HMI ,//0x724
|
|
|
+ ID_BMS_TO_CDL ,//0x725
|
|
|
+
|
|
|
+ ID_PBU_BC ,//0x730
|
|
|
+ ID_PBU_TO_MC ,//0x731
|
|
|
+ ID_PBU_TO_BMS ,//0x732
|
|
|
+ ID_PBU_TO_HMI ,//0x734
|
|
|
+ ID_PBU_TO_CDL ,//0x735
|
|
|
|
|
|
-uint8_t CAN_RxBuf_PBU_TE_TO_CDL[CAN_BUFF_SIZE];
|
|
|
-CAN_Buf_TypeDef CAN_RxBuf_Struct_PBU_TE_TO_CDL = {0,CAN_BUFF_SIZE,0,0,0,0,CAN_RxBuf_PBU_TO_CDL,0,FALSE};
|
|
|
+ ID_PBU_TE_TO_CDL ,//0x635
|
|
|
+
|
|
|
+ ID_HMI_BC ,//0x740
|
|
|
+ ID_HMI_TO_MC ,//0x741
|
|
|
+ ID_HMI_TO_BMS ,//0x742
|
|
|
+ ID_HMI_TO_PBU ,//0x743
|
|
|
+ ID_HMI_TO_CDL //0x745
|
|
|
+};
|
|
|
|
|
|
-uint8_t CAN_RxBuf_BMS_BC[CAN_BUFF_SIZE];
|
|
|
-CAN_Buf_TypeDef CAN_RxBuf_Struct_BMS_BC = {0,CAN_BUFF_SIZE,0,0,0,0,CAN_RxBuf_BMS_BC,0,FALSE};
|
|
|
-uint8_t CAN_RxBuf_BMS_TO_CDL[CAN_BUFF_SIZE];
|
|
|
-CAN_Buf_TypeDef CAN_RxBuf_Struct_BMS_TO_CDL = {0,CAN_BUFF_SIZE,0,0,0,0,CAN_RxBuf_BMS_TO_CDL,0,FALSE};
|
|
|
+uint8_t CAN_RxBuf[CAN_ID_NUM][CAN_BUFF_SIZE];
|
|
|
+CAN_Buf_TypeDef CAN_RxBuf_Struct[CAN_ID_NUM];
|
|
|
|
|
|
-uint8_t CAN_RxBuf_HMI_BC[CAN_BUFF_SIZE];
|
|
|
-CAN_Buf_TypeDef CAN_RxBuf_Struct_HMI_BC = {0,CAN_BUFF_SIZE,0,0,0,0,CAN_RxBuf_HMI_BC,0,FALSE};
|
|
|
-uint8_t CAN_RxBuf_HMI_TO_CDL[CAN_BUFF_SIZE];
|
|
|
-CAN_Buf_TypeDef CAN_RxBuf_Struct_HMI_TO_CDL = {0,CAN_BUFF_SIZE,0,0,0,0,CAN_RxBuf_HMI_TO_CDL,0,FALSE};
|
|
|
/* USER CODE END 0 */
|
|
|
|
|
|
CAN_HandleTypeDef hcan;
|
|
@@ -162,6 +171,24 @@ void HAL_CAN_MspDeInit(CAN_HandleTypeDef* canHandle)
|
|
|
}
|
|
|
|
|
|
/* USER CODE BEGIN 1 */
|
|
|
+void CAN_RxBuf_Init(void)
|
|
|
+{
|
|
|
+ uint8_t i;
|
|
|
+
|
|
|
+ for(i=0; i<CAN_ID_NUM; i++)
|
|
|
+ {
|
|
|
+ CAN_RxBuf_Struct[i].ucBufID = 0;
|
|
|
+ CAN_RxBuf_Struct[i].ucBufSize = CAN_BUFF_SIZE;
|
|
|
+ CAN_RxBuf_Struct[i].ucBufWrInde = 0;
|
|
|
+ CAN_RxBuf_Struct[i].ucBufRdInde = 0;
|
|
|
+ CAN_RxBuf_Struct[i].ucBufCnt = 0;
|
|
|
+ CAN_RxBuf_Struct[i].ucBufOvf = 0;
|
|
|
+ CAN_RxBuf_Struct[i].pcBufAddr = CAN_RxBuf[i];
|
|
|
+ CAN_RxBuf_Struct[i].DelayTimeCnt = 0;
|
|
|
+ CAN_RxBuf_Struct[i].IsWaitRX_Flag = FALSE;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
void CAN_Rx_ISR(CAN_Buf_TypeDef*ptCANRx,uint8_t ucLength)
|
|
|
{
|
|
|
for(uint8_t i=0;i<ucLength;i++)
|
|
@@ -186,6 +213,22 @@ void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef *CanHandle)
|
|
|
__HAL_CAN_ENABLE_IT(&hcan, CAN_IT_FMP0);//开接收中断
|
|
|
return;
|
|
|
}
|
|
|
+
|
|
|
+ //根据ID索引数组下标
|
|
|
+ uint16_t Index;
|
|
|
+ for(Index=0 ;Index<CAN_ID_NUM; Index++)
|
|
|
+ {
|
|
|
+ if(CanHandle->pRxMsg->StdId == ID_Index[Index])
|
|
|
+ {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //数据转移到队列
|
|
|
+ CAN_RxBuf_Struct[Index].ucBufID = CanHandle->pRxMsg->StdId;
|
|
|
+ CAN_Rx_ISR(&CAN_RxBuf_Struct[Index], CanHandle->pRxMsg->DLC);
|
|
|
+
|
|
|
+ #if 0
|
|
|
switch(CanHandle->pRxMsg->StdId)
|
|
|
{
|
|
|
//MC广播的数据
|
|
@@ -262,6 +305,8 @@ void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef *CanHandle)
|
|
|
}
|
|
|
default:break;
|
|
|
}
|
|
|
+ #endif
|
|
|
+
|
|
|
__HAL_CAN_ENABLE_IT(&hcan, CAN_IT_FMP0);//开接收中断
|
|
|
}
|
|
|
|
|
@@ -325,11 +370,11 @@ void CANFilterConfig_Scale32_IdMask_StandardIdOnly(void)
|
|
|
sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
|
|
|
|
|
|
//设置过滤寄存器
|
|
|
- sFilterConfig.FilterIdHigh = (uint16_t)((((uint32_t)ID_TO_CDL_FILTER << 21) & 0xFFFF0000) >> 16);
|
|
|
- sFilterConfig.FilterIdLow = (uint16_t)(((uint32_t)ID_TO_CDL_FILTER << 21) | CAN_ID_STD | CAN_RTR_DATA) & 0xFFFF;
|
|
|
+ sFilterConfig.FilterIdHigh = (uint16_t)((((uint32_t)ID_FILTER << 21) & 0xFFFF0000) >> 16);
|
|
|
+ sFilterConfig.FilterIdLow = (uint16_t)(((uint32_t)ID_FILTER << 21) | CAN_ID_STD | CAN_RTR_DATA) & 0xFFFF;
|
|
|
|
|
|
//设置屏蔽寄存器
|
|
|
- sFilterConfig.FilterMaskIdHigh = (uint16_t)((((uint32_t)ID_TO_CDL_MASK << 21) & 0xFFFF0000) >> 16);;
|
|
|
+ sFilterConfig.FilterMaskIdHigh = (uint16_t)((((uint32_t)ID_MASK << 21) & 0xFFFF0000) >> 16);;
|
|
|
sFilterConfig.FilterMaskIdLow = 0xFFFF;
|
|
|
|
|
|
sFilterConfig.FilterFIFOAssignment = 0;
|
|
@@ -346,11 +391,11 @@ void CANFilterConfig_Scale32_IdMask_StandardIdOnly(void)
|
|
|
sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
|
|
|
|
|
|
//设置过滤寄存器
|
|
|
- sFilterConfig.FilterIdHigh = (uint16_t)((((uint32_t)ID_BC_FILTER << 21) & 0xFFFF0000) >> 16);
|
|
|
- sFilterConfig.FilterIdLow = (uint16_t)(((uint32_t)ID_BC_FILTER << 21) | CAN_ID_STD | CAN_RTR_DATA) & 0xFFFF;
|
|
|
+ sFilterConfig.FilterIdHigh = (uint16_t)((((uint32_t)ID_FILTER << 21) & 0xFFFF0000) >> 16);
|
|
|
+ sFilterConfig.FilterIdLow = (uint16_t)(((uint32_t)ID_FILTER << 21) | CAN_ID_STD | CAN_RTR_DATA) & 0xFFFF;
|
|
|
|
|
|
//设置屏蔽寄存器
|
|
|
- sFilterConfig.FilterMaskIdHigh = (uint16_t)((((uint32_t)ID_BC_MASK << 21) & 0xFFFF0000) >> 16);;
|
|
|
+ sFilterConfig.FilterMaskIdHigh = (uint16_t)((((uint32_t)ID_MASK << 21) & 0xFFFF0000) >> 16);;
|
|
|
sFilterConfig.FilterMaskIdLow = 0xFFFF;
|
|
|
|
|
|
sFilterConfig.FilterFIFOAssignment = 0;
|