Wasserati 0 19 мая, 2016 Опубликовано 19 мая, 2016 (изменено) · Жалоба Здравствуйте. Осваиваю интерфейс USB. На основе HAL сгенерировал CDC устройство. Пытаюсь передавать с МК массив длинной 256 байт. Со стороны ПК принимаю эти же 256 байт. Вот здесь и возникает проблема. На стороне ПК сначала принимаются элементы массива с 64 по 255, а уже потом с 0 по 64. Тоесть первые 64 байта каким то образом сдвигаются в самый конец.В чем тут ошибка может быть? Использую МК STM32F103RC. Код использую нижеприведенный. Все остальное - код куба, без каких либо изменений. uint8_t buf[LEN], j = 0; int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USB_DEVICE_Init(); uint16_t i; while (1) { if (j == 0) { for (i = 0; i < LEN; i++) { buf[i] = (uint8_t)i; } j = 1; } else { for (i = (LEN - 1); i >= 0; i--) { buf[i] = (uint8_t)i; } j = 0; } buf[0] = 0x01; buf[1] = 0x02; buf[LEN - 2] = 0x03; buf[LEN - 1] = 0x04; HAL_Delay(1000); while (CDC_Transmit_FS(buf, LEN) == 1); } } Изменено 19 мая, 2016 пользователем IgorKossak [codebox] для длинного кода, [code] - для короткого!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kabdim 0 20 мая, 2016 Опубликовано 20 мая, 2016 · Жалоба Оффтопик: безотносительно вопроса во второй ветке бага: "uint16_t i;" + "for (i = (LEN - 1); i >= 0; i--)" = бесконечный цикл, т.к. беззнаковые числа всегда положительны или равны 0. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Wasserati 0 20 мая, 2016 Опубликовано 20 мая, 2016 · Жалоба Kabdim Спасибо, поправил. Если у кого есть рабочий пример программы передачи массива, поделитесь, пожалуйста. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
misyachniy 0 22 мая, 2016 Опубликовано 22 мая, 2016 · Жалоба Kabdim Спасибо, поправил. Если у кого есть рабочий пример программы передачи массива, поделитесь, пожалуйста. Вам нужео смотреть реализацию функции CDC_Transmit_FS(). Есть варианты с ошибками. http://electronics.stackexchange.com/quest...-port-baud-rate Обязательно посмотреть как реализована передача длинных буферов. Стандартно размер endpoint 64 байта, по этому возможно что функция болше 64 байт не обрабатывает корректно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться