trying to read my first CAN message
Posted: Fri Dec 13, 2013 2:19 am
I am trying to read my first CAN message and obviously I barely know what I am doing.
I have a SN65HVD230 CAN Board, I have a device sending out CAN messages, I see some activity on logic analyzer
Here is my code
I am not sure about the prescaler, my STM32_PCLK1=42000000. Ohh, I use stm32f4discovery. I initialize everything with all debug checks and execution goes to canReceive and never returns.
Any hints? Any working CAN example? I would take anything!
I have a SN65HVD230 CAN Board, I have a device sending out CAN messages, I see some activity on logic analyzer
Here is my code
Code: Select all
#define EFI_CAN_DEVICE CAND1
#define EFI_CAN_RX_PORT GPIOB
#define EFI_CAN_RX_PIN 8
#define EFI_CAN_RX_AF 9
#define EFI_CAN_TX_PORT GPIOB
#define EFI_CAN_TX_PIN 9
#define EFI_CAN_TX_AF 9
static void canRead(void) {
scheduleSimpleMsg(&logger, "waiting for CAN ", 0);
canReceive(&EFI_CAN_DEVICE, CAN_ANY_MAILBOX, &rxFrame, TIME_INFINITE);
scheduleSimpleMsg(&logger, "GOT CAN ", rxFrame.FMI);
scheduleSimpleMsg(&logger, "GOT CAN ", rxFrame.TIME);
scheduleSimpleMsg(&logger, "GOT CAN ", rxFrame.DLC);
scheduleSimpleMsg(&logger, "GOT CAN ", rxFrame.SID);
}
void initCan(void) {
int CAN_Prescaler = 4;// (STM32_PCLK1 / 15) / 500000; // baudrate is set to 500k bit/s
int CAN_Mode = CAN_Mode_Normal;
int CAN_SJW = CAN_SJW_4tq;
int CAN_BS1 = CAN_BS1_10tq;
int CAN_BS2 = CAN_BS2_5tq;
canConfig.btr = (uint32_t)((uint32_t)CAN_Mode << 30) | \
((uint32_t)CAN_SJW << 24) | \
((uint32_t)CAN_BS1 << 16) | \
((uint32_t)CAN_BS2 << 20) | \
((uint32_t)CAN_Prescaler - 1);
canConfig.mcr = (CAN_MCR_NART | CAN_MCR_INRQ); // init mode, disable auto. retransmission
canObjectInit(&EFI_CAN_DEVICE);
canStart(&EFI_CAN_DEVICE, &canConfig);
mySetPadMode("CAN TX", EFI_CAN_TX_PORT, EFI_CAN_TX_PIN, PAL_MODE_ALTERNATE(EFI_CAN_TX_AF));
mySetPadMode("CAN RX", EFI_CAN_RX_PORT, EFI_CAN_RX_PIN, PAL_MODE_ALTERNATE(EFI_CAN_RX_AF));
addConsoleAction("canr", canRead);
}
I am not sure about the prescaler, my STM32_PCLK1=42000000. Ohh, I use stm32f4discovery. I initialize everything with all debug checks and execution goes to canReceive and never returns.
Any hints? Any working CAN example? I would take anything!