[Решено в основном] USB -3X UART ?

Джоби
Сб 25 августа 2018 г., 6:15
Привет сообщество.
Любые шансы, что мы достигнем этой функции?
https: // satoshinm.GitHub.io/blog/171223 ... _pill.HTML
Так что у нас есть три виртуальных COM -порта в Windows, которые можно использовать в Arduino.
Нужно ли изменить загрузчик?

Моя цель: сделать 3 -кратную беспроводную консоль UART
В настоящее время я использую: Windows->Центр->3xusb to uart->Синяя таблетка->Беспроводной->Синяя таблетка->3XUART до 232 рупий

Стивестронг
Сб 25 августа 2018 г. 8:18 утра
Я думаю, что пример из ссылки, которую вы предоставили, реализует те же серийные данные USB TX, реплицированные на 3 портах USART. В одном направлении, Техас.
Вы хотите иметь 3 различных двунаправленных коммунальных каналов, верно?
Для этого я думаю, что вы должны написать свое собственное приложение на ПК, которое мультиплексирует 3 серийных канала на одном и том же канале USB CDC.
И соответствующий Mux/Demux на BP.
Я не знаю какую -либо многочисленную реализацию CDC -последовательного канала на одном и том же порте USB, но я могу ошибаться.

Джоби
Сб 25 августа 2018 г. 9:24
Хорошо, я должен признать, что не очень хорошо понимаю эту статью.
Я не очень хорош во всем, что USB и драйвер Windows.
И, очевидно, я не могу запрограммировать свой собственный драйвер Windows.

Стивестронг
Сб 25 августа 2018 г., 22:41
После более тщательного взгляда на ссылку я понял, что бункер действительно генерирует 3 различных виртуальных компонента на ПК!
https: // github.com/satoshinm/pill_serial
Итак, я был неправ :?

AG123
Солнце 26 августа 2018 г., 7:31
Мне кажется, что какая-то настройка композита USB, следовательно, это возможно, но с модифицированной базой кода USB-сериала
Поскольку BMP упоминается, я предполагаю, что можно просмотреть коды BMP, чтобы увидеть, как это реализовано

Если кто -то заинтересован в реализации того, что можно использовать библиотеку USB -композитной (HID / MIDI / MASS)
ViewTopic.PHP?f = 13&t = 2926
как отправная точка

Модификации вряд ли сохранят USB-сериал в своей текущей форме, следовательно, это, скорее всего, должно быть сделано в виде вилки

Арпрос
Ср 29 августа 2018 г., 18:32
Быстрый и грязный способ - просто сделать три копии каждого из USBComposite.CPP, USBCOMPOSITE.H, usb_composite_serial.H и USB_COMPOSITE_SERIAL.C в моей композитной библиотеке USB, а затем переименование глобалов и занятий в двух из трех копий, чтобы они не конфликтули. Эн.глин., Usbcomposite.CPP определит USBCompositeserial Class, в то время как USBComposite2.CPP определит почти идентичный класс USBCompoSiteseterial2.

Это приведет к некоторому дублированному коду, но для этого потребуется всего около получаса. :-)

Правильный способ сделать это - изменить библиотеку USB Composite, чтобы разрешить несколько экземпляров одного и того же плагина. Это потребует серьезных изменений в базовом коде C.

Джоби
Чт 30 августа 2018 г., 19:32
Это хорошая идея. Спасибо. Я попробую это. Я нашел эту LIB в моей папке STM32Duino
Но в настоящее время я не могу найти пример, как создать один USB. Я должен признать, что я не получил его мгновенно.
Кто -нибудь может привести мне пример для одного композиториального ?

Джоби
Сб 01 сентября 2018 г. 13:18
Я узнал, как создать один USB/сериал.
Но при попытке скопировать/переименовать файлы, я пробую целый день, но всегда получаю «несколько определений» или «не определено» что -то.
Я сдаюсь, потому что мне всегда трудно быть связанным с кем -то еще кодом.

Джоби
Ср. 05 сентября 2018 г., 21:01
Может ли кто -нибудь из профессионалов, вероятно, может помочь мне и может создать эти копии?

Арпусс написал, что мне нужно сделать копии:
Usbcomposite.CPP
Usbcomposite.час
usb_composite_serial.час
usb_composite_serial.в
Я не уверен, но мне нужно скопировать usbcompositeserial.H и USBCompositeserial.CPP также?

Стивестронг
Чт, 06 сентября 2018 г. 8:39
ИМХО, самый простой способ заставить его работать - это использовать ту же среду, что и оригинальный плакат, e.глин. Libopencm3.

В противном случае только @arpruss сможет поддержать вас в его библиотеке.

AG123
Чт, 06 сентября 2018 г., 11:44
Строго говоря, чтобы вмешиваться с USB, нужно было бы войти во внутреннюю работу «Descriptors USB» и для того, чтобы скрыть «Hid Reports»
http: // www.USB.org/разработчики/docs/devClass_docs/
Существует довольно много, чтобы переварить, так как USB является «предопределенным» стандартом, в некотором смысле Microsoft et.ал. Реализовано большой набор «драйверов» хоста для классов устройств, соответствующих этим спецификациям.
Но для «упрощения» нужно было бы выяснить, как вернуть дескрипторы, когда хост выпустит «получить конфигурацию», «Получить дескриптор» или «получить запрос интерфейса», и обычно это для конкретного варианта использования (e.глин. USB CDC-ACM для эмуляции «модем»)
Это, вероятно, понадобится один, чтобы познакомиться с USB Standard E.глин. В ссылке выше

Mrburnette
Чт, 06 сентября 2018 12:23
[Джоби - Сб 25 августа 2018 г., 6:15] - <...>
Так что у нас есть три виртуальных COM -порта в Windows, которые можно использовать в Arduino.
Нужно ли изменить загрузчик?

Моя цель: сделать 3 -кратную беспроводную консоль UART
В настоящее время я использую: Windows->Центр->3xusb to uart->Синяя таблетка->Беспроводной->Синяя таблетка->3XUART до 232 рупий
Во-первых, Bootloader не имеет ничего общего с приложением STM32 Serial-USB (Sketch); то есть серийный USB-это бинарник, который добавляется к эскизу во время ссылки.

Во-вторых, Мне трудно понять вариант использования серийного порта 1 UC и 3. Псевдо последовательные потоки можно легко сделать по 1 USB -порту, используя командные коды для переключения машины состояния в программном обеспечении. Конечно, нужно программное обеспечение на основе компьютера для управления потоками в ожидании процессов.

Я признаю, что перечисление 3 последовательных портов из одного USB -соединения было бы умным трюком в гостиной, я не вижу истинного значения в таком стремлении. ИМХО, на форуме достаточно проблем с одним сериалом по поводу реализации USB. Это совершенно другой сценарий, чем предыдущие усилия с HID, где библиотека заполнила пустоту. Возможно, одна из умных USB внедрит 3 сериала более 1 USB, и будет обнаружена такая возможность очень полезно.


Луча

Добавлен:
Псевдо серийные потоки (RO) Пример: http: // www.пиклист.com/techref/microchi ... 8ch-ba.htm

Рик Кимбалл
Чт, 06 сентября 2018 г., 16:31
[Mrburnette - Четверг 06, 2018 12:23 вечера] - Во-вторых, Мне трудно понять вариант использования серийного порта 1 UC и 3. Псевдо последовательные потоки можно легко сделать по 1 USB -порту, используя командные коды для переключения машины состояния в программном обеспечении. Конечно, нужно программное обеспечение на основе компьютера для управления потоками в ожидании процессов.
Я обычно использую более одного USB -серийного ключа. Мне нужно попробовать прошивку и посмотреть, насколько хорошо она держатся ниже 115 тыс. Скорость.

Blackmagic Lesess является основой для этого кода из того, что я вижу. BMP предоставляет 2 порта Comm. Один виртуальный последовательный порт для протокола удаленного сервера GDB и один в качестве последовательного устройства общего назначения. Это позволяет вам использовать одно USB -соединение для поддержки функции GDB, а также подключить его к серийным портам USART.

Я вижу STM32F103, действуя как USB -> 3 виртуальные порты Comm - действительно полезная функция. Вы можете подключить это к Raspberry Pi и предоставить 3 порта USART и использовать только один USB -порт. Довольно полезно, я думаю.

Рик Кимбалл
Чт, 06 сентября 2018 г., 16:52
Кажется довольно приличным :) .. Спасибо, Стошинм!

Вы можете увидеть, как библиотека LiboPencm3 производит небольшой код. Все это меньше, чем пустой эскиз Arduino: RNG_HandleTypeDef hrng; uint32_t randomNumber; void setup() { Serial.begin(9600); delay(3000); RCC_PeriphCLKInitTypeDef PeriphClkInitStruct; PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RNG; PeriphClkInitStruct.RngClockSelection = RCC_RNGCLKSOURCE_PLL; HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); __HAL_RCC_RNG_CLK_ENABLE(); hrng.Instance = RNG; HAL_RNG_Init(&hrng); int i; for (i=1; i<25; i++) { HAL_RNG_GenerateRandomNumber(&hrng, &randomNumber); Serial.println(randomNumber); } } void loop() { // put your main code here, to run repeatedly: }

Стивестронг
Чт, 06 сентября 2018 г., 17:25
+10 : D

Джоби
Чт, 06 сентября 2018 г., 18:12
My Usecase: я сетевой парень, и я хочу создать/три устройства на серийной беспроводной консоли.
На ПК я использую пута.
Теперь я хочу перенести эти 3*9600 серийных по сравнению с NRF24L01 на второй STM, который действует как приемник.
В настоящее время я сделал это как прототип с Arduino (с NRF LIB где -то здесь, на форуме, уже описанном) и 3 USB в серийный конвертер. Если бы я мог устранить необходимость этих 3 конвертеров.

Проблема. Я использовал только Arduino для всего этого STM32. Я должен признать, что в настоящее время я не могу собрать источник, который я разместил в начале. И я также понятия не имею, как я мог бы добавить материал NRF в программное обеспечение для открытия Post, и если есть некоторые доступные либера.
Вот почему я спрашиваю здесь. В настоящее время я как -то связан с Ардуино.

Mrburnette
Чт, 06 сентября 2018 г., 21:12
Я стою поражен.
Если Рик говорит, что это полезно, это, безусловно, должно быть. Как сказала бы моя дочь "... Я не катаюсь так..."Но, черт возьми, это выглядит круто.

Луча

Рик Кимбалл
Чт, 06 сентября 2018 г., 22:43
Ранее я нашел синюю таблетку, которую я мог бы использовать, чтобы проверить этот материал. Тем не менее, на нем не было булавок. Итак, все, что я сделал, это исправил резистор R10 1K5, когда я показал работу /dev /ttyacmx. С тех пор я нашел еще несколько булавок, припаял их и провел несколько тестирования.

В своем тестировании я нашел странность с USART1. Кажется, это не работает должным образом. USART2 и USART3 работают нормально. Сначала я подумал, что это может быть проблема периферийных часов. Я сделал еще несколько тестов и подключил ключ FTDI с PA9/PA10, чтобы помочь изолировать проблему.
В то время как serial_pill отправляет данные в штрафе USART1 TX/PA9 с правильной скоростью передачи, он не получает должным образом на PIN -PIN PA10. Я получаю искаженную персонаж. Мне нужно сделать еще немного копания.

Еще одна вещь: вы можете легко переполнить порты USART. Я тестировал с различными скоростями, но во всех случаях, если вы вводите это в своем терминале

12345678901234567890123456789012345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890123456789012345678901234567890

Затем скопируйте и вставьте это в окно терминала, оно получит только около 130 символов, прежде чем он просто игнорирует остальную часть вашей вставки.

Похоже, что код выиграет от использования USART ISR для передачи. Получение уже работает с обработчиком ISR.

Так что я, по крайней мере, получил из него 2 хороших виртуальных порта, USART2 и USART3

Конечно, это все на Linux, может быть, кто -то может примерить Windows или Mac OS/X

Рик Кимбалл
Пт, сентябрь 07, 2018, 4:03
Так что я должен был только что пойти в раздел «Проблемы» на странице GitHub. https: // github.com/satoshinm/pill_serial/uppess/1

Я попробовал некоторые модификации. Я обнаружил, что, изменяя порядок настройки USART1 USBD_EP_SETUP () и поместив их перед набором USART2, я могу выполнить работу PA9/PA10. Это ломает все, что набор - это последние. Я предполагаю, что он использует слишком много конечных точек USB.

Итак, вы получаете 2.5 портов UART. вместо 3. Тем не менее, этот код может быть полезен, если вы используете 3 порта, но одно из ваших последовательных портов используется только. :)

Джоби
Солнце 09 сентября 2018 г. 5:54 утра
Это также упоминалось в Readme от Arpruss.
https: // github.com/arpruss/usbcomposite_stm32f1

Начиная с «ограничений памяти», а также «ограничения конечной точки», которое составляет до 9 с 3 серийными.
Так что два сериала кажется максимум, но все еще довольно хорошим.

Может ли кто -нибудь дать мне путь, как я могу настроить простую среду разработки под Windows, чтобы собрать этот пример?

Джоби
Солнце 09 сентября 2018 г., 16:30
Для немецкой аудитории. https: // www.Микроконтроллер.сеть/статья ... _mit_stm32
Хорошее пошаговое руководство по программированию USB.

Гнурелигион
Сб 22 сентября 2018 г., 19:31
[Рик Кимбалл - Пт - Так что я должен был только что пойти в раздел «Проблемы» на странице GitHub. https: // github.com/satoshinm/pill_serial/uppess/1

Я попробовал некоторые модификации. Я обнаружил, что, изменяя порядок настройки USART1 USBD_EP_SETUP () и поместив их перед набором USART2, я могу выполнить работу PA9/PA10. Это ломает все, что набор - это последние. Я предполагаю, что он использует слишком много конечных точек USB.

Итак, вы получаете 2.5 портов UART. вместо 3. Тем не менее, этот код может быть полезен, если вы используете 3 порта, но одно из ваших последовательных портов используется только. :)
Рик, я вижу твой комментарий в разделе «Пилл_SERIAL» на GitHub. У меня была такая же проблема для последней декоративной ACM.
Следуя вашему лидерству, на самом деле читайте вещи, как здесь: https: // github.com/arpruss/usbcomposite_stm32f1 Есть 320 байт аппаратной буферной памяти, доступные после учета конечной точки 0. Ниже приведены потребности в памяти буфера по умолчанию в текущих компонентах:
USB -сериал: 144 байта
Да, только место для двоих, но дальше, вы можете увидеть некоторый оптимизм. Тем не менее, USB Serial, USB HID и USB MIDI позволяют уменьшить размеры буферов (и разрешить более сложные композитные устройства), вызывая:
...
Миди.setRxPacketSize (размер);
Миди.SetTxPacketSize (размер);
Так можем ли мы манипулировать размером пакета? Я попытался редактировать pill_serial/src/cdcacm.h и сжимать это:
#define cdcacm_packet_size 8
//#определить cdcacm_packet_size 64
Старый размер был 64 ... и просто попробовал 8, чтобы увидеть. Теперь, надеюсь, три ACM занимают меньше, чем 320 байтов аппаратного буфера.

Что ты знаешь? /dev/ttyacm2, или в последнем углу, первичный порт UART на PA9/PA10 теперь отправляет и получает без мусора!

Сегодня вечером припаят два других порта, чтобы увидеть, как этот взлом негативно влияет на скорость и вещи.

Джоби, если это сработает, и мы не сможем заставить сатошинм это исправить, я разделим ревизию pill_serial и выпустить ".бин "для тебя.

Рик Кимбалл
Солнце 23 сентября 2018 г., 17:03
[Гнурелигион - Сб 22 сентября 2018 г., 19:31] - #define cdcacm_packet_size 8
//#определить cdcacm_packet_size 64
Я только что попробовал это с 32, и, кажется, работает в беглых тестировании. Хорошая находка!


Изображение

Гнурелигион
Солнце 23 сентября 2018 г., 19:52
Спасибо. Был вполне доволен всем этим, пока не попробовал ваш мини -стресс -тест, просто вставьте несколько сотен персонажей в Minicom.
Похоже, иногда повторяет персонажи, и бросают их другие. Иногда отложенное эхо. Блеа.

Пробовал несколько вещей прошлой ночью ...
  • Увеличение частоты прерываний.
    Уменьшение частоты прерываний.
    Исправление проблемы кодирования с буфером UART FIFO.
    Увеличение размера буфера FIFO (128).
Ничего не повлияло.

Я подозреваю, что серийный таймер прерывает (три из них), а USB -обработка прерываний зажигает друг друга.
Кроме того, подозревайте, что блокирующая функция последовательной передачи может переоценить порез, выделенный для прерывания таймера. (пожимает плечами)
Буферы FIFO не защищены семафоры и не используют класс для этой структуры.
Все это кажется грубо реализованным и минимально задокументированным.

Возможно, я должен начать с нуля ... Должен быть пример STM32Duino, который реализует только один сериал CDC, то есть пуленепробиваемое?

Рик Кимбалл
Солнце 23 сентября 2018 г., 8:10 вечера
[Гнурелигион - Солнце 23 сентября 2018 г., 19:52] - Возможно, я должен начать с нуля ... Должен быть пример STM32Duino, который реализует только один сериал CDC, то есть пуленепробиваемое?
В прошлый раз я попробовал STM32Duino Native USB UART материал, он провалил мой тест на пасту. * Был какое -то время > 1 год

Гнурелигион
Пн 24 сентября 2018 г., 7:43
Нашел решение проблемы «тест на вставку». Прерывание, которое читает из USB, висело на полном буфере TX ... Внутри прерывания (съеживание).

В Усбуарте.C, USART_SEND_BLOCKEN () называется беспечно, не проверяя, заполнен ли буфер.
Прочитал на http: // libopencm3.орг/документы и нашел usart_get_flag (uint32_t usart, uint32_t flag).
Один из флага указывает, когда буфер TX пуст. Я положил здесь блок «если» в обработчике прерываний, и *poof *, тест пасты работает.
void SystemClock_Config(void) { RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE |RCC_OSCILLATORTYPE_MSI; RCC_OscInitStruct.LSEState = RCC_LSE_ON; RCC_OscInitStruct.MSIState = RCC_MSI_ON; RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_11; RCC_OscInitStruct.MSICalibrationValue = RCC_MSICALIBRATION_DEFAULT; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_MSI; RCC_OscInitStruct.PLL.PLLM = 6; RCC_OscInitStruct.PLL.PLLN = 20; RCC_OscInitStruct.PLL.PLLR = 2; RCC_OscInitStruct.PLL.PLLP = 7; RCC_OscInitStruct.PLL.PLLQ = 4; if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { /* Initialization Error */ while(1); } HAL_RCCEx_EnableMSIPLLMode(); /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */ RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2); RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK) { /* Initialization Error */ while(1); } }

Рик Кимбалл
Пн 24 сентября 2018 г. 15:29
[Гнурелигион - Пн 24 сентября 2018 г., 7:43] - Нашел решение проблемы «тест на вставку». Прерывание, которое читает из USB, висело на полном буфере TX ... Внутри прерывания (съеживание).
Это, похоже, не решает проблему для меня.
[Гнурелигион - Пн 24 сентября 2018 г., 7:43] - ...
Однако, когда я пробую передачу Zmodem, только между этими связанными портами, он не удается. Нак, тайм -аут. Странно, текст отличается от бинарного.
Может изменить буфер на неподписанный персонаж?:
void SystemClock_Config(void) { RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE |RCC_OSCILLATORTYPE_MSI; RCC_OscInitStruct.LSEState = RCC_LSE_ON; RCC_OscInitStruct.MSIState = RCC_MSI_ON; RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_11; RCC_OscInitStruct.MSICalibrationValue = RCC_MSICALIBRATION_DEFAULT; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_MSI; RCC_OscInitStruct.PLL.PLLM = 6; RCC_OscInitStruct.PLL.PLLN = 20; RCC_OscInitStruct.PLL.PLLR = 2; RCC_OscInitStruct.PLL.PLLP = 7; RCC_OscInitStruct.PLL.PLLQ = 4; if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { /* Initialization Error */ while(1); } HAL_RCCEx_EnableMSIPLLMode(); /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */ RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2); RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK) { /* Initialization Error */ while(1); } }

Рик Кимбалл
Пн 24 сентября 2018 г. 15:49
Несмотря на то, что мой тест на пасты, похоже, не работает, этот скрипт Python работает хорошо, отправляя 23 строки текста
void SystemClock_Config(void) { RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE |RCC_OSCILLATORTYPE_MSI; RCC_OscInitStruct.LSEState = RCC_LSE_ON; RCC_OscInitStruct.MSIState = RCC_MSI_ON; RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_11; RCC_OscInitStruct.MSICalibrationValue = RCC_MSICALIBRATION_DEFAULT; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_MSI; RCC_OscInitStruct.PLL.PLLM = 6; RCC_OscInitStruct.PLL.PLLN = 20; RCC_OscInitStruct.PLL.PLLR = 2; RCC_OscInitStruct.PLL.PLLP = 7; RCC_OscInitStruct.PLL.PLLQ = 4; if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { /* Initialization Error */ while(1); } HAL_RCCEx_EnableMSIPLLMode(); /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */ RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2); RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK) { /* Initialization Error */ while(1); } }

Гнурелигион
Пт 28 сентября 2018 г. 8:51 утра
Ну, Рик, я увидел, как ваш отчет об ошибке на GitHub. Похоже, содействие pill_serial не слишком заинтересован в поддержании кода или совершенствует его.

Был в состоянии использовать ваш сценарий Python для переполнения одного из ACM. Крошечная пауза, время.спать (0.01), после того, как каждая строка выпрямляет его прямо.

Я все еще не могу использовать два атм сразу с нулевым модемным связью между ними при полной скорости передачи Zmodem.

Что может происходить, так это то, что упреждающие USB IRQ не дают таймеру достаточное количество времени, чтобы обслуживать USARTS, когда их запускают запросы.

Ну, интересно, что работает любой ACM, а настройки линии работают ... Но это может быть одно основное оборудование, просто недостаточно надежное, чтобы поддержать несколько устройств. (Шуг) Просто не знаю.

Рик Кимбалл
Пт, 02 ноября 2018 г., 15:48
Я использовал модификацию размера 32 байта, чтобы работать все 3 последовательных порта. Я прикрепил .Bin Binary в zip -файле здесь, чтобы вы могли загрузить его на чертеж. Просто расстегнете разанизируйте файл ниже и используйте STM32Flash, чтобы загрузить .Файл корзины в чертеж. Когда я подключаю это в свой Raspberry Pi, я получаю 3 последовательных порта по цене 1 USB -порта.

/dev/ttyacm0 IS PA2/PA3 (TX/RX)
/dev/ttyacm1 IS PB10/PB11 (TX/RX)
/dev/ttyacm2 - PA9/PA10 (TX/RX)

В Windows /Mac OSX я понятия не имею о именах com или /dev. Вам придется выяснить это.

веселиться!

pill_serial.бин.Zip:
pill_serial.бин.молния
(5.82 киб) скачано 26 раз

STM32F103ZE COMPILE ошибка

STM32Duino - Вопросы архитектуры