关节电机measure

This commit is contained in:
TuxMonkey
2026-07-15 21:59:50 +08:00
parent 52813f45d2
commit ae8f1725b1
6 changed files with 227 additions and 19 deletions

View File

@@ -105,6 +105,7 @@ CANInstance *CANRegister(CAN_Init_Config_s *config)
instance->can_handle = config->can_handle;
instance->tx_id = config->tx_id; // 好像没用,可以删掉
instance->rx_id = config->rx_id;
instance->rx_id_match_any = config->rx_id_match_any;
instance->can_module_callback = config->can_module_callback;
instance->id = config->id;
@@ -141,6 +142,17 @@ uint8_t CANTransmit(CANInstance *_instance, float timeout)
return 1; // 发送成功
}
uint8_t CANTryTransmit(CANInstance *_instance)
{
if (HAL_CAN_GetTxMailboxesFreeLevel(_instance->can_handle) == 0u)
return 0u;
return HAL_CAN_AddTxMessage(_instance->can_handle,
&_instance->txconf,
_instance->tx_buff,
&_instance->tx_mailbox) == HAL_OK;
}
void CANSetDLC(CANInstance *_instance, uint8_t length)
{
// 发送长度错误!检查调用参数是否出错,或出现野指针/越界访问
@@ -168,15 +180,16 @@ static void CANFIFOxCallback(CAN_HandleTypeDef *_hcan, uint32_t fifox)
HAL_CAN_GetRxMessage(_hcan, fifox, &rxconf, can_rx_buff); // 从FIFO中获取数据
for (size_t i = 0; i < idx; ++i)
{ // 两者相等说明这是要找的实例
if (_hcan == can_instance[i]->can_handle && rxconf.StdId == can_instance[i]->rx_id)
if (_hcan == can_instance[i]->can_handle &&
(can_instance[i]->rx_id_match_any || rxconf.StdId == can_instance[i]->rx_id))
{
if (can_instance[i]->can_module_callback != NULL) // 回调函数不为空就调用
{
can_instance[i]->rx_std_id = rxconf.StdId;
can_instance[i]->rx_len = rxconf.DLC; // 保存接收到的数据长度
memcpy(can_instance[i]->rx_buff, can_rx_buff, rxconf.DLC); // 消息拷贝到对应实例
can_instance[i]->can_module_callback(can_instance[i]); // 触发回调进行数据解析和处理
}
break;
}
}
}