Перейти к содержанию
    

STM32 USB неправильный порядок данных

Здравствуйте.

Осваиваю интерфейс 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);
 }
}

Изменено пользователем IgorKossak
[codebox] для длинного кода, [code] - для короткого!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Оффтопик: безотносительно вопроса во второй ветке бага: "uint16_t i;" + "for (i = (LEN - 1); i >= 0; i--)" = бесконечный цикл, т.к. беззнаковые числа всегда положительны или равны 0.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Kabdim Спасибо, поправил.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Kabdim Спасибо, поправил.

 

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

 

 

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

Есть варианты с ошибками.

 

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

 

Обязательно посмотреть как реализована передача длинных буферов.

Стандартно размер endpoint 64 байта, по этому возможно что функция болше 64 байт не обрабатывает корректно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...