if (hcan->State == HAL_CAN_STATE_READY) { /* Change CAN peripheral state */ hcan->State = HAL_CAN_STATE_LISTENING; /* Request leave initialisation */ CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); /* Get tick */ tickstart = HAL_GetTick(); /* Wait the acknowledge */ while ((hcan->Instance->MSR & CAN_MSR_INAK) != 0U) { /* Check for the Timeout */ if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) { /* Update error code */ hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; /* Change CAN state */ hcan->State = HAL_CAN_STATE_ERROR; return HAL_ERROR; } } /* Reset the CAN ErrorCode */ hcan->ErrorCode = HAL_CAN_ERROR_NONE; /* Return function status */ return HAL_OK; } else { /* Update error code */ hcan->ErrorCode |= HAL_CAN_ERROR_NOT_READY; return HAL_ERROR; }这个设置为什么可以发送CAN,但不能拉媚到CAN数据
时间: 2024-04-04 18:35:15 浏览: 200
STM32 CAN-FD开发板资料
5星 · 资源好评率100%
这段代码的作用并不是发送CAN数据,而是等待CAN控制器进入"Active"模式,以便之后可以发送和接收CAN帧。在CAN总线上发送CAN数据需要调用其他函数来完成,例如`HAL_CAN_Transmit()`函数。这段代码只是用于确保CAN控制器已经准备好发送和接收CAN帧,如果CAN控制器未能成功进入"Active"模式,则会返回一个超时错误码和错误状态。
另外,这段代码并不会影响CAN数据的接收能力,只要CAN控制器成功进入"Active"模式并且有CAN数据到达,应用程序就可以通过相应的函数来接收CAN数据。
阅读全文