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

STM32F205 Работа с USB

09.08.2019, 17:02. Показов 4879. Ответов 20

Студворк — интернет-сервис помощи студентам
Товарищи возникла проблема с работой по USB и STM32F205.
Создал я, значит, дескриптор на три устройства: MSC, CDC #1 & RNDIS (CDC #2)
Кликните здесь для просмотра всего текста

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
__ALIGN_BEGIN static uint8_t USBD_HID_CDC_CfgDesc[USB_HID_CDC_CONFIG_DESC_SIZ] __ALIGN_END =
{
  0x09, /* bLength: Configuration Descriptor size */
  USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: Configuration */
  DESCRIPTOR_TOTAL_LENGTH, /* wTotalLength: Bytes returned */
  0x00,
  USB_NUM_INTERFACES, /*bNumInterfaces: 5 interfaces (4 for CDC, 1 for MSC)*/
  0x01,         /*bConfigurationValue: Configuration value*/
  CONFIG_STRING_INDEX,         /*iConfiguration: Index of string descriptor describing
  the configuration*/
  0x80 | 0x00,         /*bmAttributes: bus powered and Support Remote Wake-up */
  0x32,         /*MaxPower 100 mA: this current is used for detecting Vbus*/
 
  /************** Mass Storage Class Descriptor ****************/
  /* 09 */
  0x09,         /*bLength: Interface Descriptor size*/
  USB_INTERFACE_DESCRIPTOR_TYPE,/*bDescriptorType: Interface descriptor type*/
  MSC_INTERFACE,         /*bInterfaceNumber: Number of Interface*/
  0x00,         /*bAlternateSetting: Alternate setting*/
  0x02,         /*bNumEndpoints*/
  0x08,         /*bInterfaceClass: MSC*/
  0x06,         /*bInterfaceSubClass : 1=BOOT, 0=no boot*/
  0x50,         /*nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse*/
  INTF_STRING_INDEX + 0,            /*iInterface: Index of string descriptor*/
  ////////////////////
  0x07,  
  USB_ENDPOINT_DESCRIPTOR_TYPE,
  MSC0_INEP_ADDR,
  0x02,         // bmAttributes, interrupt transfers
  0x40,
  0x00,
  0x00,
  ////////////////////
  0x07,
  USB_ENDPOINT_DESCRIPTOR_TYPE,
  MSC0_OUTEP_ADDR,
  0x02,
  0x40,
  0x00,
  0x00,
  ////////////////////
 
        /************** CDC0 Class Descriptor ****************/
    /******** /IAD should be positioned just before the CDC interfaces ******
                IAD to associate the two CDC interfaces */
 
  0x08, /* bLength */
  0x0B, /* bDescriptorType */
  CDC0_COMM_INTERFACE, /* bFirstInterface */
  0x02, /* bInterfaceCount */
  0x02, /* bFunctionClass */
  0x02, /* bFunctionSubClass */
  0x01, /* bFunctionProtocol */
    INTF_STRING_INDEX + 1, /* iFunction (Index of string descriptor describing this function) */
 
   /*Interface Descriptor */
  0x09,   /* bLength: Interface Descriptor size */
  USB_INTERFACE_DESCRIPTOR_TYPE,  /* bDescriptorType: Interface */
  /* Interface descriptor type */
  CDC0_COMM_INTERFACE,   /* bInterfaceNumber: Number of Interface */
  0x00,   /* bAlternateSetting: Alternate setting */
  0x01,   /* bNumEndpoints: One endpoints used */
  0x02,   /* bInterfaceClass: Communication Interface Class */
  0x02,   /* bInterfaceSubClass: Abstract Control Model */
  0x01,   /* bInterfaceProtocol: Common AT commands */
  INTF_STRING_INDEX + 1,   /* iInterface: */
 
  /*Header Functional Descriptor*/
  0x05,   /* bLength: Endpoint Descriptor size */
  0x24,   /* bDescriptorType: CS_INTERFACE */
  0x00,   /* bDescriptorSubtype: Header Func Desc */
  0x10,   /* bcdCDC: spec release number */
  0x01,
 
  /*Call Management Functional Descriptor*/
  0x05,   /* bFunctionLength */
  0x24,   /* bDescriptorType: CS_INTERFACE */
  0x01,   /* bDescriptorSubtype: Call Management Func Desc */
  0x00,   /* bmCapabilities: D0+D1 */
  CDC0_DATA_INTERFACE,   /* bDataInterface: 2 */
 
  /*ACM Functional Descriptor*/
  0x04,   /* bFunctionLength */
  0x24,   /* bDescriptorType: CS_INTERFACE */
  0x02,   /* bDescriptorSubtype: Abstract Control Management desc */
  0x02,   /* bmCapabilities */
 
  /*Union Functional Descriptor*/
  0x05,   /* bFunctionLength */
  0x24,   /* bDescriptorType: CS_INTERFACE */
  0x06,   /* bDescriptorSubtype: Union func desc */
  CDC0_COMM_INTERFACE,   /* bMasterInterface: Communication class interface */
  CDC0_DATA_INTERFACE,   /* bSlaveInterface0: Data Class Interface */
 
  /*Endpoint 2 Descriptor*/
  0x07,                           /* bLength: Endpoint Descriptor size */
  USB_ENDPOINT_DESCRIPTOR_TYPE,   /* bDescriptorType: Endpoint */
  CDC0_INTEP_ADDR,                     /* bEndpointAddress */
  0x03,                           /* bmAttributes: Interrupt */
  LOBYTE(CDC_CMD_PACKET_SZE),     /* wMaxPacketSize: */
  HIBYTE(CDC_CMD_PACKET_SZE),
  0xFF,                           /* bInterval: */
 
  /*Data class interface descriptor*/
  0x09,   /* bLength: Endpoint Descriptor size */
  USB_INTERFACE_DESCRIPTOR_TYPE,  /* bDescriptorType: */
  CDC0_DATA_INTERFACE,   /* bInterfaceNumber: Number of Interface */
  0x00,   /* bAlternateSetting: Alternate setting */
  0x02,   /* bNumEndpoints: Two endpoints used */
  0x0A,   /* bInterfaceClass: CDC */
  0x00,   /* bInterfaceSubClass: */
  0x00,   /* bInterfaceProtocol: */
  0x00,   /* iInterface: */
 
  /*Endpoint OUT Descriptor*/
  0x07,   /* bLength: Endpoint Descriptor size */
  USB_ENDPOINT_DESCRIPTOR_TYPE,      /* bDescriptorType: Endpoint */
  CDC0_OUTEP_ADDR,                            /* bEndpointAddress */
  0x02,                              /* bmAttributes: Bulk */
  LOBYTE(CDC_DATA_MAX_PACKET_SIZE),  /* wMaxPacketSize: */
  HIBYTE(CDC_DATA_MAX_PACKET_SIZE),
  0xFF,                             /* bInterval: ignore for Bulk transfer */
 
  /*Endpoint IN Descriptor*/
  0x07,   /* bLength: Endpoint Descriptor size */
  USB_ENDPOINT_DESCRIPTOR_TYPE,     /* bDescriptorType: Endpoint */
  CDC0_INEP_ADDR,                        /* bEndpointAddress */
  0x02,                             /* bmAttributes: Bulk */
  LOBYTE(CDC_DATA_MAX_PACKET_SIZE),  /* wMaxPacketSize: */
  HIBYTE(CDC_DATA_MAX_PACKET_SIZE),
  0x00,                              /* bInterval */
/*---------------------------------------------------------------------------*/
 
        /************** CDC1 Class Descriptor ****************/
    /******** /IAD should be positioned just before the CDC interfaces ******
                IAD to associate the two CDC interfaces */
 
      0x08, /* bLength */
      0x0B, /* bDescriptorType */
      CDC1_COMM_INTERFACE, /* bFirstInterface */
      0x02, /* bInterfaceCount */
      0xE0, /* bFunctionClass */
      0x01, /* bFunctionSubClass */
      0x03, /* bFunctionProtocol */
      INTF_STRING_INDEX + 2, /* iFunction (Index of string descriptor describing this function) */
 
       /*Interface Descriptor */
      0x09,   /* bLength: Interface Descriptor size */
      USB_INTERFACE_DESCRIPTOR_TYPE,  /* bDescriptorType: Interface */
      /* Interface descriptor type */
      CDC1_COMM_INTERFACE,   /* bInterfaceNumber: Number of Interface */
      0x00,   /* bAlternateSetting: Alternate setting */
      0x01,   /* bNumEndpoints: One endpoints used */
      0xE0,   /* bInterfaceClass: Communication Interface Class */
      0x01,   /* bInterfaceSubClass: Abstract Control Model */
      0x03,   /* bInterfaceProtocol: Common AT commands */
      INTF_STRING_INDEX + 2,   /* iInterface: */
 
      /*Header Functional Descriptor*/
      0x05,   /* bLength: Endpoint Descriptor size */
      0x24,   /* bDescriptorType: CS_INTERFACE */
      0x00,   /* bDescriptorSubtype: Header Func Desc */
      0x10,   /* bcdCDC: spec release number */
      0x01,
 
      /*Call Management Functional Descriptor*/
      0x05,   /* bFunctionLength */
      0x24,   /* bDescriptorType: CS_INTERFACE */
      0x01,   /* bDescriptorSubtype: Call Management Func Desc */
      0x00,   /* bmCapabilities: D0+D1 */
      CDC1_DATA_INTERFACE,   /* bDataInterface: 2 */
 
      /*ACM Functional Descriptor*/
      0x04,   /* bFunctionLength */
      0x24,   /* bDescriptorType: CS_INTERFACE */
      0x02,   /* bDescriptorSubtype: Abstract Control Management desc */
      0x00,   /* bmCapabilities */
 
      /*Union Functional Descriptor*/
      0x05,   /* bFunctionLength */
      0x24,   /* bDescriptorType: CS_INTERFACE */
      0x06,   /* bDescriptorSubtype: Union func desc */
      CDC1_COMM_INTERFACE,   /* bMasterInterface: Communication class interface */
      CDC1_DATA_INTERFACE,   /* bSlaveInterface0: Data Class Interface */
 
      /*Endpoint 2 Descriptor*/
      0x07,                           /* bLength: Endpoint Descriptor size */
      USB_ENDPOINT_DESCRIPTOR_TYPE,   /* bDescriptorType: Endpoint */
      CDC1_INTEP_ADDR,                     /* bEndpointAddress */
      0x03,                           /* bmAttributes: Interrupt */
      LOBYTE(CDC_CMD_PACKET_SZE),     /* wMaxPacketSize: */
      HIBYTE(CDC_CMD_PACKET_SZE),
      0x01,                           /* bInterval: */
 
      /*Data class interface descriptor*/
      0x09,   /* bLength: Endpoint Descriptor size */
      USB_INTERFACE_DESCRIPTOR_TYPE,  /* bDescriptorType: */
      CDC1_DATA_INTERFACE,   /* bInterfaceNumber: Number of Interface */
      0x00,   /* bAlternateSetting: Alternate setting */
      0x02,   /* bNumEndpoints: Two endpoints used */
      0x0A,   /* bInterfaceClass: CDC */
      0x00,   /* bInterfaceSubClass: */
      0x00,   /* bInterfaceProtocol: */
      0x00,   /* iInterface: */
 
      /*Endpoint OUT Descriptor*/
      0x07,   /* bLength: Endpoint Descriptor size */
      USB_ENDPOINT_DESCRIPTOR_TYPE,      /* bDescriptorType: Endpoint */
      CDC1_OUTEP_ADDR,                            /* bEndpointAddress */
      0x02,                              /* bmAttributes: Bulk */
      LOBYTE(CDC_DATA_MAX_PACKET_SIZE),  /* wMaxPacketSize: */
      HIBYTE(CDC_DATA_MAX_PACKET_SIZE),
      0x00,                             /* bInterval: ignore for Bulk transfer */
 
      /*Endpoint IN Descriptor*/
      0x07,   /* bLength: Endpoint Descriptor size */
      USB_ENDPOINT_DESCRIPTOR_TYPE,     /* bDescriptorType: Endpoint */
      CDC1_INEP_ADDR,                        /* bEndpointAddress */
      0x02,                             /* bmAttributes: Bulk */
      LOBYTE(CDC_DATA_MAX_PACKET_SIZE),  /* wMaxPacketSize: */
      HIBYTE(CDC_DATA_MAX_PACKET_SIZE),
      0x00,                              /* bInterval */
/*---------------------------------------------------------------------------*/
};

Запускаешь устройство, подключаешь устройство по USB и ВУАЛЯ!!! Три устройства определяются и работают (кроме одного - RNDIS, так как неправильно сконфигурирован, а точнее вообще не сконфигурирован).
И всё работает прекрасно. Флешка определяется - файлы вижу. Виртуальный ком-порт работает - данные шлются.
НО!
После перезагрузки устройства не вынимая кабеля устройство становиться неопознанным.
Далее после переподключения кабеля появиться моя флешка, но ком-порт уже отвалился и подключится я к нему не могу.
Кто подскажет куда копать? Как правильно перезагрузить устройство, чтобы оно нормально определялось по USB.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.08.2019, 17:02
Ответы с готовыми решениями:

STM32f205 && USB MSC HOST
Привет форумчане. Решил выбросить из некоего своего проекта SD-карточку, но у меня прошивка через нее обновляется :-/ не фонтан. Ну что-ж...

STM32F205 USB HOST подключение клавиатуры (проблемы)(решено)
Всем доброго утра, уже неделю рою интернет, использую метод "Вариантстного Программирования" (метод тыка) и прочее. Толку ноль, словно...

STM32f205 КЗ по питанию
Запаял stm32f205 в lqfp64 корпусе на макетную плату. Все VDD + VBOT соединил вместе с + пит, VSS - вместе на землю, VCAP - через...

20
 Аватар для COKPOWEHEU
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
14.08.2019, 12:13
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Искандер_61 Посмотреть сообщение
чуть позже буду выяснять по какой причине и где меняется этот дескриптор
Цитата Сообщение от Искандер_61 Посмотреть сообщение
Достаточно было указать const в определении дескриптора
Похоже на серьезную ошибку срыва памяти. Если после указания const не вылезли ошибки, значит именно в дескриптор никто писать не пытался. Но раз все-таки писали, значит просто через память по абсолютному адресу. Хорошо, вы объявили дескриптор константой и вынесли его из-под удара. Но ведь там теперь оказалась другая переменная, запись в которую может быть еще опаснее. Не говоря о том, что запись вообще может идти куда попало в память. В общем, советую не отбрасывать эту ошибку.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.08.2019, 12:13

STM32F205 SIM5320E
Доброго времени суток! Не пинайте, вопрос по модему, может кто сталкивался. Существует следующая проблема: конфигурируем модем в режиме...

АЦП stm32f205
Не работает АЦП stm32f205. Собственные мысли, где может быть ошибка, кончились, поэтому обращаюсь с просьбой помочь разобраться. Пытаюсь...

NES эмулятор на stm32f205
Заделал тут девайсину. В общем то - спортивный интерес. Код был взят у китайцев (waves nes). Немного переработан и вот.. ...

STM32f205 + STMCube + Audio Example
Нашел такую замечательную прогу, как STMCube. С помощью ее сгенерировал проект USB HID - все работает. Но вот с Oudyo классом проблема -...

Работа с USB-token или usb с премудростями
Доброго пятничного утра всем! Сначала опишу что есть и как это выглядит, а потом опишу что нужно) Есть проект, в нем будут...


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

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru