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

STM32F102C8T6 и виртуальный COM порт через USB. - ARM, Cortex, STM32 микроконтроллер

25.06.2012, 15:07. Просмотров 3782. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2012, 15:07
Я подобрал для вас темы с готовыми решениями и ответами на вопрос STM32F102C8T6 и виртуальный COM порт через USB. (ARM, Cortex, STM32 микроконтроллер):

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

Через USB порт к ПК подключают плату с ATmega8
Поставили задачу: Через USB порт, к ПК подключают плату с...

Виртуальный COM порт STM32F4Discovery, Coocox
Вопрос, собственно, один - делал ли кто? На IAR-е делал много раз, всегда...

Виртуальный COM порт STM32F4Discovery, Coocox
Вопрос, собственно, один - делал ли кто? На IAR-е делал много раз, всегда...

Виртуальный COM-порт на STM32, скорость обмена.
Всем привет. Прошу помощи :) Экспериментирую с USB - CDC-класс, стоит задача...

насколько устойчив виртуальный СОМ-порт из STM32?
Т.е. STM32 подключаем по USB к компу как USB Device, Virtual Port Com. Типовые...

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

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

Меня смущает, что их кто-то постоянно забирает. Вчера на работе с FTDI поэкспериментировал - там добавленные в выходной буфер данные можно считать когда угодно после - хоть через час.
А в виртуальном COM порте получается, что считывается только то, что отправляется при открытом устройстве. А если оно не открыто, то всё отправленное пропадает.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2012, 11:01
Привет! Вот еще темы с решениями:

STM32F102C8T6 + DFU проблема с FreeRTOS (решена)
Добрый день! 1) Адаптировал проект DFU из примера библиотеки работы USB к...

PIC18F4550 и USB порт?
Всем добрый день или вечер. Не могу найти не где документации на...

Обмен данными через COM- порт
Добрый день, пытаюсь освоить передачу данных. Отсылаю на мк скажем "1",...

затруднения с выводом массива через порт
Здравствуйте: ДЛЯ МК 8051 Дано задание: В памяти определен массив...


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

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

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