• 1000 Через какое-то время (несколько мс) он дает мне правильный ответ на мой вопрос.
Вот мой код ISR:
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) {
if (multiFrameRequest == 1) {
memset(Rx_Data, 0, 64);
HAL_CAN_GetRxMessage(&hcan1, CAN_RX_FIFO0, &Rx_Header, Rx_Data);
HAL_CAN_GetRxMessage(&hcan1, CAN_RX_FIFO0, &Rx_Header, Rx_Data + 8);
CAN_Received_Data = 1;
}
else {
memset(Rx_Data, 0, 8);
if (HAL_CAN_GetRxMessage(&hcan1, CAN_RX_FIFO0, &Rx_Header, Rx_Data)
== HAL_OK) {
CAN_Received_Data = 1;
}
}
Этот код отлично работает с многокадровыми или однокадровыми сообщениями, если ответ следует непосредственно за вопросом.
Я пытался проверить байт RxData [3] из ответа на 0x78, но ISR чаще всего вызывается вторым сообщением (настоящий ответ) и уничтожает / перезаписывает RxData.
Как я могу проверить сообщение об ошибке (0x78), немного подождать и снова прочитать FIFO?