Схема у меня есть. Вот как код писать? На stm32f103 есть замечательная возможность: AFIO->MAPR |= AFIO_MAPR_CAN_REMAP_REMAP2; и можно переназначить пины. А в stm32f407 есть такая возможность? Ведь по умолчанию CAN1 подключен к PA11, PA12. Или достаточно такой конструкции:
//Настройка порта PD1 - CAN1 TX GPIOD->OSPEEDR &= ~GPIO_OSPEEDER_OSPEEDR1;//Очень высокая скорость GPIOD->OTYPER &= ~GPIO_OTYPER_OT_1;//PUSH-PULL GPIOD->PUPDR &= ~GPIO_PUPDR_PUPDR1;//В ноль GPIOD->MODER &= ~GPIO_MODER_MODER1;//В ноль GPIOD->MODER |= GPIO_MODER_MODER1_1;//Выводы в альтернативную функцию GPIOD->AFR[0] &= ~(0b1001 << 1 4);//Очищение перед записью GPIOD->AFR[0] |= (0b1001 << 1 4);//Альтернативная функция 9 для CAN1
Схема у меня есть. Вот как код писать? На stm32f103 есть замечательная возможность: AFIO->MAPR |= AFIO_MAPR_CAN_REMAP_REMAP2; и можно переназначить пины. А в stm32f407 есть такая возможность? Ведь по умолчанию CAN1 подключен к PA11, PA12. Или достаточно такой конструкции:
//Настройка порта PD1 - CAN1 TX
GPIOD->OSPEEDR &= ~GPIO_OSPEEDER_OSPEEDR1;//Очень высокая скорость
GPIOD->OTYPER &= ~GPIO_OTYPER_OT_1;//PUSH-PULL
GPIOD->PUPDR &= ~GPIO_PUPDR_PUPDR1;//В ноль
GPIOD->MODER &= ~GPIO_MODER_MODER1;//В ноль
GPIOD->MODER |= GPIO_MODER_MODER1_1;//Выводы в альтернативную функцию
GPIOD->AFR[0] &= ~(0b1001 << 1 4);//Очищение перед записью
GPIOD->AFR[0] |= (0b1001 << 1 4);//Альтернативная функция 9 для CAN1
//Настройка порта PD0 - CAN1 RX
GPIOD->MODER &= ~GPIO_MODER_MODER0;
GPIOD->MODER |= GPIO_MODER_MODER0_1;
GPIOD->PUPDR &= ~GPIO_PUPDR_PUPDR0;
GPIOD->AFR[0] &= ~(0b1001 << 0 4);
GPIOD->AFR[0] |= (0b1001 << 0 4);
У меня тоже есть такая плата. Пытался настроить CAN1 но подключен он на пины PD0,PD1. А как ремапить с PA11, PA12?