STM32F4DISCOVERY - организация обмена данными с компьютером

Микроконтроллер STM32F407VGT6, установленный на плате STM32F4DISCOVERY имеет, наверно, весь возможный набор возможностей для связи с внешним миром. И при желании, если по изгаляться, вс е они могут быть использованы для связи с компьютером.

  • USB 2.0 full-speed device/host/OTG со своим PHY на борту
  • USB 2.0 high-speed/full-speed device/host/OTG с отдельным DMA, со своим full-speed PHY на борту, есть поддержка ULPI
  • 10/100 Ethernet MAC с отдельным DMA, поддержка PHY-микросхем с интерфесами IEEE 1588v2, MII/RMII
  • 3x SPI (37.5 МБит/с), 2 из них с мультиплексированными полнодуплексными I2S для качественной передачи звука
  • 3x I2C с поддержкой SMBus/PMBus
  • 4x USART, 2x UART: 10.5 МБит/с, интерфейс ISO 7816, LIN, IrDA, modem control
  • 2x CAN (2.0B Active)
  • SDIO (для SD-карт)
  • DCMI - [от 8 до 14]-битный параллельный интерфейс камеры (до 54 МБайт/с)

Однако, более привычными способами обмена данными с компьютером являются COM-port, USB и Ethernet.

К сожалению, отладочная плата STM32F4DISCOVERY не предоставляет возможность обмениваться данными с компьютером через COM-port  и Ethernet без подключения каких либо внешних устройств, дополнительных плат или оборудования. Зато STM32F4DISCOVERY имеет микро-USB и это значит что для организации обмена данными с компьютером первоначально можно ориентироваться именно на использование этого микро-USB.

В этом случае мне пока известны две возможности

  • организация обмена данными через виртуальный com-port,  режим CDC (Communication Device Class) — эмуляция COM-порта
  • организация обмена данными используя режим HID (human interface device) - класс устройств USB для взаимодействия с человеком.

К сожалению на сайте компании я не нашел примеров использования CDC и HID именно для STM32F4DISCOVERY. Есть какие то примеры, но они ориентированы на подключение дополнительных плат: STM32F4DIS-BB, STM32F4DIS-LCD, STM32F4DIS-CAM, которых у меня пока нет. Поэтому и примеры не работают, а для того что бы перелопатить эти примеры под STM32F4DISCOVERY нужно иметь достаточно знаний и опыт, которых тоже пока нет.

Я довольно долго искал рабочие примеры в интернет. Для CooCox мне вообще не попалось ничего, а вот под IAR EWARM в конце концов нашлось. Мне попалась на глаза статья "Примеры работы с USB Device для STM32F4-Discovery" на сайте easyelectronics.ru (http://firsthand.ru/node/308/). К ней прилагались примеры, которые у меня заработали сразу.

Используя эти примеры как основу и будет организовываться обмен STM32F4DISCOVERY с компьютером.

Но прежде чем перейти к конкретике, немного размышлений. Мне пока не известно, как будет организован обмен с компьютером в реальном устройстве. Возможно будет использован RS-485, может останется вариант с USB или, не исключено, будет Ethernet. Поэтому процесс обмена хочется организовать так, чтобы по минимуму вносить изменения в программу для микроконтроллера. А это, по моему возможно, когда между программой обработки данных в микроконтроллере и каналом передачи будут использоваться буферы.

То есть, сама программа обработки данных в микроконтроллере "берет" данные из входного буфера и после обработки, "кладет" в выходной буфер и ничего "не знает" как и откуда поступает во входной буфер и куда и как уходит из выходного буфера.

При такой организации, по моему, переход между COM-port, USB и Ethernet потребует минимальных изменений в коде для микроконтроллера.