реклама на сайте
подробности

 
 
> STM32 USB неправильный порядок данных
Wasserati
сообщение May 19 2016, 18:22
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 1-06-13
Пользователь №: 77 044



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


Сообщение отредактировал IgorKossak - May 19 2016, 19:22
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 3)
Kabdim
сообщение May 20 2016, 07:06
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



Оффтопик: безотносительно вопроса во второй ветке бага: "uint16_t i;" + "for (i = (LEN - 1); i >= 0; i--)" = бесконечный цикл, т.к. беззнаковые числа всегда положительны или равны 0.
Go to the top of the page
 
+Quote Post
Wasserati
сообщение May 20 2016, 08:35
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 1-06-13
Пользователь №: 77 044



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

Если у кого есть рабочий пример программы передачи массива, поделитесь, пожалуйста.
Go to the top of the page
 
+Quote Post
misyachniy
сообщение May 22 2016, 05:47
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 716
Регистрация: 27-05-05
Из: Kyiv
Пользователь №: 5 454



Цитата(Wasserati @ May 20 2016, 11:35) *
Kabdim Спасибо, поправил.

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



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

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

Обязательно посмотреть как реализована передача длинных буферов.
Стандартно размер endpoint 64 байта, по этому возможно что функция болше 64 байт не обрабатывает корректно.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 15:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01357 секунд с 7
ELECTRONIX ©2004-2016