Top.Mail.Ru
Уведомления
Очистить все

[Решено] HAL_CAN_Init() возвращает HAL_ERROR

 Newt
(@newt)
Level 1

Добрый день!

Не могу запустить CAN на STM32F4, причем проблема возникает еще до попыток отправки и приема - во время инициализации. HAL_CAN_Init() завершается с ошибкой, вот моя инициализация:

/**
  * @brief CAN2 Initialization Function
  * @param None
  * @retval None
  */
static void MX_CAN2_Init(void)
{

  /* USER CODE BEGIN CAN2_Init 0 */

  /* USER CODE END CAN2_Init 0 */

  /* USER CODE BEGIN CAN2_Init 1 */

  /* USER CODE END CAN2_Init 1 */
  hcan2.Instance = CAN2;
  hcan2.Init.Prescaler = 10;
  hcan2.Init.Mode = CAN_MODE_NORMAL;
  hcan2.Init.SyncJumpWidth = CAN_SJW_1TQ;
  hcan2.Init.TimeSeg1 = CAN_BS1_5TQ;
  hcan2.Init.TimeSeg2 = CAN_BS2_5TQ;
  hcan2.Init.TimeTriggeredMode = DISABLE;
  hcan2.Init.AutoBusOff = DISABLE;
  hcan2.Init.AutoWakeUp = DISABLE;
  hcan2.Init.AutoRetransmission = DISABLE;
  hcan2.Init.ReceiveFifoLocked = DISABLE;
  hcan2.Init.TransmitFifoPriority = DISABLE;
  if (HAL_CAN_Init(&hcan2) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN CAN2_Init 2 */

  /* USER CODE END CAN2_Init 2 */

}

Подскажите, в какую сторону копнуть, у меня пока идей нет... Может баг Cube?

Цитата
Создатель темы Размещено : 21.12.2021 12:42
Aveal
(@aveal)
Top level Admin

Приветствую) А какой код ошибки? Для CAN2 он здесь:

hcan2.ErrorCode
ОтветитьЦитата
Размещено : 21.12.2021 13:31
 Newt
(@newt)
Level 1

@aveal спасибо за ответ! Посмотрел под отладчиком,

hcan2.ErrorCode = 0x00020000

 

ОтветитьЦитата
Создатель темы Размещено : 21.12.2021 14:47
Aveal
(@aveal)
Top level Admin

@newt судя по коду - HAL_CAN_ERROR_TIMEOUT. А что на шине подключено помимо контроллера?

ОтветитьЦитата
Размещено : 21.12.2021 18:26
 Newt
(@newt)
Level 1

@aveal Пока ничего не подключал, хочу сначала просто осциллографом посмотреть сигналы на выходах.

ОтветитьЦитата
Создатель темы Размещено : 21.12.2021 21:24
Aveal
(@aveal)
Top level Admin

@newt С CAN так не получится, нужно полноценную шину организовать, STM - трансивер - другое устройство.

ОтветитьЦитата
Размещено : 22.12.2021 12:38
AI
 AI
(@ai)
Level 3 Moderator

Либо loopback-режим можно использовать для тестирования отправки/приема.

ОтветитьЦитата
Размещено : 22.12.2021 13:39
 Newt
(@newt)
Level 1

Добрый вечер! Да, Вы правы, подключил трансивер и еще несколько устройств на шину и ошибка пропала. Прием-передача работают на ура 🙂 

ОтветитьЦитата
Создатель темы Размещено : 23.12.2021 18:57
Поделиться: