Самый дешевый stm32 с usb
В последнее время микроконтроллеры от ST Microelectronics на основе ядра Cortex начали активно набирать популярность, как среди профессиональных, так и среди начинающих разработчиков устройств на микроконтроллерах. Причин тому несколько:
- невысокая цена по сравнению с конкурентами;
- большое количество встроенных интерфейсов;
- простота в программировании и высокая надежность.
Но при этом есть и один важный недостаток – все микроконтроллеры STM не выпускаются в DIP корпусах, что зачастую просто отпугивает новичков, ведь изготовить плату с дорожками менее 0,3мм в домашних условиях проблематично. Такое положение дел привело к появлению на рынке огромного количества отладочных плат, как от ST Microelectronics (Discovery), так и платы, выпущенные сторонними фирмами (Olimex, Pinboard). Мой выбор пал на Discovery по трем причинам:
- относительно невысокая цена (плату можно купить от 300р.);
- хорошее качество исполнения (хотя некоторые претензии к разводке есть, но они не столь существенны);
- много исходников и примеров выложено на сайте производителя;
- наличие встроенного программатора (вам не придется покупать его отдельно).
Цель первого урока – помочь начинающему разработчику выбрать отладочную плату, а в дальнейшем - научить основам программирования.
Итак, поехали.
STM32F0DISCOVERY
STM32VLDISCOVERY
Отличается от предыдущей платы только процессором STM32F100RBT6B (Cortex M3, 24МГц, flash 128Кб, RAM 8Кб) и разводкой гребенок периферии. Так же как и выше рассмотренная подходит для начинающих разработчиков. Больше о ней сказать и нечего.
STM32LDISCOVERY
STM32LDISCOVERY достойный результат эволюции предыдущей платы. Вот что в ней есть интересного:
- микроконтроллер STM32L152RBT6 (Cortex M3, 32МГц, flash 128Кб, RAM 8Кб, EEPROM 4Кб)
- интерфейсы: USB, USART, SPI, I2C;
- 8 таймеров;
- 24-канальный 12-битный АЦП;
-12-битный ЦАП;
- часы реального времени;
- контроллер LCD 8х40
- встроенный ST-link/V2.
На плате установлены:
- LCD дисплей 24х8;
- 4 светодиода;
- 2 кнопки;
- сенсорная клавиатура;
- 2 однорядные гребенки со свободными выводами.
О USB хочется сказать отдельно: контроллер поддерживает USB 2.0 full speed, режимы host и device, что нечасто встретишь у МК такого класса.
По сути плата оптимальный вариант для работы с ядром Cortex-M3, так что можно смело брать, благо цена невысокая.
STM32F3DISCOVERY относится к следующему поколению отладочных плат от STM и обладает следующими характеристиками:
- микроконтроллер STM32F303VCT6 (Cortex M4, 72МГц, flash 256Кб, RAM 48Кб)
- часы реального времени;
- встроенный ST-link/V2;
- 13 таймеров;
- 12 канальный DMA контроллер;
- 4 АЦП;
- 4 операционных усилителя;
- интерфейсы: CAN, USB 2.0, USART/UART, SPI, I2C;
- 87 линий GPIO.
На плате размещена следующая периферия:
- пользовательский USB-порт;
- 3-х осевой акселерометр и 3-х осевой геомагнитный сенсор в одном корпусе;
- 3-х осевой гироскоп;
- 10 светодиодов;
- 2 кнопки;
- 2 двухрядные гребенки.
Очень интересная плата, много возможностей для опытов. В целом мнение о ней осталось хорошее, но ее заточенность под отслеживание физического состояния и положения сильно сокращают простор для экспериментов, хотя легко можно самому сделать плату расширения.
STM32F4DISCOVERY
С этой платой мне довелось работать больше всего, да и понравилась она мне больше остальных – сказалась ее всесторонняя направленность.
Вот что она из себя представляет:
- микроконтроллер STM32F407VGT6 (Cortex M4, 168МГц, flash 1Мб, RAM 192Кб)
- встроенный ST-link/V2;
- таймеры;
- DMA контроллер;
- АЦП/ЦАП;
- интерфейсы: CAN, USB 2.0, USART/UART, SPI, I2C, GPIO;
На плате размещена следующая периферия:
- пользовательский USB-порт;
- 3-х осевой акселерометр;
- 8 светодиодов;
- 2 кнопки;
- 2 двухрядные гребенки;
- аудио ЦАП с усилителем класса D;
- всенаправленный цифровой микрофон.
Как я писал выше, эта плата стала для меня основной, порадовала способность работы со звуком, акселерометр.
Дальнейшие уроки будут основываться именно на этой плате.
Резюме.
Если вы решили начать работать с отладочными платами STM, то советую брать именно STM32F4DISCOVERY, на мой взгляд, у нее наибольший функционал. Дальнейшие статьи будут основываться именно на работе с ней. В ближайшее время будут написаны статьи на следующие темы:
- работа с GPIO, таймерами, прерываниями и т.п.;
- работа с интерфейсами UART, SPI, I2C и 1-wire на примерах реальных устройств, таких как дисплеи, GPS и GSM модули, датчики температуры, связь с компьютером по RS-232 и многое другое.
Конечная цель этого цикла – создание платы расширения для STM32F4. Все прошивки и схемы будут общедоступны.
Rough Опубликована: 19.03.2013 Изменена: 23.03.2013 0 3
Вознаградить Я собрал 0 5
Хотите прокачать ваши Arduino проекты? Заставить их работать быстрее, измерения и регулировку сделать точнее, ну и добавить баги(с новыми девайсами они неизбежны). Тогда эта статья для Вас.
Arduino тема всё больше захватывает умы человечества, но рано или поздно мы встречаемся с тем, что нам чего-то не хватает, например бюджета/размеров/пиновпортов/разрядности/производительности… Как говорил один мудрый человек — «Кто хочет, тот ищет возможности, кто не хочет — ищет причины».
Краткое изложение данной статьи в видео формате:
Ладно, меньше лирики и ближе к теме. В этой статье, я буду рассматривать дешёвую отладочную плату, которая основана на базе микроконтроллера STM32F103C8T6:
Для начала, сравним основные параметры STM32 платы, и её аналога по цене — Arduino Nano V3.0:
Всё это в сумме делает данную плату крайне привлекательной во всём, кроме одного — новичку, как например мне, тема STM32 кажется слишком затратной по времени, есть целые сайты посвящённые программированию этих микроконтроллеров. А вот если подружить STM32 с Arduino IDE, то порог вхождения опускается до крайне низкого уровня. Хотя, как говорится, «В каждой бочке мёда, есть ложка дёгтя», но об этом чуть ниже.
Приступим к подготовке платы, для работы с Arduino IDE. Первое что необходимо сделать — залить в микроконтроллер специальный загрузчик, который позволит прошивать плату через аппаратный USB, причём прямо из среды разработки. Для этого необходимо перевести верхний джампер(он же «BOOT0»), в положение «1»:
Дело в том, что в STM32 с завода прошит, в так называемую системную память(system memory), специальный загрузчик, который позволяет прошивать плату через самый обычный USB to UART переходник, не прибегая к специфическим программаторам типа ST-Link V2.
Дальше нам понадобиться переходник с USB на UART. Стоит помнить, что STM32, это 3.3 В логика, совместимость с 5-ти вольтовой не гарантируется, поэтому рекомендовано использовать USB to UART, у которого есть возможность выбора режимов работы с 3.3/5В логикой. Я использовал дешёвый переходник на базе CH340G:
* как видно, производитель не стал заворачиваться со смывкой флюса, на работу, конечно, никак не влияет.
Плату подключил к USB to UART переходнику следующим образом:
* PA10/PA9 на плате подписаны просто как A10/A9 — эти порты являются первым аппаратным USART'ом, всего их на плате 3, так же тут 2 аппаратных I2C и 2 SPI.
Ради удобства запитал плату от 5 В, для питания от 3.3 В на плате есть пин «3.3». Внимание, 5 В может запросто вывести микроконтроллер из строя, так что уделите должное внимание подключению.
Качаем, устанавливаем и запускаем Flash Loader Demonstrator(есть в архиве к статье):
Выбираем номер COM-порта нашего переходника, в моём случае это COM43, потом нажимаем «Next»:
Так как у меня микроконтроллер новый, ещё муха не сидела на него никто ничего не записывал(разумеется кроме самого производителя), то тут по умолчанию стоит защита от чтения, программа нас предупреждает, что если нажать кнопку «Remove protection», Flash память будет очищена, то есть если бы там была какая-то прошивка — она удалится. В моём случае там ничего полезного нет, так что смело жму. Далее вижу следующее:
Так как моя отладочная плата основана на микроконтроллере STM32F103C8 — здесь 64 Кбайт Flash памяти, есть ещё STM32F103CB микроконтроллер, где в два раза больше Flash.
Дальше кликаем «Next»:
Опять «Next», и видим следующее окно:
Выбираем «Download to device» и жмём на ". ":
Меняем тип файлов на *.bin и открываем файл «generic_boot20_pc13.bin»(тоже присутствует в архиве) который можно взять из проекта STM32duino-bootloader.
Дальше кликаем на кнопку «Next», после прошивки загрузчика мы увидим зелёный свет:
Потом надо скачать, для среды разработки Arduino IDE, специальное STM32 ядро(так же есть в архиве к статье). Тут есть один нюанс, на момент написания статьи, ядро не работает на версиях среды разработки свыше 1.6.5, у меня стоит 1.6.5-r5 которую скачал тут.
Проверенна работоспособность ядра на Arduino IDE версии 1.6.9.
В моём случае полный путь выглядит вот так — «C:\Users\RSK\Documents\Arduino\hardware»
Разумеется, что система устройство определить не сумеет, поэтому надо ещё установить драйвера на плату. Заходим в папку «Мои Документы\Arduino\hardware\Arduino_STM32\drivers\win»(или «drivers\win», в случае архива к статье), и запускаем от имени администратора файл «install_drivers.bat»:
После этого верхний джампер(тот что «BOOT0»), переводим в положение «0» и подключаем плату к компьютеру через microUSB кабель:
Она должна в диспетчере устройств определиться или как «Maple DFU» или «Maple Serial (COM*)»:
Не совсем понятно почему после первого подключения плата определяется по-разному, на разных компьютерах, но не суть, приступаем к настройке Arduino IDE.
Запускаем среду разработки, дальше Инструменты -> Плата -> Boards Manager:
Здесь нужно установить ядро для платы Arduino Due. Выбираем последнюю версию и нажимаем «Install»:
Потом Инструменты -> Плата -> «Generic STM32F103C», дальше Variant: «STM32F103C8 (20k RAM. 64k Flash)», Upload Method: «STM32duino bootloader», Порт — номер COM-порта платы, вообщем всё как на скрине:
Всё, плата готова к прошивке и программированию в среде разработки Arduino IDE. Давайте прошьём какой-то скетч из примеров, которые «вшиты» в ядро, заходим Файл -> Папка со скетчами -> hardware -> Arduino_STM32 -> STM32F1 -> libraries -> A_STM32_Examples -> Digital -> Blink:
Классический «Hello World» в мире микроконтроллеров. Изменяем PB1 на PC13, так как светодиод, что на плате, подключен к этому порту:
* К стати, загорается он по низкому уровню на ножке PC13.
Нажимаем кнопку «Вгрузить», после прошивки среда разработки выдаст что-то типа:
«Done!
Resetting USB to switch back to runtime mode
error resetting after download: usb_reset: could not reset device, win error: Не удается найти указанный файл.».
«dfu-util — © 2007-2008 by OpenMoko Inc.
Couldn't find the DFU device: [1EAF:0003]
This program is Free Software and has ABSOLUTELY NO WARRANTY»
Это означает, что плату прошить не удалось.
Когда среда разработки выдаёт:
«Searching for DFU device [1EAF:0003]…
Assuming the board is in perpetual bootloader mode and continuing to attempt dfu programming. »
И больше ничего не происходит, попробуйте в этот момент перезагрузить плату клацнув кнопку ресет. По аналогии это как с Arduino Pro Mini.
А теперь про «ложку дёгтя», о которой я писал вначале статьи, почему-то не всегда получается прошить плату в среде разработки, даже больше, она не всегда определяется компьютером. Я для себя это решил следующим образом, перед тем как загрузить прошивку(перед нажатием кнопки «Вгрузить»), клацаю «Reset» на плате, и после прошивки, ещё раз перезагружаю плату. В этом случае процент вероятности, что плата прошьется, равен 99%. Непонятно почему работает именно так, но факт. Думаю, что рано или поздно этот косяк поправят, и всё будет автоматом перезагружаться как нужно. А чтобы это быстрее поправили, надо чтобы комьюнити этой замечательной STM32 отладочной платы росла, поэтому делитесь этой статьей с друзьями, особенно с друзьями программистами.
По поводу распиновки:
Лучшее что мне удалось найти, это распиновка самого микроконтроллера(открывайте в новой вкладке):
К порту нужно обращаться по полному имени, например:
digitalWrite(PB0, LOW); analogWrite(PA8, 65535);pwmWrite(PA8, 65535);
analogRead(PA0);
LiquidCrystal lcd(PB0, PA7, PA6, PA5, PA4, PA3);
Я порылся в файлах ядра, и нашёл один интересный файл:
Documents\Arduino\hardware\Arduino_STM32\STM32F1\variants\generic_stm32f103c\board.cpp
- ШИМ, то есть функция
analogWrite();pwmWrite(); — PB0, PA7, PA6, PA3, PA2, PA1, PA0, PB7, PB6, PA10, PA9, PA8, а это далеко не все, которые размечены на распиновке чипа; - АЦП, аля analogRead(); — PB0, PA7, PA6, PA5, PA4, PA3, PA2, PA1, PA0.
Так что имейте это ввиду. Хотя этого более чем достаточно от платы, стоимостью в 1.9 доллара.
Ещё заметил, что пины PA12/PA11 подключены к D+/D- USB, их лишний раз лучше вообще не трогать, ибо чуть что, на кону не 2-х долларовый кусок стеклотекстолита с чипом, а материнская плата компьютера.
Схема отладочной платы:
Ну и на последок:
Забыл добавить фото платы с обратной стороны:
Тут почти ничего нет, стабилизатор и немного резисторов с конденсаторами.
Так же не рассказал, что дополнительно пропаивал microUSB разъем:
Потому что не особо внушала доверие пайка, точнее, её полное отсутствие.
Как надо дружиться с STM32
Не, не, не, все не так!
Давайте дружиться с STM32 правильно!
Самая главная ошибка, сделанная автором — это неправильно выбранный инструментарий.
Прокачиваем USB Mass Storage Device на STM32F103 с помощью FreeRTOS и DMA
Недавно я ковырялся с подключением своего устройства на микроконтроллере STM32F103 как USB Mass Storage Device, или по русски — как флешку. Вроде бы как все относительно несложно: в графическом конфигураторе STM32CubeMX в пару кликов сгенерировал код, добавил драйвер SD карты, и вуаля — все работает. Только очень медленно — 200кбайт/с при том, что пропускная способность шины USB в режиме Full Speed гораздо выше – 12 мБит/с (грубо 1.2 Мбайт/с). Более того, время старта моей флешки в операционной системе составляет около 50 секунд, что попросту некомфортно в работе. Раз уж я нырнул в эту область, то почему бы и не зачинить скорость передачи.
Вообще-то я уже писал свой драйвер для SD карты (точнее драйвер SPI), который работал через DMA и обеспечивал скорость до 500кб/с. К сожалению в контексте USB этот драйвер не заработал. Причиной всему сама модель общения USB — там все делается на прерываниях, тогда как мой драйвер был заточен под работу в обычном потоке. Да еще и припудрен примитивами синхронизации FreeRTOS.
В этой статье я сделал парочку финтов, которые позволили выжать максимум из связки USB и SD карточки подключенной к микроконтроллеру STM32F103 по SPI. Также тут будет про FreeRTOS, объекты синхронизации и общие подходы к передаче данных через DMA. Так что, думаю, статья будет полезна и тем кто только разбирается в контроллерах STM32, и инструментах вроде DMA, и подходах при работе с FreeRTOS. Код построен на основе библиотек HAL и USB Middleware из пакета STM32Cube, а также SdFat для работы с SD картой.
STM32 и LCD через I2C
Для использования в дальнейшем понадобилось связать, используя I2C микроконтроллер STM32 с экраном 2004. Не найдя аналогичного решения в сети, публикую здесь. Данный рецепт подойдёт также для экранов 1602. Далее под катом. (Осторожно, картинки).
STM32 vs Arduino
Приехала вчера крошечная платка на STM32F103C8.
STM32F103C8 Front
Это 48ногий 32битный микроконтроллер. И это отличный вариант апгрейда для тех, кто использует Arduino.
Попытка подружиться с STM32
В прошлый раз я издевался над микроконтроллерами ATtiny 85, сопрягая бедные восьминогие чипы с Arduino IDE. А потом мне захотелось посмотреть, что же за чудо такое — STM32, поклонники которых смотрят на программистов AVR (не говоря уж об ардуинщиках) с некоторым неодобрением. В процессе беглого гугления выяснилось, что STM32 «для идиотов» существует — есть проект Leaf Maple, в рамках которого — две платы на STM32F103 и среда разработки, являющая собой клон Arduino IDE.
Решающим фактором стала стоимость. Китайская версия Leaf Maple Mini продается за 4$ — это немногим дороже Arduino Nano. Заказав три штуки, я принялся ждать.
Пожалуй, со ставкой на Maple я немного поторопился — проект скорее мертв, чем жив. IDE не развивается, драйверов без бубна под Windows 8 нет, библиотеки в зачаточном состоянии, полное уныние и запустение. Ради интереса я поморгал светодиодом, запустив Maple IDE под OS X (заработало из коробки), а затем стал думать, с какой стороны подходить к плате для дальнейшего изучения.
Подключение oled дисплея с контроллером SSD1306 к STM32 по I2C
Многие, наверное, знают о таких маленьких дешёвых (меньше $3) OLED дисплеях, которые можно найти в огромном ассортименте на ebay или aliexpress. В интернете существует множество различных статей о том, как подключать эти дисплеи к Arduino и другим МК, но для STM32f10x затруднительно найти даже библиотеку. Поэтому я решил написать эту статью.
Данный дисплей имеет разрешение 128х64 пиксела и контроллер SSD1306 и подклчается к микроконтроллеру по интерфейсу I2C.
ЧПУ фрезерный станок с автономным контроллером на STM32
Поскольку я давно собрал для себя ЧПУ станок и давно и регулярно эксплуатирую его для хоббийных целей, то мой опыт, надеюсь, будет полезен, как и исходные коды контроллера.
Постарался написать только те моменты, которые лично мне показались важными.
Ссылка на исходники контроллера и настроенную оболочку Eclipse+gcc и пр. лежат там же, где ролик:
FPV гонки на симуляторе (делаем USB джойстик из пульта радиоуправления)
Зима в северных широтах — время, когда у FPV пилота появляется время, чтобы отдохнуть от гонок и постоянных поломок, взять в руки паяльник, и смастерить что-нибудь полезное для своего хобби.
Раз уж на улице летать холодно, то будем тренировать навыки пилотирования на симуляторах. Для этого нужно подключить свою радиоаппаратуру к компьютеру через специальный адаптер, который преобразует PPM сигнал с пульта в сигналы USB-джойстика, понятные компу. Такие адаптеры, конечно не редкость и стоят копейки в китайских магазинах. Однако доставки заказа ждать долго, да и будет ли он работать так как мы ожидали? Например у меня есть вот такой:
Он по каким-то, еще не постигнутым мною причинам, наотрез отказывается адекватно калиброваться в симуляторе FPV Freerider, хотя прекрасно работает в Phoenix RC и Aerofly RC 7. А FPV Freerider вполне неплохо передает физику акро-полета на гоночном коптере, да к тому же имеет бесплатный демо-режим.
Тема выросла из чисто практических соображений. Поскольку я не поклонник лазерного утюга — места под хим. процессы нет, да и нервов и времени этот ЛУТ забирает немало, было решено найти что-нибудь готовое. Требования простые: дешево, много ножек, мощь и порядок.
В первую очередь отпали AVR — мощи мало, ножек тоже, порядка — никакого.
В результате было решено обратиться к камням stm32f. Мощи достаточно, ножек — сколько желаешь, порядок — присутствует, что показали опыты программирования. Цены — почти сказочные (но не в России).
Поиск недорогих development board's под stm32 не увенчался успехом. Борды под интересующие камни на 64-100 ножек наши восточные братья продают минимум за $10. Рассмотрение их фоток с увеличением привело к выводу — паяют в гараже. Куда там роботы, волновая пайка и космические технологии! Я и сам так паять умею. А PCB, все-таки закажу, китайцы лучше меня их делают.
Под катом схема и подробности.
Технические требования.
- МК серии STM32F1xxR — 64 ножки, 44 IO-пина. Пока кандидата 2 — STM32F103RBT6 и STM32F103RСT6. С ними я уже работал.
- Размер платы — с коробок, ну или с Zippo. Размеры диктуются как практикой — чем меньше, тем проще впихнуть в корпус, так и финансами — seeedstudio предлагает дешевый PCB-сервис 5х5 см.
- На плате должны быть кварцы, кнопка и светодиод.
- Разъем программатора — SWD. JTAG у меня тоже есть, но уже больше года пылиться на полке, так как SWD-удобнее и меньше места на плате занимает.
- USB, оформленный по-человечески, то есть разъем microUSB, с подтяжкой D+ на отдельной ноге МК.
- Поскольку есть USB, должен быть и LDO-регулятор на 3.3V. Для МК с обвесом нужно примерно 100 мА.
- Вынести USART1 и boot0/boot1 на отдельный разъем
- Возможность подключения батарейки к RTC — еще один разъем
- Разъемы выводящие питание. Почему никто не догадался сделать их побольше? Куда периферию подключать?
ТЭО (а стоит ли игра свеч).
- Камни: STM32F103RBT6 312 р. за 5 штук и STM32F103RСT6 за 568 р, итого 880 р. Уже куплены на распродаже 15 марта, вместе с говорящим хомячком :)
- USB-разъемы — примерно 100 р., aliexpress.
- Прочая мелочевка — 400 р., wayengineering.
- Платы — примерно 600 р., seeedstidio.
Вывод: вполне себе нормально. Психологический барьер в стоимость баклажки коньяка не превышен, то есть запороть или спалить плату будет не жалко. А еще это в 2 раза дешевле чем на aliexpress/ebay, и это радует мой семейный бюджет.
Схемотехника.
- Подтяжка USB сделана полевиком, в отличие от традиционных схем на 2х биполярных транзисторах. Во-первых нужно на это в 2 раза меньше компонентов, во-вторых, мелкие P-MOSFET'ы у меня уже есть и проверены.
- Компоненты навешаны с обоих сторон платы. Для экономии места.
- Вместо привычных для китайцев регуляторов типа LM1117-3.3 применены HT7333 — LDO на 250мА с выходным каскадом на полевике. Обещают ток утечки не более 4мкА по даташиту, самое то для батарейного питания.
- Разъемы раскиданы по плате где попало — для удобства разводки и экономии места. Для кнопочки сделан отдельный разъем, чтобы ее можно было вынести на корпус.
- Порты на 2х разъемах по периферии платы, между ними соблюдено расстояние кратное 2,54 мм, то есть при желании можно запаять разъем ногами вниз и воткнуть в макетку.
Поскольку плата вышла меньше условного квадрата 5х5, сбоку был прикручен паттерн под батарейный отсек CR123A, зарядка и протекшн для литий-полимерного аккумулятора. По умолчанию батарейка подключена ко входу LDO-регулятора, но через диод, чтобы не заряжаться самопроизвольно, а вход на зарядку подключен к питанию от USB. Есть джампер для отключения батареи и разъем для съема питания с батареи непосредственно.
Зарядка на TP4057, планирую ограничить ток зарядки 400мА, вполне достаточно для акка 16340, ну и стандартный USB не напряжет.
В архиве схема, плата и библиотеки для DipTrace. В последнем архиве обновил номиналы некоторых деталей.
Платы еще в процессе. Через пару дней еще раз просмотрю схему и разводку свежим взглядом перед отправкой в SeeedStudio.
Выложил новый вариант, повернул разъем и по мелочам.
Внимание! В процессе вывода в гербер еще правки появились, в основном надписи на падах и т.п. Окончательный вариант выложу во второй части статьи.
Приветствую вопросы и критику в комментариях. Может кто заметит ошибки.
По просьбам трудящихся выкладываю картинку, для открытия щелкните по превьюшке:
Сигнал 300 мВ снятый при помощи miniscope v4:
Общая стоимость компонентов не превысила 10$.
Принципиальная схема USB-осциллографа:
Печатная плата - односторонняя, размер 66мм x 36мм.
Среда разработки
Для разработки miniscope v2 необходимо было выбрать среду разработки для STM микроконтроллеров. В этом файле лежат примеры проекта для IAR, Keil, RIDE, HiTop и TrueSTUDIO. К сожалению, не один из них мне не подошел. RIDE и HiTop требуют покупки лицензии через 7 дней. Пробные версии IAR и Keil имеют ограничение на размер кода и забирают очень много дискового пространства. То же самое с TrueSTUDIO.
В результате я выбрал CooCox, дистрибутив которого весит 115 МБ и около ~ 800 МБ после установки и распространяется бесплатно.
Прошивка микроконтроллера
На плате нет JTAG/SWD разъема, так как прошивка должна быть загружена по UART. Чтобы войти в режим загрузки, нажмите и удерживайте кнопку BOOT при нажатии кнопки RESET. Программа STM "Flash Loader Demo" без проблем работает с USB-UART переходником. Нормальное напряжение на выводах микроконтроллера 5В, поэтому можно использовать 5 или 3.3В RS232-UART/USB-UART переходник.
Кнопка RESET может быть удалена - микроконтроллер переходит в режим загрузки при нажатой кнопке BOOT если USB подключен.
Так как USB подключено без 1.5 кОм подтягивающих резисторов, его необходимо заново подключить после прошивки.
Проект для тестирования микроконтроллера и зуммер: stm32scopeTest.7z
Советы по передаче данных по USB
Используйте CDC в качестве шаблона. Есть две конечных точки BULK. Для повышения скорости CDC потребуются небольшие изменения.
1. Уменьшите значение VCOMPORT_IN_FRAME_INTERVAL. Я не уверен, что значение = 1 подходит при двунаправленной передаче, поэтому я поставил значение = 2.
2. Увеличение значения USART_RX_DATA_SIZE. Я использовал 8192 байт (2 х 4 Кб), но я думаю, что существенной разницы при использовании 4096 байт.
3. Изменение Handle_USBAsynchXfer, т.к. он не будет передавать данные, если USART_Rx_Buffer будет полный. Таким образом, после каждого номера SOF будет отправлен максимальный по номеру байт.
Убедитесь, что на ПК приложение постоянно готово к приему данных. Убедитесь, что приоритет чтения для него выше, чем у других приложений. Я использовал libusb, поэтому я использовал сочетания usb_submit_async / usb_reap_async для задания очереди запросов чтения.
Я не интересовался высокой скорость передачи данных с ПК, поэтому у меня нет советов по этому поводу. Miniscope v2c оправляет данные на ПК с максимально возможной скоростью. Данные отправляемые с ПК незначительны (ID запроса, изменение аналогового усиления).
STM32F103C8T6 — делаем осциллограф. Часть 3
Третья часть (первая и вторая) про то как я делаю осциллограф из отладочной платы ценой менее $3. Демонстрационное видео работы:
А описание некоторых ключевых особенностей под катом.
Полив растений по расписанию (STM32F103)
Посмотрев на то, что Geektimes выкладываются описания китайских «поливалок» комнатных растений, я решил поделиться и своим опытом. Пусть и несколько поздновато (работает «поливалка» у меня уже 2.5 года).
Я не отношусь к любителям комнатной флоры, которые тщательно следят за цветами, бережно протирают листья и пр. Но вот против самих растений ничего не имею. Как то, выкидывая очередной сдохшее растение, я задумался, что это уже перебор. А, поскольку это было засохшее алое (!), то перебор в квадрате.
Посмотрев на то, что есть на e-bay и в магазинах, я решил (по разным причинам), что проще сделать самому из завалявшейся платы с LCD сенсорным экраном.
STM32F103C8T6 — первые шаги. Продолжаем делать осциллограф
Продолжение статьи. На этот раз попробуем подключить USB без падения частоты измерений и соберём одноканальную аналоговую часть.
STM32 USB Mass Storage Bootloader
Известно, что софт можно дописывать вечно, а всякого рода недочёты на плате полностью исправляются ревизии так к третьей. И если с железом уже ничего не поделаешь, то для обновления микропрограмм придумали неплохой способ обхода ограничений пространства и времени — Bootloader.
Загрузчик — это удобно и полезно, не правда ли? А если загрузчик собственной реализации, то это еще более удобно, полезно и гибко и не стабильно. Ну и конечно же, очень круто!
Так же, это прекрасная возможность углубиться и изучить особенности используемой вычислительной машины — в нашем случае микроконтроллера STM32 с ядром ARM Cortex-M3.
На самом деле, загрузчик — это проще, чем кажется на первый взгляд. В доказательство, под cut'ом соберём свой собственный USB Mass Storage Bootloader!
STM32F103C8T6 — первые шаги. Начинаем делать осциллограф
О радостях и трудностях первого знакомства с STM32 после AVR. Как я реализовывал простейшую задачу — передачу данных на ПК.
Миникомпьютер из роутера с OpenWRT: пишем USB class-driver под Linux
CDC+MSC USB Composite Device на STM32 HAL
Мне хотелось бы верить, что хотя бы половина читателей может расшифровать хотя бы половину названия статьи :) Кто не в курсе — поясню. Мое устройство должно реализовывать сразу две USB функции:
- Mass Storage Device (он же Mass Storage Class — MSC). Я хочу, чтобы мой девайс прикидывался обычной флешкой и отдавал файлики с данными, которые лежат на SD карте.
- Другая функция это виртуальный COM порт (он же в терминологии USB называется Communication Device Class — CDC). Через этот канал у меня идет всякий дебажный вывод, который удобно смотреть обычным терминалом.
Я буду описывать создание композитного USB устройства на базе микроконтроллера STM32, но сам подход будет также применим и для других микроконтроллеров. В статье я детально разберу каждый из классов по отдельности, так и принцип построения композитных устройств. Но обо все по порядку.
Отладчик за копейки: делаем ST-Link из Maple Mini
Начав свое знакомство с STM32 с китайских клонов Leaf Maple Mini (потому что самый дешевый вариант, 4$), я столкнулся с неудобством. Поскольку на Maple IDE рассчитывать не стоит, значит, приходится работать с «голым» STM32. А раз ST-Link у меня нет, заливать программу я могу только по UART, что неудобно (и нет возможности отладки).
Но хабраюзер imwode ровно через 9 часов после моей публикации написал ответный материал, из которого я узнал прекрасное: отладчик ST-Link основан на том же микроконтроллере STM. При этом, прошивка отладчика умельцами вытащена и готова к загрузке на неродные устройства. Maple Mini подходит идеально: ничего лишнего, USB распаян, надо только несколько резисторов подключить.
Миникомпьютер из роутера с OpenWRT: пишем драйвер фреймбуфера
Читайте также: