eddy_em: (Костерок)
eddy_em ([personal profile] eddy_em) wrote2012-10-23 01:23 pm
Entry tags:

Первые успехи с USB

Итак, поскребя по сусекам посмотрев примеры с easyelectronics.ru, я таки собрал все воедино и у меня получился рабочий эмулятор USB→COM (его, кстати, можно и как реальный использовать при небольшой доработке).
Вот — исходники. Пока что в них полным-полно мусора, но наконец-то после выполнения
make && make load

и переподключении USB (почему-то сразу после заливки железяка не определяется, наверное, нужно при запуске сначала отключить USB, подержать его немного так, а потом уже включать - ХЗ, будет моим домашним заданием) появляется устройство /dev/ttyACM0!!!

Я установил простенький пакетик tinyserial (сильно облегченная версия minicom'а, близкая к мастдайкотерминалу) и попробовал повзаимодействовать с железякой.
Какой же была моя радость, когда сразу же после запуска я получил:
com /dev/ttyACM0 1500000
C-a exit, C-x modem lines status
[STATUS]: RTS CTS DTR 
 !"#$%&'()
Fad
*
Fad
+
Fad
,
Fad
-
Fad
.
Shn
/
Shn
0
Shn
1
Shn
23
Off
45
On 
6
Blk
78
Unk
9
Shn
:;
Shn

Fad
<
Fad

Fad
=>?@A
Unk

Интересно то, что т.к. реального последовательного порта "с той" стороны пока нет, скорость можно установить совершенно любую. Мы пока не проверяем, что там за настройки порта компьютер прислал.

Ну и напоследок расскажу, что же делает этот пример.
Здесь при запуске активируется подключение к USB и запускается в режиме мерцания светодиод. Скважность мерцания изменяется командами '+' и '-', команда '0' отключает светодиод, команда '1' включает постоянное свечение, команда 'b' активирует режим мерцания.
Кроме того, я попробовал возможности EXTI: на кнопочку WAKEUP повесил прерывание. При нажатии кнопки светодиод либо горит постоянно (если до этого мигал или был потушен), либо мигает.
Таймер запущен с интервалом в 10мс, поэтому мерцания светодиода почти не заметно: команды '+' и '-' как бы изменяют его яркость.
Сама макетка один раз в секунду отправляет поочередно символы с кодами от 33 до 127 включительно, а также сигнализирует о принятии команды от пользователя.
Понятное дело, из-за того, что tinyserial отправляет команды посимвольно, сделать более длинный командный пакет в нем нельзя. Но это уже просто — для дальнейших испытаний напишу простенькую программку-коммутатор.


[identity profile] engine-runtime.livejournal.com 2016-05-27 03:12 pm (UTC)(link)
Я недавно поднимал стандартный CDC пример к Дискавери STM32F407, кем то переделанный - тот добавил кольцевой буфер. Я этот буфер слегка подрихтовал, вокруг примера возвел проект.
Работал замечательно, но иногда при экспериментах зависал, и вешал терминальные программы на компе.
У меня подозрение, что не любит виртуал ком порт на стороне STM частые прерывания или пакеты прерываний например от АЦП, сбивают они его.

[identity profile] eddy-em.livejournal.com 2016-05-28 07:45 am (UTC)(link)
Не знаю: проблем не замечал, хоть у меня кольцевой буфер и небольшой. Но поначалу случались сбои, которые после добавления мьютексов исчезли.