Добрый день!
Не могу запустить 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-режим можно использовать для тестирования отправки/приема.
Добрый вечер! Да, Вы правы, подключил трансивер и еще несколько устройств на шину и ошибка пропала. Прием-передача работают на ура 🙂