Skip to content

Conversation

@cvanbeek13
Copy link

I was having trouble getting this working on an STM32L496. I had set up CANopenNode on CAN2 and it was transmitting fine but not receiving. After lots of debugging, I discovered this issue.

In CO_driver_STM32, the FilterBank needs to be changed depending on the CAN peripheral. It should be 0 if using CAN1 and 14 if using CAN2. The following preprocessor switch statement looks like it's supposed to take care of this:

#if defined(CAN)
    FilterConfig.FilterBank = 0;
#else
    if (((CAN_HandleTypeDef*)((CANopenNodeSTM32*)CANmodule->CANptr)->CANHandle)->Instance == CAN1) {
        FilterConfig.FilterBank = 0;
    } else {
        FilterConfig.FilterBank = 14;
    }
#endif

However, even in a dual-bank CAN device, CAN is defined. Here is the instance in stm32l496xx.h:

#define CAN                 ((CAN_TypeDef *) CAN1_BASE)
#define CAN1                ((CAN_TypeDef *) CAN1_BASE)
#define CAN2                ((CAN_TypeDef *) CAN2_BASE)

This MR changes it to check instead if CAN2 is defined, which should work on both single-CAN and dual-CAN devices.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant