STM32f4 USB HS DMA HAL. Как это было

Попросил меня как-то один уважаемый заказчик организовать ему передачу данных с контроллера (stm32f407) в компьютер. Всё бы ничего, но скорость ему требовалась аж 40 мегабит в секунду.

Надо сказать, что железка была уже готова, основной код написан, в качестве интерфейса передачи выбран USB High Speed с внешним PHY (USB3300). У программиста заказчика с USB что-то не заладилось, посему решили произвести усиление коллектива вашим покорным слугой. Для полноты картины следует добавить, что весь код контроллера был написан при помощи CubeMX, а программа на ПК — на Delfi.

Читать дальше

Управляем вентиляцией через интернет с помощью esp8266

esp8266 + nrf24l01

WiFi модуль esp8266 используется в качестве веб-сервера для беспроводного управления вентиляцией через nRF24L01+.
Вот в эту конструкцию добавляется WiFi модуль, который выполняет роль «мозга» системы вентиляции.
Собранные значения углекислого газа отправляются на облачный сервер интернета вещей — ThingSpeak



Читать дальше
  • +3
  • 25 апреля 2016, 12:47
  • vad7

Эмуляция носителя FAT32 на stm32f4


Некоторое время назад возникла данная задача — эмуляция носителя FAT32 на stm32f4.
Её необычность заключается в том, что среди обвязки микроконтроллера вовсе может не быть накопителя, вроде FLASH-контроллера или SD-карты.
В моём случае накопитель был, но правила работы с ним не позволяли разместить файловую систему. В ТЗ, тем не менее, присутствовало требование организовать Mass Storage интерфейс для доступа к данным.
Результатом работы явился модуль, который я озаглавил «emfat», состоящий из одноимённого .h и .c файла.
Модуль независим от платформы. В прилагаемом примере он работает на плате stm32f4discovery.
Функция модуля — отдавать куски файловой системы, которые запросит usb-host, подставляя пользовательские данные, если тот пытается считать некоторый файл.
Итак, кому это может быть полезно и как это работает — читайте далее.


Читать дальше

Переполнение при отсчете времени в STM32Cube

У меня есть статья, где я описываю, как замечательно, что в STM32Cube есть отсчет времени из коробки. Рекомендую ее в качестве введения.

STM32Cube считает время в миллисекундах. Время хранится в беззнаковой целочисленной 32-битной переменной:

static __IO uint32_t uwTick;

Это означает, что через 49 суток 17 часов 2 минуты 47 секунд и 295 миллисекунд произойдет переполнение этой переменной.

Хорошо, если устройство не может так долго работать, например, гарантировано сядет батарейка. Но, что если устройство должно работать непрерывно месяцами?


Читать дальше

Fritzing - opensource аналог Sprint Layout

Fritzing — ПО с открытым кодом, разработанное чтобы помочь дизайнерам, начинающим радиолюбителям и просто энтузиастам перейти от физического прототипирования к законченному продукту на базе популярных платформ Arduino, Raspberry Pi и многих других.

Несмотря на то что изначально Fritzing разрабатывался как инструмент автоматизации прототипирования для не-инженеров в программе есть довольно много различных интересных фишек, и в целом после серьезного ПО он мне очень напоминает Sprint Layout по удобству и легкости работы.

На сегодняшний день это самое простое ПО для проектирования и производства печатных плат.
Но я использую его для макетирования на обычных паечных макетных платах поскольку Fritzing позволяет смотреть принципиальную схему для проверки правильности разводки схемы — как раз то чего мне всегда не хватало в Sprint Layout. Беспаечные макетные платы и stripboard тоже поддерживаются.
И конечно можно сначала составить схему, а уже потом разводить плату.

Поскольку Fritzing занимает мало места (>200 МБ) и это portable ПО я всегда ношу его с собой на флешке и на 8" планшете с Win8.1


Читать дальше

Стек для W5200 без циклов задержек + STM32F103

Чипы корейской фирмы WIZnet весьма широко известны и популярны. Так же полно где можно скачать драйверы для этих микросхем. Последняя реализация выполнена на W5500 здесь
Однако все драйверы построены по принципу вызова функций, которые весьма надолго стопорят основной цикл программы, мучительно и многократно ожидая события от внешней системы. Особенно «умиляет» ожидание в функции отправки по TCP и выход из нее по Timeout. А ведь это может растянуться не на одну секунду, и даже не 10! (При стандартных настройках — 28 сек). В некоторых случаях, если программа заточена полностью на Ethernet — это не критично, но не в моем случае. Да и вообще, инструкции вида
while(!Внешнее событие);
меня вымораживает напрочь, так как устройство полностью оказывается неработоспособным длительное время.
Мною были написаны несколько модулей, в которых я реализовал стек для W5200 без задержек.

Читать дальше
  • +5
  • 26 декабря 2015, 22:52
  • Mihail
  • 1

FE1.1, FE2.1 или что нам стоит USB HUB построить

Лирическое отступление

Однажды возникла у меня на работе задача встроить USB HUB в уже имеющееся устройство. Первая мысль была — заказать некоторое кол-во готовых хабов у наших китайских друзей, и лишив их корпуса, впихнуть в корпус собственно конечного устройства. Но этот вариант был отметён по причине абсолютного отсутствия места, да и как то всё таки кривое решение. Тогда было решено встроить USB HUB в уже имеющеюся печатную плату. Благо места на плате для этих действий было достаточно.
Порыскав на предмет того, на основе какой микрухи можно построить USB 2.0 High Speed USB HUB, наткнулся на очень вкусные по цене микрухи FE1.1 и FE2.1, отлчие у которых только в количестве портов хаба — 4 и 7 соответственно.


Читать дальше

Составное USB устройство на STM32F4

После реализации USB audio, захотелось прикрутить к проекту еще и ком-порт. Естественно, через USB CDC. Тема в интернете освещена многократно, но, в основном, по форумам производителей МК. Ближе всего подходит к моему случаю аппнота NXP AN11115 (http://www.nxp.com/documents/application_note/AN11115.zip) в которой разбирается составное устройство UAC+CDC.


Читать дальше

Асинхронное USB аудио на STM32

Для того, чтобы вывести звук из компьютера в микроконтроллер, у современного распространенного компьютера есть четыре подходящих интерфейса: Ethernet, Bluetooth, USB и S/PDIF. В МК, три из них требует использования внешнего железа (S/P DIF вход напрямую стал поддерживаться начиная с STM32F446), а Ethernet, кроме того — еще и специального драйвера на стороне компьютера. Поэтому выбор пал на USB.


Читать дальше

Цифровые нерекурсивные фильтры. Часть 2.

Эпиграф:«Asinus Buridani inter duo sinus cardinalis»

Существует огромное количество методик вычисления коэффициентов КИХ- фильтра. Посмотреть некоторые их них можно здесь или здесь. И всегда возникает вопрос: «А какую методику выбрать? Или тупо обратиться к МатЛабу?».
С одной из этих методик я и собираюсь вас подробно ознакомить. В этой части мы будем создавать КИХ — фильтры. Как говорится — «своими руками» (ну и немного — головой:-)!


Читать дальше