cancel
Showing results for 
Search instead for 
Did you mean: 

STM32F4 problem with CAN bus

vlr
Associate II
Posted on November 19, 2015 at 15:54

Hi, I use

an

STM32F407

,

I'm trying

communication

with CAN bus,

for now only

transmission

, using Hal library.

1) I have setted PA11 (CAN1_RX) and PA12 (CAN1_TX): void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan) { GPIO_InitTypeDef GPIO_InitStruct; /* Enable peripherals and GPIO Clocks */ /* CAN1 Periph clock enable */ CANx_CLK_ENABLE(); /* Enable GPIO clock ****************************************/ CANx_GPIO_CLK_ENABLE(); /* Configure peripheral GPIO */ /* CAN1 TX GPIO pin configuration (PA12)*/ GPIO_InitStruct.Pin = CANx_TX_PIN; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FAST; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Alternate = CANx_TX_AF; HAL_GPIO_Init(CANx_TX_GPIO_PORT, &GPIO_InitStruct); /* CAN1 RX GPIO pin configuration (PA11)*/ GPIO_InitStruct.Pin = CANx_RX_PIN; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FAST; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Alternate = CANx_RX_AF; HAL_GPIO_Init(CANx_RX_GPIO_PORT, &GPIO_InitStruct); /* Configure the NVIC */ /* NVIC configuration for CAN1 Reception complete interrupt */ HAL_NVIC_SetPriority(CANx_RX_IRQn, 0, 0); HAL_NVIC_EnableIRQ(CANx_RX_IRQn); } It's correct?

2) I have a

clock of

42MHz

(

APB1), I want a

sample

point

to 75

% and baudrate of 250 Kbit/s,

my settings

are

:
 CanHandle.Init.TTCM = DISABLE;

CanHandle.Init.ABOM = DISABLE;
CanHandle.Init.AWUM = DISABLE;
CanHandle.Init.NART = DISABLE;
CanHandle.Init.RFLM = DISABLE;
CanHandle.Init.TXFP = DISABLE;
CanHandle.Init.Mode = CAN_MODE_NORMAL;
CanHandle.Init.SJW = CAN_SJW_1TQ;
CanHandle.Init.BS1 = CAN_BS1_8TQ;
CanHandle.Init.BS2 = CAN_BS2_3TQ;
CanHandle.Init.Prescaler = 11;

It's correct? 3) I have a problem with the function ''HAL_CAN_Transmit()'', when

i call it in the main.c

it returns timeout, waiting for TransmitMailbox to be sent (Following codes are from : stm32f4xx_hal_can.

/* Check End of transmission flag */
while(!(__HAL_CAN_TRANSMIT_STATUS(hcan, transmitmailbox)))
{
/* Check for the Timeout */
if(Timeout != HAL_MAX_DELAY)
{
if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
{
hcan->State = HAL_CAN_STATE_TIMEOUT;
/* Process unlocked */
__HAL_UNLOCK(hcan);
return HAL_TIMEOUT;
}
}
}

Why?

Also

the function

''HAL_CAN_Transmit()

''

does not send anything

.

Thank you in advance

#setup #stm32f4 #can #transmit
1 REPLY 1
Posted on November 19, 2015 at 16:31

2) It's correct?

No, doesn't look to get to the baud rate you want.

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..