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

 
 
 
Reply to this topicStart new topic
> CanOpenNode
Elcarnado
сообщение Feb 27 2013, 13:08
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 27-02-13
Пользователь №: 75 819



Здравствуйте! Не получается реализовать передачу данных по 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, а там совсем другие функции и переменные.
Go to the top of the page
 
+Quote Post
Elcarnado
сообщение Mar 5 2013, 14:29
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 27-02-13
Пользователь №: 75 819



После многочисленных экспериментов и курения документации (в stm я новичок), удалось установить, что кан-модуль не запускается. Причина - не могу ничего записать в регистр MCR. Использую пока стандартную библиотеку (stm32f10x_can.h) и в ней при переходе в режим инициализации устанавливается в регистре MCR нулевой бит INRQ и сбрасывается первый бит SLEEP. После, казалось бы, простой операции CANx->MCR = CANx->MCR | (0x0001) бит INRQ не выставляется. Да и вообще, никак не получается изменить данные в этом регистре: он ведёт себя таким образом, как будто предоставлен только для чтения. Подскажите, нужно ли что-то сделать, чтобы данный регистр был доступен и для записи? Есть ли подводные камни при конфигурировании КАН и доступа к данному регистру? help.gif
Go to the top of the page
 
+Quote Post
x893
сообщение Mar 6 2013, 01:10
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



А пример от ST с установленным loopback работает ?
Go to the top of the page
 
+Quote Post
Elcarnado
сообщение Mar 6 2013, 07:35
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 27-02-13
Пользователь №: 75 819



А где его взять? 05.gif

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

Все, нашел. Нет, не работает. Его дописывать надо? А то меня смущает отсутствие настроек порта CAN и его пинов.
А вообще, нужно ли делать ремаппинг CAN, тактировать AFIO, настраивать пины Can на ввод и вывод? А то в примере всего этого нет...
Go to the top of the page
 
+Quote Post
syoma
сообщение Mar 11 2013, 15:16
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368



Цитата
Да и вообще, никак не получается изменить данные в этом регистре: он ведёт себя таким образом, как будто предоставлен только для чтения.

Это стандартная ситуация в STM32, если забыли включать клок у соответствующей периферии - вданном случае CAN. Проверьте - включена ли клоки для всего, чего нужно.
Go to the top of the page
 
+Quote Post
Elcarnado
сообщение Mar 18 2013, 11:08
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 27-02-13
Пользователь №: 75 819



Да, действительно, клок включить не забыл, но хомутнулся с шиной: вместо APB1PeriphClockCmd использовал APB2PeriphClockCmd. Теперь ситуация такая: по CAN - интерфейсу устройства общаются, данные передаются. Но вот CanOpenNode 3.10 не подымается (судя по осциллографу никаких движений на интерфейсе нет). Может ли кто поделится примером или мануалом для данной версии?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 8th July 2025 - 19:43
Рейтинг@Mail.ru


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