CAN_FLAG_FOV
embedded
runtime_error
ai_generated
true
CAN error: FIFO overrun on mailbox 2, message lost
ID: embedded/can-fifo-overrun-error
85%Fix Rate
88%Confidence
1Evidence
2023-11-02First Seen
Version Compatibility
| Version | Status | Introduced | Deprecated | Notes |
|---|---|---|---|---|
| STM32CubeFW_F4 v1.27.0 | active | — | — | — |
| HAL_CAN v2.0.2 | active | — | — | — |
| CANopen stack v4.0.1 | active | — | — | — |
Root Cause
CAN receive FIFO overflowed because the CPU did not read messages fast enough, causing loss of incoming frames.
generic中文
CAN接收FIFO溢出,因为CPU读取消息速度不够快,导致传入帧丢失。
Official Documentation
https://www.st.com/resource/en/reference_manual/dm00031020.pdfWorkarounds
-
80% success Increase the CAN receive FIFO depth in configuration: hcan.Instance->FMR |= CAN_FMR_FINIT; hcan.Instance->FS1R |= CAN_FS1R_FSC1;
Increase the CAN receive FIFO depth in configuration: hcan.Instance->FMR |= CAN_FMR_FINIT; hcan.Instance->FS1R |= CAN_FS1R_FSC1;
-
90% success Implement DMA-based CAN message reading to offload CPU: HAL_CAN_Start_DMA(&hcan, CAN_RX_FIFO0);
Implement DMA-based CAN message reading to offload CPU: HAL_CAN_Start_DMA(&hcan, CAN_RX_FIFO0);
中文步骤
Increase the CAN receive FIFO depth in configuration: hcan.Instance->FMR |= CAN_FMR_FINIT; hcan.Instance->FS1R |= CAN_FS1R_FSC1;
Implement DMA-based CAN message reading to offload CPU: HAL_CAN_Start_DMA(&hcan, CAN_RX_FIFO0);
Dead Ends
Common approaches that don't work:
-
80% fail
Faster baud rate increases message frequency, worsening the overflow issue.
-
60% fail
Filtering reduces noise but does not address the root cause of slow message processing.