解决了CAN爆炸

This commit is contained in:
Xiaocheng 2026-03-14 23:28:31 +08:00
parent 4453a0a333
commit 9ebf54e0b2
4 changed files with 8 additions and 5 deletions

View File

@ -49,7 +49,7 @@ void MX_CAN1_Init(void)
hcan1.Init.AutoWakeUp = DISABLE; hcan1.Init.AutoWakeUp = DISABLE;
hcan1.Init.AutoRetransmission = ENABLE; hcan1.Init.AutoRetransmission = ENABLE;
hcan1.Init.ReceiveFifoLocked = DISABLE; hcan1.Init.ReceiveFifoLocked = DISABLE;
hcan1.Init.TransmitFifoPriority = DISABLE; hcan1.Init.TransmitFifoPriority = ENABLE;
if (HAL_CAN_Init(&hcan1) != HAL_OK) if (HAL_CAN_Init(&hcan1) != HAL_OK)
{ {
Error_Handler(); Error_Handler();

View File

@ -55,7 +55,7 @@ int8_t SuperCap_Init(void)
return DEVICE_OK; // 已经初始化过 return DEVICE_OK; // 已经初始化过
} }
if (BSP_CAN_RegisterId( BSP_CAN_1 , SUPERCAP_RX_ID, 3) != BSP_OK) { if (BSP_CAN_RegisterId( BSP_CAN_2, SUPERCAP_RX_ID, 3) != BSP_OK) {
return DEVICE_ERR; return DEVICE_ERR;
} }
@ -72,7 +72,7 @@ int8_t SuperCap_Update(void)
BSP_CAN_Message_t rx_msg; BSP_CAN_Message_t rx_msg;
// 从CAN队列获取数据 // 从CAN队列获取数据
if (BSP_CAN_GetMessage( BSP_CAN_1 , SUPERCAP_RX_ID, &rx_msg, BSP_CAN_TIMEOUT_IMMEDIATE) == BSP_OK) { if (BSP_CAN_GetMessage( BSP_CAN_2, SUPERCAP_RX_ID, &rx_msg, BSP_CAN_TIMEOUT_IMMEDIATE) == BSP_OK) {
// 处理接收到的数据 // 处理接收到的数据
transfer_SuperCap_measure(rx_msg.data); transfer_SuperCap_measure(rx_msg.data);
return DEVICE_OK; return DEVICE_OK;
@ -151,7 +151,7 @@ int8_t CAN_TX_SuperCapData(CAN_SuperCapTXDataTypeDef * TX_Temp)
tx_frame.data[6] = 0; tx_frame.data[6] = 0;
tx_frame.data[7] = 0; tx_frame.data[7] = 0;
return BSP_CAN_TransmitStdDataFrame( BSP_CAN_1 , &tx_frame) == BSP_OK ? DEVICE_OK : DEVICE_ERR; return BSP_CAN_TransmitStdDataFrame( BSP_CAN_2 , &tx_frame) == BSP_OK ? DEVICE_OK : DEVICE_ERR;
} }
/** /**

View File

@ -359,6 +359,7 @@ int8_t Chassis_Control(Chassis_t *c, Chassis_CMD_t *c_cmd,uint32_t now)
c->dt = (float)(now - c->last_wakeup) / 1000.0f; /* 计算两次调用的时间间隔,单位秒 */ c->dt = (float)(now - c->last_wakeup) / 1000.0f; /* 计算两次调用的时间间隔,单位秒 */
c->last_wakeup = now; c->last_wakeup = now;
c->ctrl_mode = c_cmd->ctrl_mode;
/*设置底盘模式*/ /*设置底盘模式*/
if (Chassis_SetMode(c, c_cmd->mode,now) != CHASSIS_OK) if (Chassis_SetMode(c, c_cmd->mode,now) != CHASSIS_OK)
{ {
@ -499,5 +500,6 @@ void Chassis_Setoutput(Chassis_t *c)
// MOTOR_RM_SetOutput(&(c->param->motor_3508_param[0]), 1.0f); // MOTOR_RM_SetOutput(&(c->param->motor_3508_param[0]), 1.0f);
MOTOR_RM_Ctrl(&(c->param->motor_3508_param[0])); MOTOR_RM_Ctrl(&(c->param->motor_3508_param[0]));
MOTOR_RM_Ctrl(&(c->param->motor_6020_param[0])); MOTOR_RM_Ctrl(&(c->param->motor_6020_param[0]));
// MOTOR_RM_Ctrl(&(c->param->motor_6020_param[3]));
} }

View File

@ -7,9 +7,10 @@ CAN1.BS2=CAN_BS2_7TQ
CAN1.CalculateBaudRate=1000000 CAN1.CalculateBaudRate=1000000
CAN1.CalculateTimeBit=1000 CAN1.CalculateTimeBit=1000
CAN1.CalculateTimeQuantum=71.42857142857143 CAN1.CalculateTimeQuantum=71.42857142857143
CAN1.IPParameters=CalculateTimeQuantum,CalculateTimeBit,CalculateBaudRate,Prescaler,BS1,BS2,NART CAN1.IPParameters=CalculateTimeQuantum,CalculateTimeBit,CalculateBaudRate,Prescaler,BS1,BS2,NART,TXFP
CAN1.NART=ENABLE CAN1.NART=ENABLE
CAN1.Prescaler=3 CAN1.Prescaler=3
CAN1.TXFP=ENABLE
CAN2.BS1=CAN_BS1_6TQ CAN2.BS1=CAN_BS1_6TQ
CAN2.BS2=CAN_BS2_7TQ CAN2.BS2=CAN_BS2_7TQ
CAN2.CalculateBaudRate=1000000 CAN2.CalculateBaudRate=1000000