Arduino.ru
STM32 F103C8T6
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Общаюсь с Blue Pill через ST-Link. USB свободен. Захотелось кой какие данные выводить на ПК. Подскажите, пожалуйста, как для этой платы организовать виртуальный Com порт на ПК? 1. какие драйвера поставить на компьютер и 2. что залить в платку?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Драйвера ставятся, когда добавляете поддержку СТМ32 в Ардуино ИДЕ. Их можно взять в этой статье
Вывод в Serial на СТМ32 точно такой же, как и в любой ардуине — Serial.print(«Hello world!»);
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Драйвера ставятся, когда добавляете поддержку СТМ32 в Ардуино ИДЕ. Их можно взять в этой статье
Вывод в Serial на СТМ32 точно такой же, как и в любой ардуине — Serial.print(«Hello world!»);
Спасибо. Неожиданная заморочка. При запуске install_drivers.bat выдаётся сообщение «. wdi-simple.exe не является приложением Win32. ОС Windows XP.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Драйвера ставятся, когда добавляете поддержку СТМ32 в Ардуино ИДЕ. Их можно взять в этой статье
Вывод в Serial на СТМ32 точно такой же, как и в любой ардуине — Serial.print(«Hello world!»);
Спасибо. Неожиданная заморочка. При запуске install_drivers.bat выдаётся сообщение «. wdi-simple.exe не является приложением Win32. ОС Windows XP.
а у вас точно — ST-LINK_USB_V2_1_Driver
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
При запуске install_drivers.bat выдаётся сообщение «. wdi-simple.exe не является приложением Win32. ОС Windows XP.
тут ничего сказать не могу — в Win7 x64 драйвера ставятся сами, как только первый раз втыкаешь плату в порт
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
а у вас точно — ST-LINK_USB_V2_1_Driver
Не очень понимаю при чём в данном случае ST-LINK. С ним у меня проблем нет. Через него спокойно программирую платку. Сей час речь идёт об организации вывода данных через USB. И ошибка выдаётся при запуске инстолятора драйверов, взятого от сюда. Просьба откликнуться тех, кто работает в XP — драйверы устанавливаются правильно? Решил потанцевать с бубном. В папке драйверов отыскал все файлы с расширением inf, их оказалось три. Запустился только один, относящийся к maple-dfu. В диспетчере устройств появилась «чистое», без жёлтых вопросов устройство, соответствующее maple-dfu. Правда проверить не смог по причине поздного времени. Сегодня вечером попробую. Но меня это всё равно не спасает поскольку не знаю, как организовать подключение программ, работающих с виртуальным COM портом, то есть надо в диспетчере увидеть номер COM порта.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
а у вас точно — ST-LINK_USB_V2_1_Driver
Но меня это всё равно не спасает поскольку не знаю, как организовать подключение программ, работающих с виртуальным COM портом, то есть надо в диспетчере увидеть номер COM порта.
Не надо ничего организовывать, надо чтобы после того как найдется DFU установился виртуальный сом порт, у меня он установился, но не сразу ))) пару десятков раз пришлось платку подёргать, XP SP3, загрузчик IDE в плату естественно прошит!?
Ставил mapple-serial x86 (installer_x86.exe)
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Такая мысль была, но сил уже не было попробовать
Не могу догадаться о чём идёт речь. По инструкции в плату загружал generic_boot20_pc13.bin. Это оно?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Не могу догадаться о чём идёт речь. По инструкции в плату загружал generic_boot20_pc13.bin. Это оно?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Виртуальный COM порт установить удалось. С помощью STM32 ST-LINK Utility загрузил в плату, как вы говорите, загрузчик IDE (generic_boot20_pc13.bin) предварительно поставив Boot 0 в 1. Вернул Boot 0 в 0 и подключил к ПК по USB кабелю. В диспетчере устройств появился maple-dfu. Это не удивило, поскольку рнее драйвер для него мне удалось установить (см. пост 606). Запустил Ардуино, в Uploader metod установил STM32duino bootloader и попробовал залить рабочий скетчь. На этапе загрузки IDE сказала что то про сериал порт и предложила установить драйвер. Средствами Windows в ручную указал папку maple-serial, инсталлер подхватил и произвёл установку и дозалил скетч. Программа заработала адекватно. В диспетчере устройств появился виртуальный COM порт maple-serial. Ранее, без запуска ардуино, на все установочные файлы Windows ругался. Я так понимаю, что что то им без ардуино не хватало. В общем я рад за себя и спасибо всем кто направлял.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
На этапе загрузки IDE сказала что то про сериал порт и предложила установить драйвер. Средствами Windows в ручную указал папку maple-serial, инсталлер подхватил и произвёл установку и дозалил скетч. Программа заработала адекватно. В диспетчере устройств появился виртуальный COM порт maple-serial. Ранее, без запуска ардуино, на все установочные файлы Windows ругался. Я так понимаю, что что то им без ардуино не хватало. В общем я рад за себя и спасибо всем кто направлял.
Вот, Вы реализовали еще один способ установки драйвера, а кто говорил, что существует 99 способов )))
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Пока не разобрался, что то с синтаксисом, помогите, пожалуйста. При компиляции говорит, что функция HX711 не декларированна.
Дешевая STM32 плата + Arduino IDE UPD 17.08.2017
Хотите прокачать ваши Arduino проекты? Заставить их работать быстрее, измерения и регулировку сделать точнее, ну и добавить баги(с новыми девайсами они неизбежны). Тогда эта статья для Вас.
Arduino тема всё больше захватывает умы человечества, но рано или поздно мы встречаемся с тем, что нам чего-то не хватает, например бюджета/размеров/пиновпортов/разрядности/производительности… Как говорил один мудрый человек — «Кто хочет, тот ищет возможности, кто не хочет — ищет причины».
Хорошие люди это понимают, и потихоньку начинают приобщать STM32 к ардуино теме, ибо восьмибитные AVR микроконтроллеры, на которых основано немало ардуино плат, не всегда могут справиться с поставленными задачами.
Краткое изложение данной статьи в видео формате:
Ладно, меньше лирики и ближе к теме. В этой статье, я буду рассматривать дешёвую отладочную плату, которая основана на базе микроконтроллера STM32F103C8T6:
Для начала, сравним основные параметры STM32 платы, и её аналога по цене — Arduino Nano V3.0:
- Рабочая частота 72 МГц, против 16 у ардуино;
- Объем Flash памяти 64 Кбайта, против 32;
- Оперативной памяти, она же RAM(где хранятся переменные), у STM32 целых 20 Кбайт, у ардуинки всего лишь 2;
- Быстрый 12-ти битный АЦП, в то время как у Arduino плат, что на базе AVR микроконтроллеров(это как правило большинство) используется 10-ти битный. Это означает, что в случае STM32, функция analogRead(*); будет возвращать 0..4095 против 0..1023, что в первом случае ведёт к более точным измерениям;
- 16-ти битный аппаратный ШИМ, против 8-ми у Arduino плат, то есть, функция
analogWrite(*);pwmWrite(*); может принимать значение 0..65535, против убогих 0..255. Это позволит ещё точнее управлять нашими двигателями, сервами и прочими девайсами, которые рулятся при помощи ШИМ; - Аппаратная работа с USB, чем не может похвастаться не одна Arduino плата стоимостью менее 2 долларов;
- Напряжение питания — от 2 до 3.6В(прямо таки заточено под 2 AA батарейки), против 2.7. 5В у ардуино плат;
- Цены на момент написания статьи — 1.9 доллара против 1.8(алиэкспресс).
Очевидно, что отладочная плата на базе STM32 выигрывает по всём параметрам у Arduino Nano, исключением является разве что стоимость, но согласитесь 10 центов — хорошая цена за большую производительность, а про периферию, которой нафарширован STM32, так я вообще молчу, чего только стоят DMA или интегрированные в микроконтроллер часы реального времени.
Всё это в сумме делает данную плату крайне привлекательной во всём, кроме одного — новичку, как например мне, тема 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 переходнику следующим образом:
G GND;
5V 5V;
PA10 TXD;
PA9 RXD.
* 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.
Дальше разархивируем содержимое по адресу Мои Документы\Arduino\hardware:
В моём случае полный путь выглядит вот так — «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: Не удается найти указанный файл.».
Но прошивка то загрузилась успешно, хотя не всегда так, иногда Arduino IDE выдаёт другие сообщения.
Когда видите, сообщение типа:
«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);
Ещё рекомендую зайти на сайт docs.leaflabs.com/docs.leaflabs.com/index.html там есть много чего интересного по теме программирования в Arduino IDE, правда на английском языке.
Я порылся в файлах ядра, и нашёл один интересный файл:
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-х долларовый кусок стеклотекстолита с чипом, а материнская плата компьютера.