Микроконтроллеры

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Микроконтроллеры » STM32: USART, I2C, USB » USB в STM32F0


USB в STM32F0

Сообщений 31 страница 52 из 52

31

sobs написал(а):

Изменить дескриптор репорта. Поля


Нельзя сделать больше 8.  На устройстве гаснет светодиод  передача рвется.

32

Нельзя сделать больше 8.  На устройстве гаснет светодиод  передача рвется.

Можно, тут дело в том, что программа на ПК должна принимать строго такой же формат посылки. Например ты укажешь report_size(16) вместо 8, и у тебя посылка станет длиннее. Из-за этого может отвалиться. Потом проверю на деле, просто платка на работе осталась.

33

dosikus, посмотри в DDS_Generator_STM32_v0.5 дескриптор репорта, там как раз есть
0x75, 0x20,                    //   REPORT_SIZE (32)
0x95, 0x01,                    //   REPORT_COUNT (1)

Отредактировано sobs (2017-08-05 16:09:01)

34

sobs написал(а):

dosikus, посмотри в DDS_Generator_STM32_v0.5 дескриптор репорта, там как раз есть
0x75, 0x20,                    //   REPORT_SIZE (32)
0x95, 0x01,                    //   REPORT_COUNT (1)

А вот именно в термометре не хотит никак .
Если я ставлю отправку больше 4 здесь, устройство просто отваливается

Код:
EP_Write(1, tx_buffer,4);

35

dosikus написал(а):

А вот именно в термометре не хотит никак .
Если я ставлю отправку больше 4 здесь, устройство просто отваливается
Код:

EP_Write(1, tx_buffer,4);

Попробуй одновременно в программе для ПК измени, если не получится, то в понедельник сам проверю.

Код:
...
//Читаем данные из EP1_IN (0x81), 4 байта (1 - ID, 3 - данные), ожидание 100мс
if (libusb_interrupt_transfer(USB_Device, 0x81, buf, [b]4[/b], &ret, 100) >= 0){
...

36

sobs написал(а):

если не получится, то в понедельник сам проверю.


Я извиняюсь , не смотрел?

37

dosikus написал(а):

Я извиняюсь , не смотрел?

Нет, подумал у тебя все пошло, раз ничего не написал. Тогда завтра в любом случае посмотрю. К слову, компилировал в 2008 студии Express Edition, она у меня летает, по сравнению с кокосом - вообще флеш)

38

sobs, пробовал то же самое .

sobs написал(а):

К слову, компилировал в 2008 студии Express Edition, она у меня летает, по сравнению с кокосом - вообще флеш)

Попробуй все таки SES.
Кстати вышел новый IAR , многие будут удивлены. Причем не все приятно... :)))))

http://s018.radikal.ru/i500/1708/a3/7d634a543168.png

39

dosikus написал(а):

Попробуй все таки SES.
Кстати вышел новый IAR , многие будут удивлены. Причем не все приятно... :)))))

На SES пока не перешел, потому что st-link не поддерживает. Видел что перепрошивают его в j-link, но сам пока не пробовал. Надо будет заморочится.
А иаром пользовался только для stm8. Жутко неудобная иде)

40

sobs написал(а):

А иаром пользовался только для stm8. Жутко неудобная иде)


Он теперь и под STM8 и под AVR такой же как на моем скрине, а ты наверное еще старый пробовал.
В Jlink превращается любой STlink за 5 сек. Обратимо...

41

Перенес посты сюда Jlink вопросы

42

dosikus написал(а):

Я извиняюсь , не смотрел?

Посмотрел, работает. Вот тут 2 варианта Ссылка, для REPORT_SIZE(16), REPORT_COUNT(2) и REPORT_SIZE(8), REPORT_COUNT(5). Тут главное чтобы количество отправляемых и принимаемых байт соответствовало репорту.
P.S. Чтобы не подключать датчик сделал просто инкремент переменной.

dosikus написал(а):

Нельзя сделать больше 8.  На устройстве гаснет светодиод  передача рвется.

Странно, у меня при несоответствии репортов, светодиод не гаснет, просто данные в программе не отображаются.

Отредактировано sobs (2017-08-08 08:59:12)

43

sobs, да эти примеры заработали, по крайней мере Термометр REPORT_SIZE16, REPORT_COUNT2 заработал.
Буду рыть свои косяки.
Прогу под win пришлось перекомпилировать, падала хз почему. Наверное снова из-за того что у мну 64.

44

dosikus написал(а):

Прогу под win пришлось перекомпилировать, падала хз почему. Наверное снова из-за того что у мну 64.

Да, компилировал в 32-битной.
Я кроме размеров массивов, дескриптора репорта и количества отправляемых байт ничего не менял.

45

sobs, я болван. REPORT_SIZE и REPORT_COUNT  путал . Надо было читать...
Верно  ли понимаю :
REPORT_SIZE размерность посылок 8 или 16 бит
REPORT_COUNT счетчик посылок

46

dosikus написал(а):

Верно  ли понимаю :
REPORT_SIZE размерность посылок 8 или 16 бит
REPORT_COUNT счетчик посылок

Это размер и количество данных. Например тебе надо передать 4 значения температур. Пусть температура передается 16 битным числом. Тогда REPORT_SIZE (16) - размер данных 16 бит и REPORT_COUNT (4) - количество данных, размера REPORT_SIZE (16).
Но для своих устройств это можно не соблюдать, например указав REPORT_SIZE (8) и REPORT_COUNT (8) придет ровно такой же пакет (те же 4 температуры), зато это может быть существенно для всяких мышек и клавиатур.

47

vt340, вопрос - почему
первый вызов libusb_bulk_transfer

Код:
libusb_bulk_transfer (devh, IEP, ibuf, 64, &inum, 100);


изредка возвращает ошибки  -1 -7 -9 ?

LIBUSB_ERROR_IO = -1,
LIBUSB_ERROR_TIMEOUT = -7,
LIBUSB_ERROR_PIPE = -9,

А  в основном -9...

И вАААще -для чего этот первый вызов? Костыль?

48

В моём примере не возвращает, я проверяю прежде чем публиковать, хотя не все возможные ситуации конечно, не 100% гарантия
Если ты что-то менял для хоста или девайса, то не знаю, надо разбираться
Зачем первый вызов? Убери - увидишь )

Если всё-таки с моим примером проблемы, то попробуй для девайса изменить цикл с echo на просто

Код:
for (;;) {      
    USBPoll();  
    USBPut(buf);
    USBGet(buf);
}

Отредактировано vt340 (2017-08-09 15:59:05)

49

vt340, не, я использую твой пример для PC с примером sobs (HID5) ...

50

Тогда выкидывай этот первый вызов
Он там нужен был чтоб вывод на экран был красивый
aaa aaa
bbb bbb
ccc ccc

а не
aaa хзч
bbb aaa
ccc bbb

51

vt340 написал(а):

Он там нужен был чтоб вывод на экран был красивый

Выкинул, без него :
aaa aaa
bbb bbb
ccc ccc

Зато пропали PIPE_RESET

Мля в Сишной версии начало трансфера:

00002444 2017-08-09 16:59:28,4828962 +0,0001343 UP 0xc0000004 URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER
00002445 2017-08-09 16:59:28,4829094 +0,0000132 DOWN 0x00000000 URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL
00002446 2017-08-09 16:59:28,4835128 +0,0006034 UP 0x00000000 URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL
00002447 2017-08-09 16:59:28,4835718 +0,0000590 DOWN 0x00000000 URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER
00002450 2017-08-09 16:59:28,4841346 +0,0002848 UP 0xc0000004 URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER
00002451 2017-08-09 16:59:28,4841594 +0,0000248 DOWN 0x00000000 URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL
00002452 2017-08-09 16:59:28,4848868 +0,0007274 UP 0x00000000 URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL
00002453 2017-08-09 16:59:28,4849749 +0,0000881 DOWN 0x00000000 URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER

В барсиковой все чисто, куда рыть?

00002553 2017-08-09 17:01:10,2019277 +101,6992450 DOWN 0x00000000 URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER
00002556 2017-08-09 17:01:10,2025097 +0,0002630 UP 0x00000000 URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER
00002557 2017-08-09 17:01:10,2026423 +0,0001326 DOWN 0x00000000 URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER
00002560 2017-08-09 17:01:10,2031306 +0,0001449 UP 0x00000000 URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER
00002561 2017-08-09 17:01:10,2032067 +0,0000761 DOWN 0x00000000 URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER
00002564 2017-08-09 17:01:10,2036301 +0,0001569 UP 0x00000000 URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER
00002565 2017-08-09 17:01:10,2037182 +0,0000881 DOWN 0x00000000 URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER
00002568 2017-08-09 17:01:10,2041291 +0,0001625 UP 0x00000000 URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER
00002569 2017-08-09 17:01:10,2042206 +0,0000915 DOWN 0x00000000 URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER
00002572 2017-08-09 17:01:10,2046299 +0,0001664 UP 0x00000000 URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER
00002573 2017-08-09 17:01:10,2047227 +0,0000928 DOWN 0x00000000 URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER

52

Причем в Си выхлоп в консоль
0 64:aaa 0:aaa
1 64:bbb 64:bbb

первый inum =0

И в барсике

0 64 aaa 64 aaa
1 64 bbb 64 bbb
2 64 ccc 64 ccc


Вы здесь » Микроконтроллеры » STM32: USART, I2C, USB » USB в STM32F0