Добрый день!
Не могу запустить 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?
Приветствую) А какой код ошибки? Для CAN2 он здесь:
hcan2.ErrorCode
@newt судя по коду - HAL_CAN_ERROR_TIMEOUT. А что на шине подключено помимо контроллера?
@aveal Пока ничего не подключал, хочу сначала просто осциллографом посмотреть сигналы на выходах.
@newt С CAN так не получится, нужно полноценную шину организовать, STM - трансивер - другое устройство.
Либо loopback-режим можно использовать для тестирования отправки/приема.
Добрый вечер! Да, Вы правы, подключил трансивер и еще несколько устройств на шину и ошибка пропала. Прием-передача работают на ура 🙂