Gast
#5845363
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