Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32 USB неправильный порядок данных
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Wasserati
Здравствуйте.
Осваиваю интерфейс USB. На основе HAL сгенерировал CDC устройство. Пытаюсь передавать с МК массив длинной 256 байт. Со стороны ПК принимаю эти же 256 байт. Вот здесь и возникает проблема. На стороне ПК сначала принимаются элементы массива с 64 по 255, а уже потом с 0 по 64. Тоесть первые 64 байта каким то образом сдвигаются в самый конец.В чем тут ошибка может быть?
Использую МК STM32F103RC.
Код использую нижеприведенный. Все остальное - код куба, без каких либо изменений.
CODE
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);
}
}
Kabdim
Оффтопик: безотносительно вопроса во второй ветке бага: "uint16_t i;" + "for (i = (LEN - 1); i >= 0; i--)" = бесконечный цикл, т.к. беззнаковые числа всегда положительны или равны 0.
Wasserati
Kabdim Спасибо, поправил.

Если у кого есть рабочий пример программы передачи массива, поделитесь, пожалуйста.
misyachniy
Цитата(Wasserati @ May 20 2016, 11:35) *
Kabdim Спасибо, поправил.

Если у кого есть рабочий пример программы передачи массива, поделитесь, пожалуйста.



Вам нужео смотреть реализацию функции CDC_Transmit_FS().
Есть варианты с ошибками.

http://electronics.stackexchange.com/quest...-port-baud-rate

Обязательно посмотреть как реализована передача длинных буферов.
Стандартно размер endpoint 64 байта, по этому возможно что функция болше 64 байт не обрабатывает корректно.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.