Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: CanOpenNode
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Controller Area Network (CAN)
Elcarnado
Здравствуйте! Не получается реализовать передачу данных по CanOpen. Задача довольно проста: передать со "слейва" (STM32F103 на плате STM32F103-DB) на "мастер" (SC24 на плате DB54) двухбайтовую переменную. В качестве стека я взял CanOpenNode v3.10 плюс к нему библиотеки для STM32. Идея такова: "Мастер" конфигурится (в нем уже есть драйвер CanOpen) в CodeSys, где к нему подключается *.eds-файл "слейва", из которого и вынимаются требуемые данные; "слейв" шьется из среды CooCox с одной задачей: передавать (синхронно/асинхронно - не важно) переменную.
Файлы CO_OD.h, CO_OD.c и *.eds генерируются с помощью java-приложения для Firefox. Полученный файл *.eds генерируется адекватно и после подключения его в CodeSys, я вижу в соответствующей вкладке свою переменную.
А вот с работой "слейва" беда laughing.gif Насколько я понял, в библиотеках для STM32 уже реализована передача и прием данных (присутствует и файл main.c, в котором это все осуществлено), а моя задача правильно подкладывать переменную в нужное время, но этот способ ничего не дал... Пробовал указать в редакторе объектов для переменной дефолтное значение и хотя бы его увидеть на "мастере", но и тут ничего не вышло.
Может кто сталкивался с чем-то подобным? Подскажите в какую сторону смотреть, а то у меня мысли в голове уже закончились. Кстати, подскажите где можно взять доки на CanOpenNode v3.10? А то у меня только на v1.10, а там совсем другие функции и переменные.
Elcarnado
После многочисленных экспериментов и курения документации (в stm я новичок), удалось установить, что кан-модуль не запускается. Причина - не могу ничего записать в регистр MCR. Использую пока стандартную библиотеку (stm32f10x_can.h) и в ней при переходе в режим инициализации устанавливается в регистре MCR нулевой бит INRQ и сбрасывается первый бит SLEEP. После, казалось бы, простой операции CANx->MCR = CANx->MCR | (0x0001) бит INRQ не выставляется. Да и вообще, никак не получается изменить данные в этом регистре: он ведёт себя таким образом, как будто предоставлен только для чтения. Подскажите, нужно ли что-то сделать, чтобы данный регистр был доступен и для записи? Есть ли подводные камни при конфигурировании КАН и доступа к данному регистру? help.gif
x893
А пример от ST с установленным loopback работает ?
Elcarnado
А где его взять? 05.gif

Цитата(Elcarnado @ Mar 6 2013, 08:56) *
А где его взять? 05.gif

Все, нашел. Нет, не работает. Его дописывать надо? А то меня смущает отсутствие настроек порта CAN и его пинов.
А вообще, нужно ли делать ремаппинг CAN, тактировать AFIO, настраивать пины Can на ввод и вывод? А то в примере всего этого нет...
syoma
Цитата
Да и вообще, никак не получается изменить данные в этом регистре: он ведёт себя таким образом, как будто предоставлен только для чтения.

Это стандартная ситуация в STM32, если забыли включать клок у соответствующей периферии - вданном случае CAN. Проверьте - включена ли клоки для всего, чего нужно.
Elcarnado
Да, действительно, клок включить не забыл, но хомутнулся с шиной: вместо APB1PeriphClockCmd использовал APB2PeriphClockCmd. Теперь ситуация такая: по CAN - интерфейсу устройства общаются, данные передаются. Но вот CanOpenNode 3.10 не подымается (судя по осциллографу никаких движений на интерфейсе нет). Может ли кто поделится примером или мануалом для данной версии?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.