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

 
 
 
Reply to this topicStart new topic
> 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
adnega
сообщение Dec 20 2014, 08:56
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Ничего не понял.
Если ремап включен, то CAN2 работает на ногах PB5, PB6.
Если ремап выключен, то CAN2 работает на ногах PB12, PB13.

Поскольку в рабочем коде ремап включен, то на PB6 будет передача, а на PB13 передачи быть не должно. Получается, что у вас все работает в соответствии с документацией.
Go to the top of the page
 
+Quote Post
laowai
сообщение Dec 20 2014, 09:03
Сообщение #3





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



Цитата(adnega @ Dec 20 2014, 09:56) *
Если ремап включен, то CAN2 работает на ногах PB5, PB6.
Если ремап выключен, то CAN2 работает на ногах PB12, PB13.


Когда я включаю ремап и настраиваю PB5-PB6, то CAN2 работает на PB5,PB6. И на PB6 анализатором я вижу отправляемые мною пакеты.
Когда я не включаю(!) ремап и настраиваю PB12-PB13, то CAN2 должен(!) работать на PB12,PB13. Но я не вижу пакетов на PB13, только 1 (3.3В).

Та же история с CAN1. Работает только в случае ремапа.

Сообщение отредактировал laowai - Dec 20 2014, 09:04
Go to the top of the page
 
+Quote Post
adnega
сообщение Dec 20 2014, 09:34
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Принудительно GPIO_PinRemapConfig(GPIO_Remap_CAN2 , DISABLE) пробовали?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 23:07
Рейтинг@Mail.ru


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