Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 21.02.2010
Сообщений: 231
1

STM32F102C8T6 и виртуальный COM порт через USB.

25.06.2012, 15:07. Просмотров 4244. Ответов 2
Метки нет (Все метки)

Господа, помогите осознать, что происходит.

Микроконтроллер STM32F102C8T6.

В прошивке виртуального COM порта внутрь калбэка void EP1_IN_Callback(void) вставил мигание светодиодом, если были отправлены данные. Судя по миганию, вызывается постоянно, не зависимо от того, читает ли кто-нибудь данные или нет, сразу после вставки устройства в компьютер. Помогите осознать, с чем это связано.

То есть, получается, что всё, что было отправлено до того как подключили терминал, куда-то считывается и пропадает бесследно.

При подключении терминала всё, что микроконтроллер отправляет, появляется на терминале, никуда ничего не пропадает. После отключения терминала опять всё, как было — постоянные чтения и данные опять уходят в никуда.

Я подозревал, что система так работает с виртуальным COM портом. Пробовал в дескрипторе тип устройства с CDC (0x02) заменить на VendorSpecific (0xFF). Результат тот же — постоянные чтения, но устройство /div/ttyACM0 не появляется. Может ещё что-то надо было поменять?

Если работать с устройством через функции системы fctrl, open, close, read, write, то всё норм. А вот если пытаться через libusb напрямую обращаться к ендпоинтам, то запись работает без проблем, а вот чтение обычно заканчивается прочтением сообщения нулевой длины (но без ошибок), но иногда удаётся прочитать, то что было отправлено. Такое впечатление, что моя программа соревнуется с системой, кто успеет первым считать, тот и получит данные.

Раньше один раз делал своё устройство, но не на основе виртуального COM порта, а на базе MassStorage примера для микроконтроллера LPC2148. Так там такого не было: всё отправленное приходило и только тогда, когда программа попросит, а не постоянно.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.06.2012, 15:07
Ответы с готовыми решениями:

Виртуальный COM порт на USB
Доброе время суток! Есть устройство которое подключается к ПК через USB. Нужно написать...

Парсинг данных полученных от Arduino через виртуальный COM порт
Добрый день уважаемые софорумчане,при реализации моего проекта возникла необходимость получать...

Как отключить и включить USB порт через КС чтобы перезагрузить USB модем?
Добрый день. Нужен бат файл который будет отключать USB порт USB модема. Это можно сделать в...

Виртуальный COM через USB для МК STR912FAW44
Здравствуйте, на плате для определенного изделия на базе старого микроконтроллера STR912FAW44...

2
0 / 0 / 0
Регистрация: 23.05.2012
Сообщений: 216
26.06.2012, 06:08 2
А проект выложить можете?
На сколько знаю структуру USB, там постоянно происходит обмен данными (фреймами) , по этому постоянно и вызывается EP1_IN_Callback.
Нужно в функции делать проверку - реальные данные поступили? если да то зажечь если нет то погасить.
0
0 / 0 / 0
Регистрация: 21.02.2010
Сообщений: 231
26.06.2012, 11:01 3
Цитата Сообщение от moksir
А проект выложить можете?
На сколько знаю структуру USB, там постоянно происходит обмен данными (фреймами) , по этому постоянно и вызывается EP1_IN_Callback.
Нужно в функции делать проверку - реальные данные поступили? если да то зажечь если нет то погасить.
Проект лежит по следующей ссылке: https://github.com/z80/dfu/tre... r_firmware.

Светодиоды у меня показывают, сколько данных считалось. Если 0, то ни одного не горит, если 1 байт - загорается первый, если 2 - то второй, если три - оба сразу. Как бы бинарный код. Но поскольку я в выходной буфер кидаю одинаковое число байт, то загорается всегда одна и та же комбинация. Т.е. кто-то данные сразу забирает.

Меня смущает, что их кто-то постоянно забирает. Вчера на работе с FTDI поэкспериментировал - там добавленные в выходной буфер данные можно считать когда угодно после - хоть через час.
А в виртуальном COM порте получается, что считывается только то, что отправляется при открытом устройстве. А если оно не открыто, то всё отправленное пропадает.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.06.2012, 11:01

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Подключение миши через USB порт
Всем доброго времени суток. Не могли бы Вы помочь с программой. Условие звучит так: подключаем мышь...

Прием данных через USB порт
кто-нить может подсказать компоненты для работы с USB из Delphi, если точнее нужно считывание...

Взаимодействие с устройством через usb порт
Добрый день! Есть принтер Kyocera fs4100 DN Есть программа от производителя status monitor,...

Windows 7 через порт USB 3.0 - Как?
Имеется ноутбук: на нем всего 2 порта usb 3.0, и нет портов usb 2.0 На стационарном компьютере...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.