Костерок

eddy_em


Емельянов Эдуард Владимирович


Previous Entry Share Next Entry
Первые успехи с USB
Костерок
eddy_em
Итак, поскребя по сусекам посмотрев примеры с 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 отправляет команды посимвольно, сделать более длинный командный пакет в нем нельзя. Но это уже просто — для дальнейших испытаний напишу простенькую программку-коммутатор.



You are viewing eddy_em