инициализация CAN
Спойлер
Код: Выделить всё
can_filter.FilterIdHigh = 0;
can_filter.FilterIdLow = 0;
can_filter.FilterMaskIdHigh = 0;
can_filter.FilterMaskIdLow = 0;
can_filter.FilterMode = CAN_FILTERMODE_IDMASK;
can_filter.FilterScale = CAN_FILTERSCALE_32BIT;
can_filter.FilterNumber = 0;
can_filter.FilterFIFOAssignment = CAN_FIFO0;
can_filter.BankNumber = 0;
can_filter.FilterActivation = ENABLE;
can_handle.Instance = CAN1;
can_handle.Init.Prescaler = 450;
can_handle.Init.Mode = CAN_MODE_NORMAL;
can_handle.Init.SJW = CAN_SJW_1TQ;
can_handle.Init.BS1 = CAN_BS1_4TQ;
can_handle.Init.BS2 = CAN_BS2_3TQ;
can_handle.Init.TTCM = DISABLE;
can_handle.Init.ABOM = ENABLE;
can_handle.Init.AWUM = DISABLE;
can_handle.Init.NART = DISABLE;
can_handle.Init.RFLM = DISABLE;
can_handle.Init.TXFP = DISABLE;
HAL_CAN_Init(&can_handle);
HAL_CAN_ConfigFilter(&can_handle, &can_filter);
Инициализация GPIO
Спойлер
Код: Выделить всё
__HAL_RCC_CAN1_CLK_ENABLE();
__HAL_RCC_AFIO_CLK_ENABLE();
// ремап на PB8 и PB9
__HAL_AFIO_REMAP_CAN1_2();
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_8;
GPIO_InitStruct.Mode = GPIO_MODE_AF_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);