Skip to content

Don't overlap STM32 FDCAN RAM sections #15472

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Dec 19, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions targets/TARGET_STM/can_api.c
Original file line number Diff line number Diff line change
Expand Up @@ -183,8 +183,11 @@ static void _can_init_freq_direct(can_t *obj, const can_pinmap_t *pinmap, int hz
obj->CanHandle.Init.DataTimeSeg1 = 0x1; // Not used - only in FDCAN
obj->CanHandle.Init.DataTimeSeg2 = 0x1; // Not used - only in FDCAN
#ifdef TARGET_STM32H7
/* Message RAM offset is only supported in STM32H7 platforms of supported FDCAN platforms */
obj->CanHandle.Init.MessageRAMOffset = 0;
/* Message RAM offset is only supported in STM32H7 platforms of supported FDCAN platforms
* Total RAM size is 2560 words, each FDCAN object allocates approx 300 words, so offset each by
* 512 to make sure RAM sections don't overlap if using multiple FDCAN instances on one chip
*/
obj->CanHandle.Init.MessageRAMOffset = obj->index * 512;

/* The number of Standard and Extended ID filters are initialized to the maximum possile extent
* for STM32H7 platforms
Expand Down Expand Up @@ -1222,7 +1225,6 @@ static void can_irq(CANName name, int id)
// rx interrupts will be unamsked in read operation. reads must be deffered to thread context.
// refer to the CAN receive interrupt problem due to mutex and resolution section of README doc.
__HAL_CAN_DISABLE_IT(&CanHandle, CAN_IT_FMP0);

irq_handler(can_irq_contexts[id], IRQ_RX);
}

Expand Down