Skip to content
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

Fixed check for dual CAN device #48

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

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