STM32F103 STM32CubeF1 Version 1.7 Problem mit HAL_CAN_AddTxMessage()

Gast #5845363
Lesenswert?

Hallo miteinander,

ich versuche seit geraumer Zeit mit dem CubeMX eine CAN Kommunikation zu 
realsieren dabei bin ich auf ein Problem gestoßen:
Wenn ich die Funktion HAL_CAN_AddTxMessage() nutze kriege ich ein 
Fehler.
Mit der Funktion HAL_CAN_GetError() kriege ich folgende Fehlermeldung:
HAL_CAN_ERROR_PARAM Weiß jemand was das bedeutet?

Im Internet konnte ich schon ähnliche Fälle finden jedoch kein Tipps.

https://community.st.com/s/question/0D50X0000A4ozhaSQA/halcanerrorparam-in-latest-version-of-stm32f1-hal-library-when-using-halcanaddtxmessage

https://community.st.com/s/question/0D50X0000AFqZMqSQN/stm32cubemx-example-code-not-able-to-receive

Gibt es eventuell Leute die ähnliche Probleme haben?

Hier mal meine Initialisierung:

#include "can.h"

/* USER CODE BEGIN 0 */
CAN_TxHeaderTypeDef   TxHeader;
CAN_RxHeaderTypeDef   RxHeader;
uint8_t               TxData[8];
uint8_t               RxData[8];
uint32_t              TxMailbox;
/* USER CODE END 0 */

CAN_HandleTypeDef hcan;

/* CAN init function */
void MX_CAN_Init(void)
{
  CAN_FilterTypeDef  sFilterConfig;

  hcan.Instance = CAN1;
  hcan.Init.Prescaler = 8;
  hcan.Init.Mode = CAN_MODE_NORMAL;
  hcan.Init.SyncJumpWidth = CAN_SJW_1TQ;
  hcan.Init.TimeSeg1 = CAN_BS1_12TQ;
  hcan.Init.TimeSeg2 = CAN_BS2_5TQ;
  hcan.Init.TimeTriggeredMode = DISABLE;
  hcan.Init.AutoBusOff = DISABLE;
  hcan.Init.AutoWakeUp = DISABLE;
  hcan.Init.AutoRetransmission = ENABLE;
  hcan.Init.ReceiveFifoLocked = DISABLE;
  hcan.Init.TransmitFifoPriority = DISABLE;

  if (HAL_CAN_Init(&hcan) != HAL_OK)
  {
    Error_Handler();
    xprintf("CAN Init ERROR");
  }

  /* Configure the CAN Filter */
  sFilterConfig.FilterBank = 0;
  sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
  sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
  sFilterConfig.FilterIdHigh = 0x0000;
  sFilterConfig.FilterIdLow = 0x0000;
  sFilterConfig.FilterMaskIdHigh = 0x0000;
  sFilterConfig.FilterMaskIdLow = 0x0000;
  sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;
  sFilterConfig.FilterActivation = ENABLE;
  sFilterConfig.SlaveStartFilterBank = 14;


  if (HAL_CAN_ConfigFilter(&hcan, &sFilterConfig) != HAL_OK)
  {
    /* Filter configuration Error */
    Error_Handler();
    xprintf("CAN ConfigFilter ERROR");
  }

  if (HAL_CAN_Start(&hcan) != HAL_OK)
  {
    /* Start Error */
    Error_Handler();
    xprintf("CAN Start ERROR");
  }

  if (HAL_CAN_ActivateNotification(&hcan, CAN_IT_RX_FIFO0_MSG_PENDING) 
!= HAL_OK)
  {
    /* Notification Error */
    Error_Handler();
    xprintf("CAN ActivateNotification ERROR");
  }

  TxHeader.StdId = 321;
  TxHeader.ExtId = 0x01;
  TxHeader.RTR = CAN_RTR_DATA;
  TxHeader.IDE = CAN_ID_STD;
  TxHeader.DLC = 7;
  TxHeader.TransmitGlobalTime = DISABLE;

  xprintf("CAN Init finished");

}


Und hier die der Befehl mit den notwendigen Anhängen die mir zum 
debuggen dienten:



  TxData[0] = 0xFF;
  TxData[1] = 0xFF;
  TxData[2] = 0x03;
  TxData[3] = 0x04;
  TxData[4] = 0x05;
  TxData[5] = 0x06;
  TxData[6] = 0x07;

.
.
.
.
.
  while (1)
  {
 if (HAL_CAN_AddTxMessage(&hcan, &TxHeader, TxData, &TxMailbox) != 
HAL_OK)
      {
        /* Transmission request Error */
      xprintf("Transmission Error!");
        //Error_Handler();
      }

    HAL_Delay(1000);

    xprintf(" %d ", TxHeader);
    if(HAL_CAN_GetError(&hcan) != HAL_CAN_ERROR_NONE)
    {
      //xprintf("Fehler ist da!");
      CanErr = HAL_CAN_GetError(&hcan);
      //xprintf(" %d ", CanErr);
    }

    if(HAL_CAN_GetState(&hcan) == HAL_CAN_STATE_ERROR)
    {
      xprintf("HAL_CAN_STATE_ERROR");
    }
  }



Ich würde mich echt freuen, wenn mir jemand einen Tipp geben könnte.

Grüße David

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren