реклама на сайте
подробности

 
 
> STM32F105RBT6 CAN не работает без remap'а, На контроллере CAN1, CAN2 работают только при условии ремапа AFIO.
laowai
сообщение Dec 20 2014, 08:44
Сообщение #1





Группа: Новичок
Сообщений: 2
Регистрация: 20-12-14
Пользователь №: 84 200



Здравствуйте,

Есть плата собственной разработки с stm32f105rbt6 x 1, mcp2551 x 3.
Изначальная идея заключалась в возможности организации кольца на CAN2. Предполагалось, что в случае одного обрыва на шине, перенастраиваем CAN2 на альтернативные порты ввода-вывода, подключая второе полукольцо шины, не теряя связь с устройствами на шине. Встретился с проблемой и не могу 2 день победить.

Корпус 64-пиновый, по документации CAN2: ноги rx,tx PB12,PB13 либо PB5,PB6 соответственно.

Вот этот код инициализации работает:

Код
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;

/* Configure CAN2 pin: RX */
//GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
//GPIO_Init(GPIOB, &GPIO_InitStructure);

/* Configure CAN2 pin: TX */
//GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
//GPIO_Init(GPIOB, &GPIO_InitStructure);

/* Configure CAN2 pin: RX */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOB, &GPIO_InitStructure);

/* Configure CAN2 pin: TX */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2, ENABLE);

GPIO_PinRemapConfig(GPIO_Remap_CAN2 , ENABLE);


Этот нет:

Код
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;

/* Configure CAN2 pin: RX */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOB, &GPIO_InitStructure);

/* Configure CAN2 pin: TX */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);

/* Configure CAN2 pin: RX */
//GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
//GPIO_Init(GPIOB, &GPIO_InitStructure);

/* Configure CAN2 pin: TX */
//GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
//GPIO_Init(GPIOB, &GPIO_InitStructure);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2, ENABLE);

//GPIO_PinRemapConfig(GPIO_Remap_CAN2 , ENABLE);


Остальной код не меняется. Разница только в ремапе. Т.е. с ремапом работает, без - нет. Смотрю цифровым анализатором: на ноге PB13 3.3В.

Ноги исправные, при переводе в GPIO_Mode_Out_PP и дрыганье анализатором вижу меандр.

Та же ситуация с CAN1, с ремапом вижу пакеты на PB8, без ремапа на PA12 только 3.3В.

В errata ничего подобного не видел.

Кто-нибудь запускал CAN на данном камне без ремапа?
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 09:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.01358 секунд с 7
ELECTRONIX ©2004-2016