STM32F103 & TJA1050 CAN Read 500kpbs

47 Views Asked by At

I want to read data from 500kbps on the card I developed with STM32f103 but I cannot get results. I used "CubeMX" to get the required kbps setting right and I use "CubeMX" to generate the code.

STM32F103C6T CAN_RX => PB8 CAN_TX => PB9

I have tried many things to read the incoming data on the Can bus line via STM32, but I could not get any results, can you help?

enter image description here

enter image description here

int main(void)
{
    HAL_Init();
    SystemClock_Config();

    MX_GPIO_Init();
    MX_USART2_UART_Init();
        MX_CAN_Init();
    
    HAL_Delay(500);
        my_init();
    
    while (1){
            my_loop();
    }
}
void my_init(void)
{
    uartPrint("Starting.... \n\r");

    HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); // TurnOff LED
    
    if(HAL_CAN_Start(&hcan) == HAL_OK){
        uartPrint("CAN v2 Started\n");
        can_init = 1;
    }
    
    if (HAL_CAN_ActivateNotification(&hcan, CAN_IT_RX_FIFO0_MSG_PENDING) != HAL_OK)
    {
        uartPrint("CAN v2 Notify#1 ERROR\n");
        Error_Handler();
    }       
    
    if (HAL_CAN_ActivateNotification(&hcan, CAN_IT_RX_FIFO1_MSG_PENDING) != HAL_OK)
    {
        uartPrint("CAN v2 Notify#2 ERROR\n");
        Error_Handler();
    }   
}
static void MX_CAN_Init(void)
{
  hcan.Instance = CAN1;
  hcan.Init.Prescaler = 4;
  hcan.Init.Mode = CAN_MODE_NORMAL;
  hcan.Init.SyncJumpWidth = CAN_SJW_1TQ;
  hcan.Init.TimeSeg1 = CAN_BS1_14TQ;
  hcan.Init.TimeSeg2 = CAN_BS2_3TQ;
  hcan.Init.TimeTriggeredMode = DISABLE;
  hcan.Init.AutoBusOff = ENABLE;
  hcan.Init.AutoWakeUp = DISABLE;
  hcan.Init.AutoRetransmission = DISABLE;
  hcan.Init.ReceiveFifoLocked = DISABLE;
  hcan.Init.TransmitFifoPriority = DISABLE;
  if (HAL_CAN_Init(&hcan) != HAL_OK)
  {
    Error_Handler();
  }
}
void my_loop()
{   
        if (can_init == 1)
    {
            canCounter = canCounter + 1;
            if(canCounter > 500000){
                uartPrintNew("CANBUS : ErrorCode:%d [Ready:%d,Listen:%d,Error:%d] %d \n",hcan.ErrorCode,hcan.State ==0x01U,hcan.State ==0x02U,hcan.State ==0x05U,rxHeader.StdId);
                canCounter = 0;
            }
            if (HAL_CAN_GetRxFifoFillLevel(&hcan, CAN_RX_FIFO0)){
                    uartPrint("CAN CHECKING\n");
                    HAL_StatusTypeDef retval = HAL_CAN_GetRxMessage(&hcan, CAN_RX_FIFO0, &rxHeader, rxData);
                    if (retval == HAL_OK){
                            uartPrintNew("RX: %u\n", rxHeader.StdId);
                            uartPrintNew("ID: %u\n", rxHeader.ExtId);
                            uartPrintNew("DLC: %u\n", rxHeader.DLC);
                            uartPrintNew("Data: %u\n", rxData[0]);
                    }
            }
        }
}
0

There are 0 best solutions below