Прерывание CAN уничтожает данные само по себе STM32 - PullRequest
1 голос
/ 25 мая 2020
• 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?

...