Используем STM32 безо всяких отладочных плат
Ранее мы познакомились с несколькими отладочными платами на базе микроконтроллеров STM32 — это Blue Pill, платами серии Nucleo, и даже такой экзотикой, как Кракен. Все это здорово, но что, если нам захочется использовать микроконтроллер не в прототипе, а в полноценном готовом устройстве? Не вкорячивать же в него плату Nucleo! Поэтому сегодня мы разберемся, как работать с STM32 напрямую, то есть, прямо на макетной плате, на примере микроконтроллера STM32F103C8T6. Казалось бы, тема эта несложная, однако есть пара подводных граблей, про которые стоит знать.
Fun fact! Аналогичную инструкцию для микроконтроллеров AVR вы найдете в посте Как собрать Arduino прямо на макетной плате.
Примечание: Пользуясь случаем, я хотел бы поблагодарить пользователей форума easyelectronics.ru за то, что помогли мне разобраться с парой проблем, возникших при изучении сего вопроса. Особой благодарности заслуживают пользователи dosikus_2 и BusMaster, так как они раньше других предложили верные решения.
Итак, первая сложность заключается в том, что микроконтроллеры STM32 не бывают в DIP-корпусах, а значит понадобится переходник. STM32F103C8T6 имеет корпус LQFP-48, для которого готового переходника у меня не было. Такой переходник можно вытравить самому, можно поискать на eBay. Я прикинул, что в будущем мне понадобится больше одного переходника. А еще я могу захотеть подарить парочку из них, так как многие мои коллеги занимаются электроникой в качестве хобби. Плюс мне не хотелось долго ждать доставки. Поэтому я спроектировал собственный переходник в KiCad и заказал десяток плат на Резоните. Также для вашего удобства я залил плату на OSH Park. Следует однако учесть, что в пересчете на одну плату цены у OSH Park существенно выше, чем у Резонита, и доставка обычно занимает несколько недель против трех дней.
Допустим, переходник у нас уже есть. Далее открываем даташит [PDF] и смотрим распиновку микроконтроллера (стр 16):Наиболее интересные нам сейчас пины я выделил цветом. Подключаем их таким образом:
- Пины VSS* (8, 23, 35 и 47) идут к земле;
- Пины VDD* (9, 24, 36 и 48) — к 3.3 В;
- NRST (7) оставляем висеть неподключенным, но готовим перемычку для подключения его к земле в случае необходимости. Если места на макетке хватает, вместо перемычки можно использовать кнопку с конденсатором для защиты от дребезга. При этом подтягивающий резистор к плюсу не требуется, так как такой резистор уже есть в самом микроконтроллере;
- BOOT0 (44) определяет, откуда микроконтроллер будет загружать прошивку. Нам нужно, чтобы он делал это из flash-памяти, поэтому подключаем к земле. При этом напряжение на пине BOOT1 (20) не имеет значения, и этот пин может использоваться для обычного GPIO;
- SWIO и SWCLK (34 и 37) — к соответствующим пинам программатора;
- Наконец, пин PC13 (2) у нас будет мигать светодиодом;
Важно! Между каждой парой соседних пинов VSS и VDD втыкаем по конденсатору на 100 нФ, и желательно — как можно ближе к пинам микроконтроллера. Без этого микроконтроллер в лучшем случае не будет прошиваться (я проверял). Некоторые же источники утверждают, что без конденсаторов его можно даже сжечь в момент подачи питания.
В итоге должно получиться примерно следующее:
Теперь можно приступать и к генерации проекта в STM32CubeMX. Только обязательно проверьте, чтобы SWD был включен:
Если забыть включить SWD и прошить микроконтроллер, прошить его во второй раз будет затруднительно. У меня по умолчанию SWD был выключен. В интернете пишут, что это считается багом в STM32CubeMX, который что-то никак не починят. При этом проявляется баг только для микроконтроллеров определенных серий.
Спрашивается, а что делать, если мы случайно прошили микроконтроллер прошивкой, которая отключает SWD? В этой ситуации выполняем следующие шаги. (1) Пин NRST подключаем к земле, или, если вместо перемычки вы использовали кнопку, нажимаем и держим кнопку. (2) Говорим st-info --probe
. Должны увидеть что-то вроде:
Found 1 stlink programmers
serial: 543f73066775545512251267
openocd: “\x54\x3f\x73\x06\x67\x75\x54\x55\x12\x25\x12\x67”
flash: 0 (pagesize: 1024)
sram: 20480
chipid: 0x0410
descr: F1 Medium-density device
Заметьте, что программатор видит 0 байт flash-памяти. На этом шаге это нормально. (3) Выдергиваем перемычку между NRST и землей, или отпускаем кнопку. Несмотря на то, что ранее в микроконтроллер была залита какая-то прошивка, сейчас она не будет запущена. Если же повторить команду
, окажется, что программатор видит всю flash-память:
flash: 65536 (pagesize: 1024)
После этого можно спокойно говорить make erase
или make flash
, а значит и включить SWD, как это было описано выше.
Фактически, мы получили собственную минимальную отладочную плату, собранную на макетке. За исключением описанных выше моментов, работа с ней ничем не отличается от работы с той же Blue Pill. Правим код, компилируем, прошиваем, при необходимости повторяем — все работает, как часы. Цель достигнута!
Эта заметка, разумеется, не претендует на то, чтобы полностью заменить собой даташит. В частности, за кадром осталось подключение внешних кварцевых резонаторов (LSE и HSE) и другие вопросы. Но в них, думаю, вы без труда разберетесь и самостоятельно.
Исходники к этому посту я выложил на GitHub. В репозитории вы найдете как простенькую прошивку для микроконтроллера, так и KiCad-проект адаптера для LQFP-48 вместе с готовыми Gerber-файлами.
Как обычно, если у вас есть вопросы, дополнения, возражения, и так далее — не стесняйтесь оставлять комментарии!
Дополнение: Как и зачем я делал очередную отладочную плату
Метки: STM32, Электроника.
Сравнение микроконтроллеров Arduino и STM32
Все, кто пользуется микроконтроллерами от Ардуино, не понаслышке знакомы с вопросом экономии. Однако покупать китайские платы от неизвестных производителей в надежде, что хоть часть из них будет работать как заявлено, – не лучшая стратегия. Но среди множества бесполезных железок можно найти и достойную дешёвую замену arduino stm32, которая уже стала известной в своих кругах.
Давайте же разберёмся, достойна ли эта плата до 10 долларов с доставкой своей популярности, и что она способна дать пользователю, в сравнении с обычной Ардуино ПРО версии.
Сравнение технических характеристик
Давайте сравним две платы по их техническим параметрам:
Как мы видим – по многим параметрам ардуино проигрывает стм32. Ниже мы попробуем сравнить платы с разных сторон.
Плюсы и минусы микроконтроллеров Arduino и STM32
Начнём с достоинств преждевременного фаворита – самого ардуино. И главное из них известно всем, кто работал с данным чипом и его собратьями – собственная экосистема. Вы можете найти ответы на все возникающие вопросы в интернете, ведь база знаний и количество пользователей микроконтроллера даже в СНГ сегменте поражает. А это значит, что не придётся искать инструкции на английском, чего не скажешь об stm32f103c8t6 arduino. Большое количество пользователей подразумевает и широкий программный функционал, лишь крупинка которого предоставляется самими производителями.
Фанатская база ежедневно создаёт десятки библиотек, поэтому вы сможете воплотить в жизнь любую свою задумку. Некоторые схемные решения с микроконтроллером stm8s001j3 могут не порадовать новичков в этом деле, ардуино же старается максимально угодить новому пользователю и не предоставляет никаких сложностей.
Отсюда выплывают доступные шилды, простота использования, чем не могут похвастаться микроконтроллеры stm, и простое программирование под Atmel, без необходимости учить все тонкости языка на практике. Ну а более продвинутые оценят EEPROM, идущий с коробки, чем микроконтроллер stm32 не может похвастаться.
Однако, как и везде, есть свои недостатки:
- Низкий порог вхождения предполагает большое количество кривых и неотлаженных библиотек, работающих чуть ли не на последнем издыхании. Наткнувшись пару раз на такой софт и занимаясь его дебагингом в течение пары дней, вы решите, что проще написать собственный.
- Следующее преимущество stm32 ардуино не предоставляет нормальной отладки, из-за чего поиск ошибок в тех же кривых библиотеках и занимает так много времени.
- Нормальная производительность на Атмега – миф, и на деле вам потребуется изворачиваться и отказываться от многих функций продукта, чтобы он работал без подлагиваний. Нормальных планировщиков тоже не найти, а те, что можно подсоединить, съедают слишком много ресурсов. Из-за чего поделки на ардуино славятся кривым и лагающим интерфейсом с долгим временем отклика, если речь идёт о чём-то сложнее, чем электронная щеколда или конструкция из микроконтроллера и датчика движений.
- Множество кривой и откровенно бесполезной продукции на этих платах, в особенности от китайцев, лишь ухудшает имидж Ардуино.
- Нормальных книг по микроконтроллерам stm32, конечно, не найти, но и ардуино не предоставляет много профессиональной информации, помимо форумов, где отладкой занимаются сами пользователи.
- А сама среда разработки софта под неё требует просто невероятной производительности, не сравнимой ни с чем, что есть на рынке. Притом, куда идут все съедаемые ресурсы, не совсем понятно. А соответственно, виной всему – ужасающая оптимизация.
С другой стороны, перед пользователем встаёт arduino stm32f103 и arduino stm8 высокопроизводительный контроллер, упрощающий переход с микроконтроллера stm32 на микроконтроллер миландр и множеством периферии в дополнение.
Вы можете скачать файлы поддержки stm32 плат на Arduino IDE 1.8.x по этой ссылке.Проектировка плат значительно облегчается благодаря свободному ходу ног, стоковая среда разработки – достаточно мощный инструмент, а отладка изначально построена так, чтобы работать без нареканий даже в чужих средах. Вам предоставляют красочные графики и точки, не говоря уже о текстовой информации. Простой перенос кода, возможность запускать отдельные контроллеры в 41 Мбитной развёртке и наличие USB портов практически везде. Всё это может запросто завлечь более продвинутых разработчиков, но им стоит ознакомиться и с рядом недостатков:
- Высокий порог входа, для нормального пользования необходим хороший базис.
- Библиотеки также присутствуют, но большинство из них устарели или же сделаны каждым лично для себя. Проще уже создать собственную. Но если вспомнить о проблемах Ардуино, то вполне вероятно, что вы уже умеете это делать.
- Нижние пробелы и, в целом, некрасивая семантика в сравнении с простыми функциями конкурента.
- С99 это всё же далеко не С++, и вы сразу прочувствуете все сложности перехода. Однако многие утверждают, что спустя время – наоборот, рады такому нюансу.
- В целом, дешевизна плат в сравнении с Ардуино.
Возможности улучшения «юзабильности» STM32 до уровня Arduino
Однако не всё так плохо, как это может выглядеть. Изначально платы СТМ32 могут быть запрограммированы в среде разработки ардуино, хоть это и не лучшее решение. Следует помнить, что таким образом вы урезаете функционал, используете множество костылей и сами себе же стреляете в колено.
Однако, при переходе, это достаточно полезный нюанс, позволяющий более плавно осваивать все прелести. Семантика С99 может не прийтись по душе первые недели, оттого лучше найти транслятор, ибо среда Ардуино полностью уничтожает смысл покупки иного микроконтроллера.
Отладка микроконтроллера STM32
Как уже упоминалось, отладка микроконтроллера достойна отдельных тирад и восторженных откликов. Сразу с коробки вы получаете устройство, что свободно можно отлаживать в любой среде, переменные выводятся в консоль, а удобные графики информации позволяют визуально засечь баг. Это особенно удобно, когда объём кода просто не позволяет пройтись по нему пошагово.
После перехода на STM32 вы со временем и вовсе забудете о выводе данных через консоль, ведь на замену этих шаблонов придут куда более разумные и практичные решения.
В следующем материале мы по шагам как можно сделать так, чтобы использовать Arduino IDE для платы STM32.
Особенность трехдолларовой платы STM32 «Black Pill» — это STM32F4 Cortex-M4 MCU и дополнительная SPI флэш-память
STM32 “Blue Pill” — это популярная и дешевая (примерно 2 $) плата для разработки на основе STMicro STM32F103C8T6 Arm Cortex-M3 и программируемая с помощью Arduino IDE.
Нам сообщили, что плата получила своего рода обновление — «Blue Pill 2», оснащенная микроконтроллером Arm Cortex-M4F STM32F401CCU6 или STM32F411CEU6 и портом USB Type-C для питания и программирования. Цвет у обновленной платы черный, поэтому назовем ее » Black Pill», как это делают другие.
Спецификации для плат Blue Pill и Black Pill (новые функции выделены жирным шрифтом):
- MCU (один из)
- STMicro STM32F103C8T6 ARM Cortex-M3 MCU с тактовой частотой 72 МГц и флэш-памятью 64 Кб, SRAM 20 Кб
- STMicro STM32F401CCU6 Arm Cortex-M4F MCU с тактовой частотой 84 МГц и флэш-памятью 256 Кб, SRAM 64 Кб
- STMicro STM32F411CEU6 Arm Cortex-M4F MCU с тактовой частотой 100 МГц и флэш-памятью 512 Кб, SRAM 128 Кб
- Хранилище — место для флэш-памяти SPI
- USB
- Blue Pill — 1х порт micro USB для питания и программирования
- Black Pill — 1х порт USB Type-C для питания и программирования
- Отладка — 4-контактный разъем SWD или порт USB
- Расширение — 2x 20-контактный с сигналами питания, I2C, SPI, GPIO, входами АЦП и т. д.
- Разное
- Кнопка сброса, питание и пользовательские светодиоды.
- Выбор режима загрузки
- Blue Pill — два джампера
- Black Pill — кнопка загрузки
- Black Pill только STM32F411 — кнопка питания
- Питание — 5 В через USB, 2,0-3,6 В через 3,3 В на разъеме SWD.
- Размеры — 5,3 см х 2,2 см
Новые платы оснащены более быстрым микроконтроллером с FPU и гораздо большим объемом памяти и хранилищем для игр, и вы даже можете припаять свою собственную флэш-память SPI.
«Blue Pill» — это просто прозвище для этого типа платы, а печатная плата называется WeAct V1.3. Мы не увидели есть ли поддержка Arduino для платы, но плата STM32F401CC под названием BlackBill F401CC поддерживается в Arduino Core для репозитория STM32, и мы считаем, что это может быть именно эта плата (требуется уточнение). Один человек также специально работает над портом MicroPython для платы WeAct v1. 3.
Карту Black Pill / WeAct v1.3 можно купить на Aliexpress за 2.79 $ (STM32F401CCU6) или 3.96 $ (STM32F411CEU6).
Выражаем свою благодарность источнику из которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.
STM32 программирование. ST-Link программатор – Avislab
Микроконтроллеры STM32 приобретают все большую популярность благодаря своей мощности, достаточно разнородной периферии, и своей гибкости. Мы начнем изучать STM32F103C8T6, используя бюджетную тестовую плату, стоимость которой не превышает 2 $ (у китайцев). Еще нам понадобится ST-Link программатор, стоимость которого около 2.5 $ (у китайцев). Такие суммы расходов доступны и студентам и школьникам, поэтому именно с такого бюджетного варианта я и предлагаю начать.
Этот микроконтроллер не является самым мощным среди STM32, но и не самый слабый. Существуют различные платы с STM32, в томе числе Discovery которые по цене стоят около 20 $. На таких платах почти все то же, что и на нашей плате, плюс программатор. В нашем случае мы будем использовать программатор отдельно.
Микроконтроллер STM32F103C8. Характеристики
- Ядро ARM 32-bit Cortex-M3
- Максимальная частота 72МГц
- 64Кб Флеш память для программ
- 20Кб SRAM памяти
- Питание 2.0 … 3.3В
- 2 x 12-біт АЦП (0 … 3.6В)
- DMA контролер
- 37 входов / выходов толерантных к 5В
- 4 16-розрядних таймера
- 2 watchdog таймера
- I2C – 2 шины
- USART – 3 шины
- SPI – 2 шины
- CAN
- USB 2.0 full-speed interface
- RTC – встроенные часы
На плате STM32F103C8 доступны
- Выводи портов A0-A12, B0-B1, B3-B15, C13-C15
- Micro-USB через который можно питать плату. На плате присутствует стабилизатор напряжения на 3.3В. Питание 3.3В или 5В можно подавать на соответствующие выводы на плате.
- Кнопка Reset
- Две перемычки BOOT0 и BOOT1. Будем использовать во время прошивки через UART.
- Два кварца 8Мгц и 32768 Гц. У микроконтроллера есть множитель частоты, поэтому на кварце 8 МГц мы сможем достичь максимальной частоты контроллера 72Мгц.
- Два светодиода. PWR – сигнализирует о подачи питания. PC13 – подключен к выходу C13.
- Коннектор для программатора ST-Link.
Скачать тестовый файл для прошивки можно здесь. Программа мигает светодиодом на плате.
Прошивка STM32 с помощью USB-Uart переходника под Windows
В системной памяти STM32 есть Bootloader. Bootloader записан на этапе производстве и любой микроконтроллер STM32 можно запрограммировать через интерфейс USART с помощью USART-USB переходника. Такие переходники чаще всего изготавливают на базе популярной микросхем FT232RL. Прежде всего подключим переходник к компьютеру и установим драйвера (если требуется). Скачать драйвера можно с сайта производителя FT232RL – ftdichip.com. Надо качать драйвера VCP (virtual com port). После установки драйверов в компьютере должен появиться виртуальный последовательный порт.Подключаем RX и TX выходы к соответствующим выводам USART1 микроконтроллера. RX переходника подключаем к TX микроконтроллера (A9). TX переходника подключаем к RX микроконтроллера (A10). Поскольку USART-USB имеет выходы питания 3.3В подадим питания на плату от него.
Чтобы перевести микроконтроллер в режим программирования, надо установить выводы BOOT0 и BOOT1 в нужное состояние и перезагрузить его кнопкой Reset или выключить и включить питание микроконтроллера. Для этого у нас есть перемычки. Различные комбинации загоняют микроконтроллер в различные режимы. Нас интересует только один режим. Для этого у микроконтроллера на выводе BOOT0 должно быть логическая единица, а на выводе BOOT1 – логический ноль. На плате это следующее положение перемычек:
После нажатия кнопки Reset или отключения и подключения питания, микроконтроллер должен перейти в режим программирования.
Программное обеспечение для прошивки
Качаем с сайта st.com программу Flash Loader Demonstrator для STM32. Flash Loader Demonstrator – программа для прошивки STM32 через последовательный интерфейс.После включения схемы с правильно выставленными перемычками контроллер готов к работе с Flash Loader Demonstrator.
Запускаем Flash Loader Demonstrator и выбираем порт с которым будем работать, и устанавливаем параметры порта.
После выбора параметров порта нажимаем Next после чего должны увидеть «светофор» и информацию по микроконтроллеру. Если этого не происходит, тогда проверяем корректность установленных параметров связи и проверяем действительно ли микроконтроллер введен в режим программирования.
Нажимаем Next,
На этой странице выбираем файл для загрузки в микроконтроллер. Файл может быть в формате bin или hex.
Нажимаем Next и ждем.
Чтобы вывести контроллер из режима программирования, возвращаем перемычки в исходное состояние и нажимаем кнопку Reset. Программа в микроконтроллере должен заработать.
Прошивка STM32 с помощью USB-Uart переходника под Linux (Ubuntu)
Устанавливаем stm32flash
Скачать DEB файл можно тут: http://launchpadlibrarian.net/188294676/stm32flash_0.4-2_i386.deb Детально про stm32flash читайте тут: https://launchpad.net/ubuntu/wily/i386/stm32flash/0.4-2Если используем USB-UART переходник, имя порта буде примерно такое /dev/ttyUSB0
Получить информацию о чипе
sudo stm32flash /dev/ttyUSB0
Результат:
stm32flash 0.4 http://stm32flash.googlecode.com/ Interface serial_posix: 57600 8E1 Version : 0x22 Option 1 : 0x00 Option 2 : 0x00 Device ID : 0x0410 (Medium-density) - RAM : 20KiB (512b reserved by bootloader) - Flash : 128KiB (sector size: 4x1024) - Option RAM : 16b - System RAM : 2KiB
Читаем с чипа в файл dump.bin
sudo stm32flash -r dump.bin /dev/ttyUSB0
Пишем в чип
sudo stm32flash -w dump. bin -v -g 0x0 /dev/ttyUSB0
Результат:
stm32flash 0.4 http://stm32flash.googlecode.com/ Using Parser : Raw BINARY Interface serial_posix: 57600 8E1 Version : 0x22 Option 1 : 0x00 Option 2 : 0x00 Device ID : 0x0410 (Medium-density) - RAM : 20KiB (512b reserved by bootloader) - Flash : 128KiB (sector size: 4x1024) - Option RAM : 16b - System RAM : 2KiB Write to memory Erasing memory Wrote and verified address 0x08012900 (100.00%) Done. Starting execution at address 0x08000000... done.
Прошивка STM32 с помощью ST-Link программатора под Windows
При использовании программатора ST-Link выводы BOOT0 и BOOT1 не используются и должны стоять в стандартном положении для нормальной работы контроллера.
Качаем с сайта st.com Утилиту STM32 ST-LINK Utility. Устанавливаем ее. С ней должен быть установлен и драйвер для ST-Link. Если нет, качаем и устанавливаем драйвера ST-Link: http://www.st.com/content/st_com/en/products/embedded-software/development-tool-software/stsw-link009.html Подключаем ST-Link в USB- разъем компьютера, а соответствующие выводы программатора подключаем к выводам тестовой платы согласно маркировки.
Запускаем программу STM32 ST-LINK Utility
Выполняем пункт меню Target -> Connect
Выполняем пункт меню Target -> Erase Chip
Выполняем пункт меню File -> Open file… Выбираем файл для загрузки в микроконтроллер.
Выполняем пункт меню Target -> Programm & Verify…
После завершения прошивки и проверки, загруженная программа автоматически запустится.
Прошивка STM32 с помощью ST-Link программатора под Linux (Ubuntu)
Устанавливаем софт для работы с ST-Link
mkdir ~/stlink
cd ~/stlink
sudo apt-get install git libusb-dev
Пришлось устанавливать autoconf и libusb-1. 0:
sudo apt-get install autoconf
sudo apt-get install libusb-1.0
git clone git://github.com/texane/stlink.git
cd stlink
./autogen.sh
./configure
make
sudo mkdir /opt/texane
sudo cp gdbserver/st-util /opt/texane
sudo cp ./etc/udev/rules.d/49-stlinkv1.rules /etc/udev/rules.d
sudo cp ./etc/udev/rules.d/49-stlinkv2.rules /etc/udev/rules.d
sudo udevadm control --reload-rules
Проверяем видно ли программатор и чип
sudo ./st-info --probe
Результат:
Found 1 stlink programmers serial: openocd: "" flash: 65536 (pagesize: 1024) sram: 20480 chipid: 0x0410 descr: F1 Medium-density device
Читаем с чипа в файл dump.bin
sudo ./st-flash read dump.bin 0x8000000
Программируем STM32
sudo ./st-flash --reset write dump.bin 0x8000000
Памятка
Для того чтобы не копаться в документации каждый раз и не искать информацию по выводам микроконтроллера на плате, я сделал такую памятку, которая нам понадобится в дальнейшем.Документация
Всю необходимую документацию к микроконтроллера STM32F103C8T6 можно скачать с сайта производителя: http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103c8.htmlЧто можно почитать
The Iinsider`s Guide To The STM32 (Книжка на русском языке)Маркировка STM32
Device family | Product type | Device subfamily | Pin count | Flash memory size | Package | Temperature range |
---|---|---|---|---|---|---|
STM32 = ARM-based 32-bit microcontroller | F = General-purpose L = Ultra-low-power TS = TouchScreen W = wireless system-on-chip | 60 = multitouch resistive 103 = performance line | F = 20 pins G = 28 pins K = 32 pins T = 36 pins H = 40 pins C = 48/49 pins R = 64 pins O = 90 pins V = 100 pins Z = 144 pins I = 176 pins B = 208 pins N = 216 pins | 4 = 16 Kbytes of Flash memory 6 = 32 Kbytes of Flash memory 8 = 64 Kbytes of Flash memory B = 128 Kbytes of Flash memory Z = 192 Kbytes of Flash memory C = 256 Kbytes of Flash memory D = 384 Kbytes of Flash memory E = 512 Kbytes of Flash memory F = 768 Kbytes of Flash memory G = 1024 Kbytes of Flash memory I = 2048 Kbytes of Flash memory | H = UFBGA N = TFBGA P = TSSOP T = LQFP U = V/UFQFPN Y = WLCSP | 6 = Industrial temperature range, –40…+85 °C. 7 = Industrial temperature range, -40…+ 105 °C. |
STM32 | F | 103 | C | 8 | T | 6 |
Как снять защиту от записи / чтения?
Если вы получили плату с STM32F103, а программатор ее не видит, это означает, что китайцы защитили Флеш память микроконтроллера. Вопрос “зачем?” оставим без внимания. Чтобы снять блокировку, подключим UART переходник, будем программировать через него. Выставляем перемычки для программирования и поехали:Я это буду делать из под Ubuntu с помощью утилиты stm32flash.
1. Проверяем видно ли микроконтроллер:
sudo stm32flash /dev/ttyUSB0
Должны получить что-то такое:
stm32flash 0.4 http://stm32flash.googlecode.com/ Interface serial_posix: 57600 8E1 Version : 0x22 Option 1 : 0x00 Option 2 : 0x00 Device ID : 0x0410 (Medium-density) - RAM : 20KiB (512b reserved by bootloader) - Flash : 128KiB (sector size: 4x1024) - Option RAM : 16b - System RAM : 2KiB
2. Снимаем защиту от чтения а затем от записи:
sudo stm32flash -k /dev/ttyUSB0
stm32flash 0.4 http://stm32flash.googlecode.com/ Interface serial_posix: 57600 8E1 Version : 0x22 Option 1 : 0x00 Option 2 : 0x00 Device ID : 0x0410 (Medium-density) - RAM : 20KiB (512b reserved by bootloader) - Flash : 128KiB (sector size: 4x1024) - Option RAM : 16b - System RAM : 2KiB Read-UnProtecting flash Done.
sudo stm32flash -u /dev/ttyUSB0
stm32flash 0.4 http://stm32flash.googlecode.com/ Interface serial_posix: 57600 8E1 Version : 0x22 Option 1 : 0x00 Option 2 : 0x00 Device ID : 0x0410 (Medium-density) - RAM : 20KiB (512b reserved by bootloader) - Flash : 128KiB (sector size: 4x1024) - Option RAM : 16b - System RAM : 2KiB Write-unprotecting flash Done.
Теперь можно нормально работать с микроконтроллером.
Желаю успехов!
Смотри также:
Микроконтроллеры STM32
- Подробности
- Категория: Микроконтроллеры STM32
- Автор: Admin
- Просмотров: 9895
Одной из первых компаний выведших группу микроконтроллеров на ядре ARM Cortex-M3 является «STMicroelectronics», которая и сегодня находится в числе лидеров среди производителей подобных микроконтроллеров. Начиналось всё в 2007 году с двух семейств – «Performance Line» (STM32F103) и «Access Line» (STM32F101). И по сей день компания работает над улучшением характеристик и над расширением семейств. Помимо этого, пополняя программную составляющую продукта, и обеспечивая техническую поддержку.
Сейчас микроконтроллеры STM32 представлены 10-тью основными линейками для достижения различных целей:
- микроконтроллеры для общего применения с низкой стоимостью;
- микроконтроллеры с высокой производительностью;
- микроконтроллеры с ультранизким энергопотреблением;
- микроконтроллеры со встроенным радио-модулем специально для беспроводных решений.
А так же «pin-to-pin» и программная совместимость по всем линейкам. И это всё – на одном ядре ARM Cortex-M3.
Рассмотрим три основных инструмента, необходимых для того что бы начать работу с микроконтроллером STM32:
Параметры некоторых микроконтроллеров STM32
Распиновка микроконтроллера STM32F407V
Структура одного из микроконтроллеров STM32
1.
Программный инструментарий для разработки программ по микроконтроллеры STM32Программные средства для разработки под ARM-архитектуру представлены в широком ассортименте. Рассмотрим самые популярные из них.
Самым качественным, но при этом и самым дорогим является инструментарий представленный компаниями «Keil» и «IAR Systems». С точки зрения оптимизации и компактности кода, С-инструментарии наиболее продвинуты, этим и обусловлена их высокая цена. Кроме этого, за дополнительную плату данные компании предоставляют широкий выбор дополнительного ПО: USB-стеки, TCP/IP-стеки, операционные системы реального времени, и многое другое.
Нельзя не обратить внимания на популярность средств на основе компилятора GCC, которые можно купить или получить бесплатно. GCC популярен во многом благодаря количеству поддерживаемых операционных систем и процессоров.
2. Оценочная плата для разработки
Для микроконтроллеров STM32 существует широкий выбор оценочных плат. При чём не только от «STMicroelectronics», но и от прочих производителей. Например, модули «Махаон» и «Барракуда» от компании «Терраэлектроника». Поэтому, для большинства разработчиков коммерческих компаний и радиолюбителей нет необходимости самостоятельно изготавливать отладочные платы и программаторы.
По подробнее остановимся на линейке оценочных плат «Discovery», разработанной компанией «STMicroelectronics» для 8-битных микроконтроллеров – STM8S-Discovery и STM8L-Discovery, и «STM32VLDiscovery» – для 32-битных. Особенностью данных оценочных плат является то, что они являются завершённым решением, чтобы начать разработку программного обеспечения на микроконтроллерах. Имея необходимую обвязку и внешние компоненты, а также интегрированный программатор-отладчик «ST-Link», сам микроконтроллер является полноценным решением, не требующим дополнительных затрат.
3. Программатор-отладчик для разработки микроконтроллеры STM32
Не смотря на поддержку устройств других производителей, изготовитель каждой среды разработки в качестве программатора – отладчика, как правило, предоставляет своё собственное решение. Сегодня «ST-Link» – самый экономичный вариант. И его поддерживает основная масса сред разработки. «Родные» программаторы отладчика конечно, предоставляют максимальные возможности по отладке ПО. Так же, при выборе программаторов-отладчиков предоставляется несколько вариаций от одного разработчика: как более простые с поддержкой основных отладочных функций, так и профессиональные версии с поддержкой полного спектра функций трассировки и отладки. К примеру, программаторы-отладчики для «IAR Embedded Workbench» – «J-Link» и «J-Trace», для «Keil uVision» – «ULink» и «ULink-Pro».
В этой статье мы рассмотрели основные инструменты, необходимые для работы с группой микроконтроллеров STM32. Если Вам необходима дополнительная информация, то обращайтесь на официальный сайт «STMicroelectronics», где представлены разнообразные примеры, описания и много другой информации.
Услуги по разработке интерактивных электронных технических руководств (ИЭТР) представляет компания ITORUM. ИЭТР – это документация выполненная в интерактивной электронной форме.
- < Назад
- Вперёд >
Добавить комментарий
Stm32f103c8t6 st link v2
Итак, сегодня распишу немного по тому, как программировать ваши микроконтроллеры, из которых вы сделали всевозможные устройства. Не будем же мы только отладочную плату мучать .
Контроллеры STM32 можно прошить двумя путями.
1) Через встроеный бутлоадер (бутлоадер, это такая маленькая программка внутри каждого микропроцессора STM32, которая прикидывается программатором — это если по простому). Прошивка в таком варианте происходит через UART (для связи с компьютером используется переходник USB>COM)
2)Внешним программатором. Из внешних программаторов на данный момент есть большой выбор. Это может быть и ваша отладочная плата STM32 Discovery, и китайский аналог ST-LINK V2 mini, и оригинальный ST-Link.
Первым вариантом я не пользовался, но сложного в нём вроде ничего нет. Нужно скачать утилиту STM32 ST-LINK Utility и на вашем прошиваемом микроконтроллере выставить определённый сигнал на ножкеножках BOOT0BOOt1. Допустим возьмём для примера самый дешёвый и простой микроконтроллер STM32F030F4P6 в корпусе TSSOP20. У него есть ножка BOOT0, которую если мы замыкаем на массу — то у нас контроллер будет прошиваться через SWD (то есть от внешнего программатора), а если на эту ножку подать напряжения питания, то контроллер будет стартовать с встроенного бутлоадера, и ждать пока мы его прошьём через UART, то есть с помощью программы ST-LINK Utility.
Вторым вариантом намного проще работать, так как помимо того что вы можете прошивать свои микроконтроллеры так ещё и в режиме реального времени отлаживать свои программы (дебажить))
Для прошивки в таких случаях используется всего 4 ножки (по минимуму)
1)Vcc — питание 3 Вольт
2)VSS(Gnd) — масса
3)SWCLK
4)SWDIO
Такой вариант подключения для прошивки используется в том случае, если вы не сконфигурировали ножки SWCLK и SWDIO в качестве портов ввода-вывода. Если же вы эти ножки используете в качестве портов ввода-вывода, то прийдётся ещё подключать “физичесу” линию сброса. — RST . В таком варианте у нас получается 5 проводов для подключения
1)Vcc — питание 3 Вольт
2)VSS(Gnd) — масса
3)SWCLK
4)SWDIO
5)NRST
Вот так выглядит распиновка на плате STM32F4Discovery разъёма для программирования внешних микроконтроллеров. Пин VDD_Target является пином, для снятия показаний напряжения с прошиваемого устройства. Этот если по простому — для согласования уровня напряжений между программатором и прошиваемым устройством.
Вот так выглядит разъём программатора ST-LINK V2 mini. В нём есть дополнительные средства для работы с STM8 и т.д, поэтому для работы с STM32 нам нужны пины
1)Vcc — питание 3 Вольт
2)SWDIO
3)VSS(Gnd) — масса
4)SWCLK
10)NRST
Вот так выглядит схема подключения для прошивки нашего простейшего микроконтроллера STM32F030F4P6
Как видите, никаких заморочек нет. На этом думаю всё, если будут вопросы, то пишите в коментах, я добавлю эти нюансы в статью.
Микроконтроллеры STM32 приобретают все большую популярность благодаря своей мощности, достаточно разнородной периферии, и своей гибкости. Мы начнем изучать STM32F103C8T6, используя бюджетную тестовую плату, стоимость которой не превышает 2 $ (у китайцев). Еще нам понадобится ST-Link программатор, стоимость которого около 2.5 $ (у китайцев). Такие суммы расходов доступны и студентам и школьникам, поэтому именно с такого бюджетного варианта я и предлагаю начать.
Этот микроконтроллер не является самым мощным среди STM32, но и не самый слабый. Существуют различные платы с STM32, в томе числе Discovery которые по цене стоят около 20 $. На таких платах почти все то же, что и на нашей плате, плюс программатор. В нашем случае мы будем использовать программатор отдельно.
Микроконтроллер STM32F103C8. Характеристики
- Ядро ARM 32-bit Cortex-M3
- Максимальная частота 72МГц
- 64Кб Флеш память для программ
- 20Кб SRAM памяти
- Питание 2.0 … 3.3В
- 2 x 12-біт АЦП (0 … 3.6В)
- DMA контролер
- 37 входов / выходов толерантных к 5В
- 4 16-розрядних таймера
- 2 watchdog таймера
- I2C – 2 шины
- USART – 3 шины
- SPI – 2 шины
- CAN
- USB 2. 0 full-speed interface
- RTC – встроенные часы
На плате STM32F103C8 доступны
- Выводи портов A0-A12, B0-B1, B3-B15, C13-C15
- Micro-USB через который можно питать плату. На плате присутствует стабилизатор напряжения на 3.3В. Питание 3.3В или 5В можно подавать на соответствующие выводы на плате.
- Кнопка Reset
- Две перемычки BOOT0 и BOOT1. Будем использовать во время прошивки через UART.
- Два кварца 8Мгц и 32768 Гц. У микроконтроллера есть множитель частоты, поэтому на кварце 8 МГц мы сможем достичь максимальной частоты контроллера 72Мгц.
- Два светодиода. PWR – сигнализирует о подачи питания. PC13 – подключен к выходу C13.
- Коннектор для программатора ST-Link.
Итак, начнем с того, что попробуем прошить микроконтроллер. Это можно сделать с помощью USB-Uart переходника на базе микросхемы FT232 через USART, или с помощью программатора ST-Link.
Скачать тестовый файл для прошивки можно здесь. Программа мигает светодиодом на плате.
Прошивка STM32 с помощью USB-Uart переходника под Windows
В системной памяти STM32 есть Bootloader. Bootloader записан на этапе производстве и любой микроконтроллер STM32 можно запрограммировать через интерфейс USART с помощью USART-USB переходника. Такие переходники чаще всего изготавливают на базе популярной микросхем FT232RL. Прежде всего подключим переходник к компьютеру и установим драйвера (если требуется). Скачать драйвера можно с сайта производителя FT232RL – ftdichip.com. Надо качать драйвера VCP (virtual com port). После установки драйверов в компьютере должен появиться виртуальный последовательный порт.
Подключаем RX и TX выходы к соответствующим выводам USART1 микроконтроллера. RX переходника подключаем к TX микроконтроллера (A9). TX переходника подключаем к RX микроконтроллера (A10). Поскольку USART-USB имеет выходы питания 3.3В подадим питания на плату от него.
Чтобы перевести микроконтроллер в режим программирования, надо установить выводы BOOT0 и BOOT1 в нужное состояние и перезагрузить его кнопкой Reset или выключить и включить питание микроконтроллера. Для этого у нас есть перемычки. Различные комбинации загоняют микроконтроллер в различные режимы. Нас интересует только один режим. Для этого у микроконтроллера на выводе BOOT0 должно быть логическая единица, а на выводе BOOT1 – логический ноль. На плате это следующее положение перемычек:
После нажатия кнопки Reset или отключения и подключения питания, микроконтроллер должен перейти в режим программирования.
Программное обеспечение для прошивки
Качаем с сайта st.com программу Flash Loader Demonstrator для STM32. Flash Loader Demonstrator – программа для прошивки STM32 через последовательный интерфейс.
После включения схемы с правильно выставленными перемычками контроллер готов к работе с Flash Loader Demonstrator.
Запускаем Flash Loader Demonstrator и выбираем порт с которым будем работать, и устанавливаем параметры порта.
После выбора параметров порта нажимаем Next после чего должны увидеть «светофор» и информацию по микроконтроллеру. Если этого не происходит, тогда проверяем корректность установленных параметров связи и проверяем действительно ли микроконтроллер введен в режим программирования.
Нажимаем Next,
На этой странице выбираем файл для загрузки в микроконтроллер. Файл может быть в формате bin или hex.
Нажимаем Next и ждем.
Чтобы вывести контроллер из режима программирования, возвращаем перемычки в исходное состояние и нажимаем кнопку Reset. Программа в микроконтроллере должен заработать.
Прошивка STM32 с помощью USB-Uart переходника под Linux (Ubuntu)
Устанавливаем stm32flash
Если используем USB-UART переходник, имя порта буде примерно такое /dev/ttyUSB0
рекомендуется к прочтению
Архитектуру STM32 можно мысленно разделить на две части. Первая часть, это ядро Cortex-M3, которое спроектировали в ARM и которое примерно одинаковое для всех. “Примерно”, потому что, содержит опциональные модули которые могут быть у одного производителя и отсутствовать у другого. Вторая часть, это периферия знакомая по STM8, с тем отличием, что был добавлен USB2.0 интерфейс, хотя точнее было бы сказать, что этот интерфейс был “откручен” от STM8(такая у STM политика: хочешь аппаратный USB, используй STM32).
- Справочники и руководства которые нужны для работы c STM32F103x8/STM32F103xB:
- Справочное руководство по 32-битным микроконтроллерам серий STM32F10x Reference Manual. STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx advanced ARM®-based 32-bit MCUs или RM 0008
- Руководство на чипы STM32F103x8/STM32F103xB STM32F103x8 STM32F103xB Medium-density performance line ARM®-based 32-bit MCU with 64 or 128 KB Flash, USB, CAN, 7 timers, 2 ADCs, 9 com. interfaces
- Ядро Cortex – МЗ компании ARM. Полное руководство. Книга не обязательная, но на мой взгляд очень полезная.
- Небльшой ликбез по ARM и Cortex-M3 в частности:
- Cortex-M3 основан на архитектуре ARMv7 и является усеченным вариантом архитектуры ARMv7 специально для микроконтроллеров. По сравнению с полноценным ЦПУ Cortex-A, здесь отсутствует кеш и 32-битный альтернативный набор команд ARM. Также могут отсутствовать некоторые модули, такие как модуль зашиты памяти – MPU (Memory Protect Unit).
- Cortex-M3 включает в себя 16-битный набор команд, оптимизированный для систем с малым объемом памяти, Thumb и 32-битный дополнительный набор Thumb-2. Здесь 16-битная команда означает, что ее двоичное представление будет занимать в памяти 16-бит, т.е. она более компактная. Программный код может состоять из произвольного набора 16-битных команд Thumb и 32-битных Thumb 2.
- В Cortex-M3 имеется аппаратное деление и умножение. Урезанная, удешевленная версия Cortex-M0 базируется на архитектуре ARMv6 и таких инструкций не имеет. ARMv6 отличается от ARMv7 отсутствием набора инструкций Thumb-2. Cortex-M4, напротив, дополнен DSP модулем, а Cortex-M4F также включает в себя FPU модуль, т.е. он аппаратно поддерживает числа с плавающей запятой.
- Номера процессоров ARM никак не согласованы с версиями архитектур. Процессоры ARM11 имеют архитектуру ARMv6, а ARM9 имели архитектуру ARMv4.
- Cortex-M3 имеет единую адресную 32-битную шину, которая может адресовать 4Гб памяти. Процессор построен по гарвардской архитектуре и имеет отдельные шины для памяти данных SRAM и памяти программ Flash. Программа может быть запущена из SRAM, тогда будет задействована только одна шина и код будет выполняться медленнее.
- Cortex-M3 имеет шестнадцать 32-битных РОН (регистров общего назначения) R0-R15. Команды из набора инструкций Thumb могут обращаться только к регистрам R0-R7. Команды из набора Thumb-2 могут обращаться ко всем регистрам. При этом, регистр r13 – это указатель стека, r14 – регистр связи(хранит адрес возврата из подпрограммы), r15 – счетчик команд.
Немного о STM32:
Выпускаемые линейки микроконтроллеров изображены на следующей картинке:
Это не полный перечень, но представление давать должен. Кроме линеек, микроконтроллеры делятся по размерам flash-памяти. Чем больше flash-пямять, тем больше остальной периферии. Для 103-й линейки это выглядит так:
Блок-схема устройства STM32F103 представлена на картинке ниже:
Во всем этом хозяйстве нас будет больше всего интересовать периферия подключенная к периферийным шинам APB1 и APB2. Также полезно будет запомнить внутреннюю шину AHB.
Имеющаяся в чипах периферия перечислена в следующей табличке:
Выбор “железа”
Чип который у меня оказался под рукой – STM32F103CBT6 запаянный в плату Maple Mini:
Заказав его год назад на Али, я ради интереса загрузил в него несколько скетчей, и набалововшись бросил на полку. За этот год проект Leaf Maple накрылся медным тазом, сайт поменял содержимое, а поддержку железа передали на следующий форум: STM32 for Arduino. Я особо не расстроился, т.к. не питал особых надежд на этот проект, и планировал плату использовать для Си-программирования.
Кстати, на упомянутом выше сайте есть хороший классификатор с образчиками результатов работы китайской промышленности, содержащих чипы STM32F103, очень рекомендую ознакомится: STM32F103 boards
Если у кого-то имеется под рукой “Blue Pill”, то это не беда, там установлен чип STM32F103C8T6 который от STM32F103CBT6 отличается только уменьшенным до 64кБ размером flash-памяти. Еще там светодиод подключен на PC13, в то время как на MapleMini он на PB1, и кроме этого у Maple Mini имеется кнопка на PB8.
Зато на “Blue Pill” имеется штыревой разъем для подключения программатора ST-LINK, в то время как Maple Mini нужно устанавливать в макетку что бы прошить по SWD. Прозвонкой чипа было выяснено, что на Mapple Mini SWDIO контакт “висит” на 22-pin, а SWCLK на 21-м. Но заставить работать ST-LINK с Maple Mini оказалось не просто.
Прошивка чипов через программатор ST-LINK v2
STM32 можно прошить либо через UART встроенным загрузчиком, либо через SWD-интерфейс программатором ST-LINK. Меня интересовал второй вариант, т.к. был скромным владельцем клона ST-LINK v2.
В Windows прошить STM32 через ST-LINK можно воспользовавшись фирменной утилитой “STM32 ST-LINK Utility”, или непосредственно из среды разработки IAR for ARM. В Linux можно воспользоваться консольной утилитой sy-flash.
Если у вас “Blue Pill” или еще какая-либо плата отличная от Leaf Maple, то никаких проблем не будет, их можно сразу прошивать. Моя же Maple Mini никак не хотела видеться программатором, пока я не догадался во время загрузки программы из IAR в чип, несколько раз нажать на кнопку Reset на плате. После чего Maple Mini начала свободно прошиваться, но родной USB-загрузчик был на этом этапе потерт. Но это мелочи.
Ок. Посмотрим как чипы прошиваются в Windows. Войдя на сайт http://my.st.com и залогинившись, введем в строку поиска “st-link”. На выходе получим такую табличку:
Щелкнув мышкой по второй строчке и промотав открывшуюся страницу книзу, увидим список предлагаемого ПО для программатора:
STSW-LINK004 – это утилита для прошивки STM32 чипов. STSW-LINK007 утилита для обновления прошивки программатора, STSW-LINK009 – драйвера для различных версий Windows. Немного выше предлагаются свежие прошивки для самого программатора. ST-LINK v2.
Как установить драйвер для ST-LINK v2 я рассказывал здесь: STM8 + IAR + ST-LINK2: программирование, прошивка и отладка из под Windows, поэтому далее будем считать, что драйвер уже установлен.
После установки и запуска “STM32 ST-LINK Utility” следует подключить ST-LINK v2 к компьютеру или виртуальной машине(мой случай), а к ST-LINK в свою очередь, должен быть подключен чип который следует прошить:
После чего следует пройти по меню: “меню-> Target – > Settings. ” и должно появится такое окно:
Во-первых, сам программатор ST-LINK V2 должен быть опознан программой, показана версия его прошивки. Во-вторых должен быть опознан чип подключенный к программатору. В третьих, рабочий протокол должен быть установлен как SWD, а не JTAG.
Когда я впервые воткнул ST-LINK полученный год назад с Али, мне вместо номера прошивки показывало что-то вроде “Old firmware”, поэтому мне пришлось воспользоваться утилитой обновления прошивки ST-LINK, что бы флешеры нормально работали с моим клоном ST-LINK. К сожалению у меня не сохранились скрины.
Здесь у меня изначальная версия прошивки(цифра после буквы J) была то ли 20, то ли 21. В итоге меня обновили то текущей версии. Кстати, из под виртуальной машины обновляется прошивка без проблем.
Вернемся к STM32 ST-LINK Utility. После нажатия кнопки “Ок” в окне “Settings”, появится рабочее окно программы:
Следует запомнить, что стартовый адрес флеш-памяти начинается с 0x08000000. Встроенная оперативка начинается c 0x20000000. Чтобы программа стартовала с оперативки, контакты boot0 и boot1 должны быть сконфигурированы специальным образом.
Щелкнув по вкладке “binary file” можно выбрать файл с прошивкой, затем пройдя по “меню->Target->Program. ” эту прошивку можно прошить в микроконтроллер:
Наряду со знакомым форматом прошивок HEX, в stm32 широко используется бинарный raw-формат “*.bin”.
Через меню “File->Save As” можно сохранить прошивку чипа в файл:
Если честно, слить пошивку с чипа и потом залить ее обратно так, чтобы она работала, мне не удалось. Нужно будет разбираться.
Еше интересной штукой являются Option Bytes знакомые по STM8:
Пока не будем их трогать.
Теперь, что касается st-flash для Linux, то там с одной стороны все проще, а с другой – сложнее. Сложнее, потому что глючит. Может к этим глюкам как-то можно привыкнуть, но я пока не сумел.
Пока я обнаружил такую закономерность, команда очистки флеш-памяти “st-flash erase” помогает избавиться от глюков:
Программирование STM32 с помощью IAR и SPL в Windows
Если на сайте http://my.st.com ввести в строку поиска “stm32f10x standard peripheral library” то нам предложат скачать SPL для чипов STM32F10x:
В отличии от SPL для STM8, библиотека разделена на CMSIS и саму SPL. CMSIS (Cortex® Microcontroller Software Interface Standard) – это стандарт описания периферии микроконтроллера, то что в STM8 размещалось в файлах stm8s.h/stm8l.h
Подключить SPL к IAR достаточно просто, в сети множество видео и пошаговых инструкций. Я лично делал по этому видео: STM32 Discovery IAR and StdPeriph Lib настройка и загрузка проекта
Проект компилируется и заливается в чип, после чего успешно работает. Наверное больше и не надо, но я предлагаю забрать результирующий объектный файл с расширением *.out и перенести его в Linux, для внимательного изучения:
Программирование STM32 с помощью Eclipse и SPL в Linux
В Linux попробуем посмотреть, что за файл генерирует на выходе IAR:
Как видим, это обыкновенный эльф. Смотрим дальше:
Из “эльфа” мы всегда можем получить файл прошивки в HEX формате:
или бинарный файл:
Также можно посмотреть ассемблерный код:
Даже можно попытаться загрузить на чип в режиме отладки. Для этого понадобиться сервер st-util который входит в набор утилит st-flash и сам отладчик gdb.
Подключаемся к ранее запущенному серверу:
Ставим точку останова и запускаем на исполнение:
Но при попытке распечатать исходный листинг программы выдаст сообщение об ошибке:
кое-что сделать конечно можно
На этом этапе думаю лучше оставить прошивку с IAR в сторону, и попытаться скомпилировать нормальный объектный файл в Linux.
некоторые не ищут легких путей.
Проблема в том, что нельзя вот так просто взять компилятор, исходный текст и скомпилировать прошивку для stm32. Почему? Потому что в опциях gcc компилятора можно указать только тип архитектуры “cortex-m3”, а чипов на этой архитектуре выпускаются различными фирмами – тьма тьмущая. И у всех них разные карты памяти и периферия. Как минимум понадобиться скрипт линкера для вашего чипа.
О масштабах проблемы можно почитать например тут: ARM-ы для самых маленьких: тонкости компиляции и компоновщик. Более-менее толковый самопальный Makefile который мне удалось найти можно взять тут: Еще один шаблон проекта под STM32 на gcc.
После некоторых размышлений я решил взять в качестве основы сборочные файлы из какого-нибудь IDE. Традиционным IDE для ARM в Linux стал Eclipse, который ненавидят наверно все linux-пользователи за глючность и тормознутость. Справедливости ради, должен упомянуть, что генерации проектов существует специальная фирменная утилита STM32CubeMX. Но может ли она генерировать проекты для gcc или нет, я не знаю.
Поддержка ARM в Eclipse ставится через плагин: GNU ARM Eclipse
На странице установки предлагается несколько способов установки ARM плагина. Но, например, на LinuxMint мне этот плагин установить не удалось. В репозитории какая-то древняя версия Eclipse 3.8, это версия от 2012(!) года. И установка плагина заканчивается фейлом:
Поэтому пришлось вспомнить про старую добрую Slackware GNU/Linux. В этом году вышла новая версия 14.2.
Для начала нужно будет скачать ARM toolchain c сайта ARM:
Скачанный архив я распаковал в /usr/local
Теперь чтобы скачать Eclipse, зайдем в репозиторий и введем в строку поиска “eclipse-cpp”:
После чего попадаем на страницу с пакетом:
Т.к. уменя Слакваръ 64-битная, то для установки выполняем следующие манипуляции:
Поставив Eclipse мы сделали полдела. Еще нужно поставить jdk. C 6-й и 8-й версии JDK Eclipse отказывался работать и вылетал. С 7-й тоже глючит, но кое-как работает. В гугл вбиваем “java jdk 7 download” попадем на страницу: Java SE Development Kit 7 Downloads
Теперь можно запускать Eclipse:
Жмем OK, это будет рабочий каталог проектов:
Далее открываем Marketplace:
В строку поиска вводим ARM:
и щелкаем по “install”
Перед установкой нужно будет принять условия лицензии:
Если погода на Марсе будет солнечной, то в конце установки предложат перезагрузить Eclipse:
После перезапуска Eclipse создаем новый проект:
В открывшийся форме нужно будет заполнить имя нового проекта и выбрать его тип:
В следующей форме необходимо выбрать параметры чипа. Замечу, что по дефолту(поле Content) предлагается не пустой проект, а проект с blink’ом:
Следующую форму можно оставить как есть:
Здесь нужно указать путь к папке toolchain’ом:
Осталось закрыть окно “Welcome”
И перед нами открывается окно проекта:
Это совсем не тот простенький Blink который был в IAR. Здесь задержки формируются по таймеру и кроме этого используется модуль трассировки. Задать номер pin’а к которому подключен светодиод, можно в файле Blinky.h
Чтобы задать светодиод на PB1 нужно константы BLINK_PORT_NUMBER и BLINK_PIN_NUMBER установить в единицы. После чего можно скомпилировать проект:
Если все прошло удачно, то можно закрыть проект и перейти в консоли в папку проекта:
Там будет объектный файл прошивки. Получаем бинарный файл:
Если, опять же все нормально, то светодиод начнет мигать с интервалом в одну секунду. Заливать прошивку можно и из Eclipse, но эта IDE меня интересует только как генератор проектов.
Попробуем взглянуть на makefile файл который лежит в этой же папке:
некоторые вещи бывает сложно объяснить
Пробуем еще раз загрузить полученный файл в отлдачик. Запускаем сервер:
подключаемся к серверу:
ставим точку останова:
Запускаем на выполнение:
Выполнение программы приостонавливается на точке останова. Смотрим листинг:
В этот раз все в прорядке. Однако если мы еще раз дадим команду continue, то будет возможно, неожиданный эффект:
Программа останавливается по сигналу SIGTRAP и дальше ни в какую не идет.
Проблема кроется в отладочном интерфейсе semihosting, которого как понимаю, в чипе просто нет, но который позволяет выводить отладочные сообщения через функцию trace_printf().
Чтобы решить эту проблему, нужно в Eclipce через меню->project->proporties, открыть вкладку Settings в “C/C++ Build”:
В настройке препроцессора следует удалить макроопределение OS_USE_TRACE_SEMIHOSTING_DEBUG. После чего пересобрать проект. и полученный объектный файл заново загрузить в отладчик:
Посмотрим что нам пытаются вывести:
здесь вроде все нормально
Посмотрим значение переменной seconds:
Почему то у меня после blink_on() светодиод гаснет, а после blink_off() наоборот загорается
Подключение цифровых PDM-микрофонов к STM32 | arm
Цифровые MEMS-микрофоны (MEMS аббревиатура от MicroElectroMechanical Systems) применяются во всех аудио-приложениях, где ключевые требования – малый размер, высокое качество звука, надежность и доступность. Благодаря малым размерам и низкой чувствительности к помехам можно реализовать несколько микрофонов в одном устройстве что упрощает интеграцию в портативных устройствах качественных систем захвата и записи звука. 32-битные STM32 Arm® Cortex® MCU и STM32 Arm® Cortex® MPU предоставляют широкие возможности для подключения MEMS-микрофонов.
В этом документе (перевод даташита AN5027 [1]) описываются способы подключения MEMS-микрофонов с кодированием выходного потока данных по методу плотности импульса (pulse-density modulated, PDM), в конфигурациях моно и стерео, к STM32 MCU и MPU через интерфейсы SPI/I2S, SAI и DFSDM. Предоставляются руководства и примеры, основанные на STM32CubeMX, показывающие правильное конфигурирование STM32 для захвата и обработки сырых данных с микрофонов, чтобы преобразовать эти данные в стандартные данные звука.
[MEMS-микрофоны c PDM-кодированием выходных данных]
Цифровой MEMS-микрофон это сенсор, преобразующий акустическое давление звуковых волн в цифровой сигнал. STM32 захватывают цифровые данные из этого микрофона (или микрофонов) через определенные периферийные интерфейсы, и преобразуют полученные данные в стандартный звуковой формат. После этого данные звука обрабатываются микроконтроллером STM32 в соответствии с алгоритмом целевого приложения.
Рис. 1. Пример захвата звука в аудио-приложении.
Цифровой микрофон состоит из следующих основных узлов: MEMS-преобразователь, усилитель и PDM-модулятор.
Рис 2. Блок-схема типового цифрового PDM MEMS-микрофона.
MEMS-преобразователь. Это переменная емкость, преобразующая изменение давления воздуха, вызванные звуковой волной, в напряжение.
Усилитель. Этот узел буферизирует напряжение, поступающее от MEMS-преобразователя, и создает достаточно мощный сигнал для работы PDM-модулятора.
PDM-модулятор. Модулятор преобразует аналоговый сигнал в последовательность импульсов с модулированием плотности. Для управления модулятором используется тактовый вход (CLK). Тактовая частота, используемая для цифровых микрофонов ST, лежит в диапазоне от 1 МГц до 3.25 МГц. Эта частота определяет частоту дискретизации (sampling rate), на которой выходной сигнал усилителя оцифровывается для получения дискретного по времени цифрового сигнала (битовый поток PDM).
Выбор канала. Выход микрофона управляется соответствующим уровнем выбранного перепада сигнала тактов, и затем переходит в состояние высокого сопротивления в течение половины периода тактов. Выбор канала определяет перепад тактового сигнала, на котором цифровой микрофон выводит свои данные. Вывод LR микрофона должен быть подключен к Vdd или к GND.
Таблица 1. Выбор шаблона для выходного сигнала DOUT.
LR |
DOUT | |
CLK = 0 | CLK = 1 | |
GND | Достоверные данные | Высокое сопротивление |
Vdd | Высокое сопротивление | Достоверные данные |
Питание. На выводы Vdd и GND подается напряжение питания, используемое для работы различных компонент цифрового микрофона. Напряжение питания должно быть хорошо отфильтровано, потому что помехи по питанию могут генерировать лишний шум на выходе микрофона.
Таблица 2. Выводы микрофона.
Имя вывода | Функция | Направление |
Vdd | Питание 3.3V | Вход питания |
GND | 0V, общий провод | Земля |
LR | Выбор левого (L) / правого (R) канала | Вход |
CLK | Такты синхронизации | Вход |
DOUT | Данные PDM | Выход |
[Базовые схемы подключения]
Моно. В этом режиме вывод LR микрофона может быть подключен либо к Vdd, либо к GND. Когда LR подключен к Vdd, генерируются данные правого канала.
Рис. 3. Конфигурация моно, получение данных правого канала.
На фронте нарастания сигнала тактов микрофон генерирует достоверные данные в течение половины периода тактов, затем переходит в состояние высокого сопротивления в течение другой половины периода тактов.
Рис. 4. Диаграммы сигналов правого канала.
Когда LR подключен к GND, генерируются данные левого канала.
Рис. 5. Конфигурация моно, получение данных левого канала.
На на спаде уровня сигнала тактов микрофон генерирует достоверные данные в течение половины периода тактов, затем переходит в состояние высокого сопротивления в течение другой половины периода тактов.
Рис. 6. Диаграммы сигналов левого канала.
Конфигурация стерео. Два разных цифровых MEMS-микрофона подключены к одному и тому же сигналу данных, при этом первый микрофон сконфигурирован на генерацию сигнала по фронту тактов (LR подключен к Vdd), и второй по спаду тактов (LR подключен к GND).
Рис. 7. Конфигурация стерео, использующая общий сигнал данных.
Рис. 8. Диаграммы сигналов конфигурации стерео.
[Сигналы PDM и PCM]
PDM. Как уже упоминалось, аббревиатура PDM означает Pulse Density Modulation, т. е. модуляция изменением плотности импульсов. PDM используется для представления аналогового сигнала в цифровой домен, представляя собой высокочастотный однобитный поток цифровых импульсов. В сигнале PDM относительная плотность импульсов соответствует амплитуде аналогового сигнала. Большой кластер логических единичек соответствует высокой (положительной) величине амплитуды, в то время как большой кластер логических нулей соответствует низкой (отрицательной) величине амплитуды, и смена лог. 1 и лог. 0 одинаковой длительности соответствует нулевому значению амплитуды.
Рис. 9. Сигнал PDM.
Сигнал PDM легко преобразуется в аналоговую форму путем пропускания потока PDM через фильтр низких частот (ФНЧ).
PCM. Аббревиатура PCM означает Pulse Code Modulation, т. е. модуляция импульсного кодирования. Это стандартная форма представления аналогового сигнала в цифровом виде (в частности, несжатые WAV-файлы кодируют свои данные в формате PCM). В сигнале PCM определенные значения амплитуды кодируются в цифровые импульсы. У потока PCM есть 2 базовых свойства, которые определяют точность соотвествия потока оригинальному аналоговому сигналу:
• Частота дискретизации (sampling rate).
• Разрядность выборок (bit depth).
Частота дискретизации определяет, сколько выборок в секунду цифрового сигнала представляют аналоговый сигнал в цифровую форму. Разрядность выборок определяет, сколькими битами кодируется информация о сигнале в каждой выборке.
Рис. 10. Сигнал PCM.
Преобразование PDM в PCM. Чтобы преобразоваnm поток PDM в выборки данных PCM, поток PDM нужно отфильтровать и подвергнуть децимации.
На стадии децимации частота дискретизации сигнала PDM снижается до необходимой частоты дискретизации звука (например, 16 кГц). Децимация осуществляется взятием одной выборки из M выборок, при этом частота дискретизации понижается в M раз. Таким образом, частота данных PDM (которая равна частоте тактов микрофона) понижается в M раз, чтобы частота выборок звука соответствовала нужной частоте выборок в приложении, и коэффициент M называется коэффициентом децимации.
Частота PDM = Частота выборок звука x Коэффициент децимации
Коэффициент децимации обычно выбирается в диапазоне от 48 до 128. Стадии децимации предшествует ФНЧ, чтобы избежать искажений формы сигнала из-за наложений спектра (алиасинг).
[Акустические параметры]
Чувствительность. Этот параметр соответствует уровню электрического сигнала (выраженному dBFS) на выходе цифрового микрофона для определенного эталонного акустического сигнала. Обычно чувствительность микрофона приводится для тонального сигнала звука 1 кГц в качестве эталонного сигнала, при 1 Pa (или 94 dBSPL).
SNR. Аббревиатура SNR расшифровывается Signal-to-Noise Ratio, т. е. соотношение уровня сигнала к уровню шума. SNR определяет соотношение между эталонным сигналом (94 dBSPL@1kHz) и величиной остаточного шума на выходе микрофона. Более высокое значение SNR обеспечивает улучшенную четкость речи, а также разборчивость звука на дальнем конце.
AOP. Аббревиатура AOP обозначает Acoustic Pverload Point (точка перегрузки по звуку). Этот параметр определяет максимальный звуковой сигнал, который микрофон может передать с допустимым уровнем искажений (некоторые спецификации определяют этот уровень искажений 10% с точки зрения искажений в точке перегрузки).
PSRR. Аббревиатура PSRR расшифровывается как Power Supply Rejection Ratio, т. е. коэффициент подавления помех по питанию. Параметр PSRR количественно определяет способность микрофона устранять шум, поступающий от изменений уровня напряжения источника питания.
Таблица 3. Преимущества цифрового микрофона в контексте улучшения акустических параметров.
Функция | Направление |
Нечувствительность к радиочастотным наводкам (RF) и электромагнитным помехам (EMI) | – Меньше усилия по интеграции микрофона в систему |
Кондиционирование аналогового сигнала не требуется | – Упрощение разработки приложения – Непосредственный интерфейс с кодеками, снабженными цифровым микрофонным интерфейсом – Для режима стерео нужна только одна линия данных – Значительная экономия места на печатной плате, что позволяет увеличить количество микрофонов в системе – Гибкие возможности по добавлению дополнительных микрофонов в приложении |
Надежная цифровая передача | – Простое позиционирование MEMS в системе приложения – Стандартное кондиционирование цифровых данных – Позволяет интегрировать функции улучшения звука для захвата стерео, подавления шума и формирования диаграммы направленности |
Таблица 4. Цифровые микрофоны ST, имеющиеся на рынке.
Модель | Вх. порт | Напр. питания (V) | SNR (dB) | Чувств. (dBFS) | AOP (dBSPL) |
MP34DB02 | Снизу | 1.64 .. 3.6 | 62.6 | -26 | 120 |
MP34DT01-M | Сверху | 1.64 .. 3.6 | 61 | -26 | 120 |
MP34DT02 | Сверху | 1.64 .. 3.6 | 60 | -26 | 120 |
MP34DT04 | Сверху | 1.6 .. 3.6 | 64 | -26 | 120 |
MP34DT04-C1 | Сверху | 1.6 .. 3.6 | 64 | -26 | 120 |
MP34DT05 | Сверху | 1. 6 .. 3.6 | 64 | -26 | 122.5 |
MP45DT02-M | Сверху | 1.64 .. 3.6 | 61 | -26 | 120 |
На AliExpress также доступны микрофоны INMP441 компании InvenSense:
Модель | Вх. порт | Напр. питания (V) | SNR (dB) | Чувств. (dBFS) | AOP (dBSPL) |
INMP441 | Снизу | 1.62 .. 3.63 | 61 | -26 | 120 |
[Подключение потока PDM к STM32]
В этой секции описывается, как подключить цифровые MEMS-микрофоны к периферийным интерфейсам SPI/I2S, SAI и DFSDM микроконтроллера STM32, в конфигурациях моно и стерео.
SPI/I2S. Аббревиатура SPI обозначает Serial Peripheral Interface, а аббревиатура I2S означает Inter-IC Sound (описание периферии SPI и I2S см. в статьях [2, 3]). Микроконтроллеры STM32 в снабжены несколькими интерфейсами SPI. Некоторые из этих SPI также поддерживают возможность работы по протоколу I2S. Дополнительно STM32 представляют 2 версии SPI. В этом описании старые версии называются SPI-V1, и последние версии называются SPI-V2. Когда в тексте просто упоминается блок SPI, то это одинаково относится как SPI-V1, так и к SPI-V2. Версия SPI-V2 в настоящий момент доступна в серии STM32H7 микроконтроллеров STM32.
К блоку SPI можно подключить один или два цифровых микрофона, работая с ними либо по протоколу SPI, либо по протоколу I2S.
• Протокол SPI предоставляет простой способ обмена, позволяя обмениваться данными с внешними устройствами.
• Протокол I2S широко используется для передачи звуковых данных от микроконтроллера/DSP (Digital Signal Processor, устройство цифровой обработки сигнала) в аудиокодеки, чтобы проигрывать музыку или захватывать звук с микрофона.
Моно. К блоку SPI подключен цифровой микрофон. SPI может быть сконфигурирован в режиме SPI или в режиме I2S. В обоих случаях блок SPI конфигурируется в режиме master receiver (главное устройство шины, принимающее данные). В этом режиме блок SPI генерирует тактовый сигнал для цифрового микрофона. Выборки звука принимаются через сигнал данных SPI (MISO).
Рис. 11. Подключение цифрового микрофона по протоколу SPI или I2S в конфигурации моно.
Если используется протокол SPI, то вывод выбора левого/правого канала (L/R, сигнал LR) может быть подключен либо к Vdd, либо к GND. Полярность тактов SPI должна соответствовать конфигурации входа L/R.
• Если L/R = GND, то SPI должен захватывать приходящие данные, используя фронт нарастания уровня SPIx_SCK.
• Если L/R = Vdd, то SPI должен захватывать приходящие данные, используя спад уровня SPIx_SCK.
Если используется протокол I2S, то рекомендуется подключить выбор канала L/R (LR) микрофона к GND. По умолчанию протокол I2S захватывает приходящие данные по фронту I2Sx_CK. Обратите внимание, что блок SPI-V2 также предоставляет возможность конфигурирования перепада захвата для протокола I2S.
Формат данных. Выборки, захватываемые блоком SPI в режиме I2S или SPI, могут быть сохранены в память, используя DMA или сигнализацию прерываний. Регистр приема данных (SPIx_DR) предоставляет часть непрерывного потока бит от микрофона, как показано ниже для 16-битного формата:
M1_bxx представляет биты данных от цифрового микрофона 1, где M1_bN это самый старый бит.
Примечание: порядок следования бит принятых выборок может быть поменян на обратный, если интерфейс запрограммирован на получение первым младшего бита (LSB first) вместо получения первым старшего бита (MSB first). Обычно периферийные устройства поддерживают различные размеры данных, здесь это подробно не рассматривается.
Стерео. С помощью таймера можно подключить 2 цифровых микрофона к блоку SPI. Блок SPI может быть сконфигурирован в режиме SPI или I2S. В обоих случаях блок SPI конфигурируется в режиме master receiver. В этой конфигурации SPI работает на двойной частоте микрофона, чтобы прочитать данные от обоих микрофонов. Это позволяет двум микрофонам использовать общий сигнал данных.
Блок SPI предоставляет такты для встроенного таймера, который делит на 2 частоту тактов последовательного интерфейса (SPIx_SCK или I2Sx_CK). Поделенная частота поступает на цифровые микрофоны. Выборки звука захватываются периферийным устройством I2S через соединенные параллельно выходы данных цифровых микрофонов.
Рис. 12. Подключение двух цифровых микрофонов к блоку SPI в конфигурации стерео.
Примечание: в скобках указано имя сигнала, когда используется протокол I2S.
Использование таймера в качестве генератора тактов. Когда таймер используется для генерации тактов для двух цифровых микрофонов, следует учитывать два момента:
• Приложение должно гарантировать, что задержка, вводимая делением тактов с помощью таймера, все еще попадает в предел времени установки (setup time, TS) выборок, поступающих от микрофонов. Для этого таймер должен использовать максимально возможную высокую тактовую частоту. Максимальная задержка (TD), которую вводит таймер между входными (TIMxCHIN) и выходными (TIMxCHOUT) тактами составляет 5 тактов опорной частоты таймера. Таймеры обычно используют тактовую частоту APB или умноженную частоту APB в качестве своей опорной частоты (см. рис. 13).
• Приложение должно гарантировать, что периферийные устройства, обеспечивающие такты на входе TIMxCHIN, и таймер, используемый для деления, работают от одной и той же опорной частоты тактов. Если не соблюдать это правило, то цифровой микрофон будет получать время от времени такты то с увеличенным, то с уменьшенным периодом. Этот джиттер тактов может снизить качество аналого-цифрового преобразования микрофона.
Рис. 13. Диаграммы времени сигналов режима стерео.
Примечание: Timer Delay (TD) задержка таймера, Setup time (TS) время установки данных, Hold time (TH) время удержания данных.
Формат данных. Выборки, полученные блоком SPI в режиме I2S или SPI, могут быть сохранены в памяти либо с помощью DMA, либо с помощью сигнализации прерываний. В этой конфигурации данные, прочитанные с микрофонов, представляют чередующиеся биты левого и правого каналов. Данные, сохраненные в регистр SPIx_DR в виде чередующегося потока показаны ниже в примере для формата 16 бит:
M1_bxx представляют биты данных цифрового микрофона 1, и M1_bN показывает самый старый бит. M2_bxx представляют биты данных цифрового микрофона 2, и M2_bN показывает самый старый бит.
Блоки SPI-V1 и SPI-V2 предоставляют несколько форматов данных. Например, можно изменить порядок следования поступающих бит, в зависимости от того, как запрограммирован интерфейс – можно запрограммировать, чтобы младший бит поступал первым (LSB first) вместо того, чтобы старший бит поступал первым (MSB first). Однако важно отметить, что в любом случае биты от микрофона 1 (M1) и биты от микрофона 2 (M2) всегда чередуются. Необходим программный модуль, который разбирает это чередование, генерируя отдельный сигнал для каждого из микрофонов, что нужно для последующего преобразования из PDM в PCM.
[Интерфейс SAI]
Интерфейс SAI (расшифровывается как Serial Audio Interface), встроенный в STM32, предоставляет микроконтроллеру возможность обмениваться данными с внешними звуковыми устройствами, такими как усилители, микрофоны, динамики или аудиопроцессоры. SAI состоит из двух независимых субблоков, которые могут работать синхронно или не синхронно. Каждый субблок предоставляет свой собственный генератор тактов звука. Некоторые SAI также предоставляют выделенный интерфейс PDM, который может поддерживать до 8 цифровых микрофонов.
Использование одного субблока в конфигурации моно. Цифровой микрофон подключен к одному из субблоков периферии SAI в конфигурации моно. Субблок SAI сконфигурирован в режиме в режиме master receive. В этой конфигурации субблок SAI предоставляет такты для цифрового микрофона. Выборки звука, захваченные субблоком SAI с выхода цифрового микрофона (DOUT) через вывод последовательных данных (Serial Data, SD).
Рис. 14. Подключение цифрового микрофона через SAI в конфигурации моно.
Примечание (1): x обозначает субблок A или B.
Ножка выбор L/R канала (LR) микрофона может быть подключена либо к Vdd, либо к GND. Микрофон выводит данные по фронту или спаду поступающих тактов в зависимости от выбранного канала. Перепад выборки тактов SAI должен быть сконфигурирован соответствующим образом.
Примечание: другой субблок SAI полностью независим, и может использоваться для другой цели. Например, его можно подключить в внешнему аудиокодеку.
Формат данных. Выборки, захваченные субблоком SAI, могут быть сохранены в памяти с использованием либо DMA, либо сигнализации прерываний. Регистр прима данных (SAI_ADR, SAI_BDR) предоставляет часть непрерывного потока бит от микрофона, наподобие показанного ниже:
M1_bxx представляет биты данных от цифрового микрофона 1, и M1_bN представляет позицию самого старого бита в регистрах SAI_ADR и SAI_BDR. Например, если биты DS[2:0] установлены в 010 (8 бит), то k равно 7.
Разрядность данных, сохраненных в регистры SAI_ADR/SAI_BDR, зависит от размера данных (DS[2:0]), в дополнение к битам SLOTSZ[1:0], которые должны быть установлены в 0.
Обратите внимание, что порядок бит принимаемых выборок может быть поменян на обратный, если запрограммировать в интерфейсе получение первыми младших бит (LSB first) вместо получения первыми старших бит (MSB first).
Примечание: данные в регистрах SAI_ADR/SAI_BDR всегда выровнены вправо.
Конфигурация стерео. Два цифровых микрофона могут быть подключены к одному из субблоков SAI с помощью внутреннего таймера. Субблок SAI также конфигурируется в режиме master receiver. В этой конфигурации субблок SAI работает на двойной частоте тактов микрофона, чтобы прочитать данные от обоих микрофонов, по одному и тому же перепаду их тактов. Это позволяет совместно использовать один сигнал данных для двух микрофонов (см. рис. 15).
Субблок SAI предоставляет такты (SAI_SCK_x) для встроенного таймера, который делит частоту на 2. Поделенная частота тактов поступает на цифровые микрофоны.
Примечание: другой субблок SAI полностью независим, и может использоваться для другой цели. Например, его можно подключить в внешнему аудиокодеку.
Диаграмма времени, показанная на рис. 13, также соответствует этому случаю подключения. Также см. выше секцию “Использование таймера в качестве генератора тактов” для рекомендаций по использованию таймера.
Рис. 15. Подключение двух цифровых микрофонов к SAI в конфигурации стерео при использовании одного субблока SAI и таймера.
Примечание (1): x обозначает субблок A или B.
Формат данных. Выборки, захваченные субблоком SAI, могут быть сохранены в память с использованием либо DMA, либо сигнализации прерываний. В этой конфигурации биты данных, прочитанные из микрофонов, чередуются друг за другом – бит одного микрофона, бит другого, и так далее. Данные в регистре SAI_ADR/SAI_BDR, как показано в примере ниже:
M1_bxx представляют биты данных от микрофона 1, и M1_bN представляет самый старый бит. M2_bxx представляют биты данных от микрофона 2, и M2_bN представляет самый старый бит. Символ k обозначает позицию бита в регистре SAI_ADR/SAI_BDR, например если DS[2:0] установлены в 100 (16 бит), то k равно 15. Размер данных, сохраненных в регистры SAI_ADR/SAI_BDR, зависит от программирования размера данных (DS[2:0]), дополнительно биты SLOTSZ[1:0] должны быть установлены в 0.
Примечание: порядок следования бит принятых выборок может быть поменян на обратный, если интерфейс запрограммирован на получение первым младшего бита (LSB first) вместо получения первым старшего бита (MSB first). Однако следует отметить что в любом случае поступающие биты от микрофонов сохраняются с чередованием. Данные в регистрах SAI_ADR/SAI_BDR всегда выровнены вправо. Необходим программный модуль, который разбирает это чередование, генерируя отдельный сигнал для каждого из микрофонов, что нужно для последующего преобразования из PDM в PCM.
Использование двух синхронных субблока SAI. К периферии SAI могут быть подключены два цифровых микрофона с использованием встроенного таймера и синхронно работающих двух субблоков SAI. Каждый микрофон подключен к отдельному субблоку SAI. Один из субблоков SAI сконфигурирован в режиме master receive, в то время как другой субблок сконфигурирован в синхронном режиме slave receive. В этой конфигурации субблок, сконфигурированный в режиме master, предоставляет тактовую частоту как для цифровых микрофонов, так и для другого субблока SAI. Два субблока SAI синхронно считывают даных от микрофонов.
Рис. 16. Подключение двух цифровых микрофонов к SAI в конфигурации стерео, когда задействовано два синхронных субблока SAI.
Поскольку два микрофона не используют общую линию данных, ножка выбора канала L/R (LR) микрофона может быть подключена либо к Vdd, либо к GND. Выходные данные микрофонов захватываются либо по фронту, либо по спаду тактов, в зависимости от выбранного канала. Полярность тактов каждого субблока SAI должна быть сконфигурирована соответствующим образом.
Формат данных. Выборки, захваченные каждым субблоком SAI, могут быть сохранены в память либо с использованием DMA, либо по сигнализации прерываний. В этом случае запрашивается использование до 2 каналов DMA. Для каждого из субблоков используется такой же формат данных, который был описан в моно-конфигурации SAI.
Использование интерфейса PDM. Интерфейс PDM предоставляется для поддержки цифровых микрофонов. До 4 пар цифровых микрофонов можно подключить параллельно. Интерфейс PDM также предоставляет линии задержки, чтобы выполнить микрозадержки в каждом поступающем битовом потоке, что упрощает приложению формирование луча. Глубина каждой ячейки задержки составляет 8 выборок цифрового потока.
Функция PDM предназначена для использования совместно с субблоком SAI_A, сконфигурированном в master-режиме Time Division Multiplexing (TDM). Это не может использоваться с субблоком SAI_B.
Для уменьшения расхода памяти пользователь может выбрать количество микрофонов, которое требуется приложению. Можно выбрать 2, 4, 6 или 8 микрофона.
Например, если приложение использует 3 микрофона, то пользователь должен выбрать 4. В этом случае данные PDM захватывают через SAI_D1 и SAI_D2. SAI_D1 принимает данные от первой пары микрофонов, в то время как SAI_D2 принимает данные от третьего микрофона.
Таблица 5 показывает рекомендуемое количество линий IO в зависимости от количества подключенных цифровых микрофонов.
Таблица 5. Количество линий IO в зависимости от количества подключенных цифровых микрофонах.
Микрофонов | Рекомендуемые линии данных | Рекомендуемые линии тактов |
1 или 2 | SAI_D1 | SAI_CK1, SAI_CK2, SAI_CK3 или SAI_CK4 |
3 или 4 | SAI_D1 и SAI_D2 | |
5 или 6 | SAI_D1, SAI_D2 и SAI_D3 | |
7 или 8 | SAI_D1, SAI_D2, SAI_D3 и SAI_D4 |
Микрофоны могут тактироваться от одного и того же тактового сигнала SAI_CKx (x=0…3) или отдельно от разных SAI_CK, давая пользователю гибкость в разрешении или запрете получения аудио от отдельных микрофонов, в зависимости от приложения.
SAI работает на выбранном количестве микрофонов (2, 4, 6 или 8), кратном частоте микрофона, чтобы иметь возможность считывания данных со всех микрофонов в приложении.
Рис. 17. Возможности интерфейса PDM по подключению до 4 пар микрофонов.
Интерфейс PDM интерфейса SAI предоставляет оптимальное подключение к цифровому микрофону, с максимальной экономией линий IO, насколько это возможно. Дополнительно интерфейс PDM может побайтно разделить данные каждого микрофона, избавляя от операции удаления чередования бит.
Формат данных. Выборки, захватываемые субблоком SAI_A, могут быть сохранены в память с помощью одного канала DMA или по сигнализации прерываний. Регистр принимаемых данных (SAI_ADR) предоставляет 8 следующих друг за другом бит, как показано ниже:
Рис. 18. Формат данных при использовании интерфейса SAI PDM с размером слота 32 бита и 8 микрофонами.
Размер данных, сохраненных в SAI_ADR, зависит от программирования нескольких параметров SAI, см. руководство пользователя SAI для получения дополнительной информации о формате данных, когда используется интерфейс PDM.
Обратите внимание, что если размер слота установлен на 8 бит, то SAI_ADR содержит только байт данных от одного микрофона. SAI_ADR должен быть прочитан 8 раз для получения одного бата от 8 микрофонов.
Рис. 19. Формат данных при использовании интерфейса SAI PDM с размером слота 8 бит и 8 микрофонами.
[Интерфейс DFSDM]
DFSDM расшифровывается как Digital Filter for Sigma Delta Modulators, цифровой фильтр для сигма-дельта модуляторов, это цифровое периферийное устройство в STM32. Оно работает как стандартный ADC с масштабируемым скоростью/разрешением и внешним аналоговым фронт-эндом.
Цифровые MEMS-микрофоны предоставляют выходные данные в формате PDM, которые могут быть напрямую направлены в DFSDM. DFSDM предоставляет отфильтрованные и прошедшие децимацию выборки. Каждый фильтр имеет свой собственный канал DMA, вследствие чего выборки каждого канала разделяются. Это позволяет приложению избежать тяжелой нагрузки операций фильтрации и удаления чередования бит. И наконец некоторые блоки DFSDM предоставляют линии задержки, чтобы выполнить микрозадержки в каждом приходящем битовом потоке, что упрощает приложению формирование луча. Глубина каждой линии задержки равна как минимум коэффициенту децимации.
Можно подключить несколько цифровых микрофонов к одному DFSDM. Это зависит от количества интегрированных фильтров и количества интерфейсов.
DFSDM предоставляет тактовый выходной сигнал (DFSDM_CKOUT) для управления цифровыми микрофонами. У тактового выхода есть настраиваемый коэффициент деления. DFSDM_CKOUT может быть выведен на различные IO, давая пользователю гибкость при разрешении или запрете захвата звука от различных микрофонов, в зависимости от приложения. Конфигурация показана на рис. 20, DFSDM интерфейс с 4 цифровыми микрофонами, что обычно использует в приложениях с низким потреблением энергии: цифровой микрофон M1 может работать, в то время как другие переключаются в режим пониженного потребления энергии, поскольку они не тактируются. Чтобы сохранить больше энергии, также можно выключить M3 и M4.
Когда нужно активировать все микрофоны, одна и та же тактовая частота подается на все микрофоны через два разных вывода (PAD).
Рис. 20. Возможность DFSDM для подключения до 4 цифровых микрофонов.
Конфигурация стерео. Два цифровых микрофона подключаются к DFSDM в конфигурации стерео. DFSDM должен активизировать два соседних канала, управляемых внутренним тактовым сигналом. Периферийное устройство DFSDM предоставляет внешний тактовый сигнал (DFSDM_CKOUT) для подачи на цифровые микрофоны. В этой конфигурации DFSDM программируется так, чтобы позволить каналам x и x-1 принимать данные от вывода DFSDM_DATINx. Каждый канал читает данные на разных перепадах тактов, позволяя двум микрофонам использовать одну линию данных. Затем каждый канал перенаправляет захваченные данные на различные фильтры DFSDM для обработки.
Рис. 21. Конфигурация стерео.
Примечания:
1. x может быть от 1 до n, где n это количество каналов в DFSDM.
2. y может быть от 1 до m, где m это количество фильтров в DFSDM.
Формат данных. Данные, захваченные каждым цифровым фильтром, могут быть сохранены в память с использованием выделенного канала DMA или с использованием сигнализации прерываний. Здесь нет чередования, каждый фильтр предоставляет преобразованные выборки одного микрофона. Количество запрашиваемых каналов DMA равно количеству активированных цифровых фильтров.
[Тактирование]
Такты цифрового микрофона. Такты, предоставленные для цифрового микрофона, должны выполнять несколько функций:
• Когда такты отсутствуют, или имеют очень низкую частоту (см. даташит на используемый микрофон), то цифровой микрофон переключается в режим низкого энергопотребления.
• Когда тактовая частота низкая (обычно между 400 и 800 кГц), микрофон работает в режиме пониженного потребления. Это означае, что происходит незначительное ухудшение его рабочих характеристик, чтобы максимально снизить энергопотребление. Эта функция недоступна для всех микрофонов. Такты должны быть максимально чистые, с малым джиттером.
• И наконец, когда тактовая частота высокая (примерно от 1 до 4.8 МГц), микрофон работает в своем номинальном режиме. Такты также должны быть чистыми насколько это возможно, с минимальным джиттером. Имейте в виду, что допустимый диапазон частот тактов зависит от используемого микрофона, см. его даташит.
Следует также отметить, что когда цифровой микрофон только что вышел из режима пониженной потребляемой мощности из-за того, что его тактовый сигнал становится активным или находится в обнаруженном частотном диапазоне, требуется несколько миллисекунд времени, прежде чем микрофон предоставит выборки с ожидаемым качеством.
В таблице 6 показаны некоторые примеры приложений и связанные с ними тактовые частоты микрофона.
Таблица 6. Примеры приложений и соответствующие тактовые частоты микрофона.
Вариант использования | Тактовая частота для цифрового микрофона |
Захват звука | От 400 до 800 кГц |
Обработка голоса | От 1 до 1.5 МГц |
Высококачественный звук | От 2.4 до 4.8 МГц |
Тактирование периферийных устройств. Чтобы выбрать реализацию, приложение должно также учитывать возможности тактирования, которые микроконтроллер предоставляет для SPI, SAI или DFSDM. Также важно проверить возможности тактового генератора, встроенного в SPI, SAI и DFSDM.
Обычно блоки звуковых периферийных устройств имеют два тактовых входа:
• Такты, используемые для регистрового интерфейса управления (наподобие тактов шины APB).
• Такты, используемые для генерации тайминга последовательного интерфейса, которые называются тактами ядра.
В соответствии с выбранным периферийным устройством и протоколом генератор тактов периферийного устройства использует интерфейс шины или выделенные опорные такты. Например, SPI-V1 использует такты APB в качестве опорных, если используется протокол SPI, в то время как протокол I2S использует такты I2S.
Управление частотой APB обычно не такое гибкое, как выделенные такты. Одна из причин в том, что такты APB влияют на все периферийные устройства, подключенные к этой шине APB. Однако в случае, когда для поддержки стереофонической конфигурации микрофонов используется таймер (наподобие таких же тактов, как и у таймера), решается одна из проблем, перечисленных выше в секции “Использование таймера в качестве генератора тактов”.
Некоторые микроконтроллеры также имеют возможность предоставить копию тактов APB в качестве тактов ядра.
Рис. 22. Топология тактирования шины и ядра для SPI.
Другие периферийные устройства (SPI-V2, SAI и DFSDM) всегда предоставляют выделенные такты ядра для реализации тактирования. Эта опция более гибкая, и делает желаемую тактовую частоту независимой от частоты интерфейса шины.
Рис. 23. Топология тактирования шины и ядра для SAI и DFSDM.
Примечание: DFSDM предоставляет возможность выбрать либо независимые такты периферии (тактирование звука), либо выбрать такты DFSDM, которые синхронны с частотой тактов APB.
[Использование GPIO]
Эта секция поможет пользователю выбрать наиболее подходящее периферийное устройство STM32 (SPI, I2S, SAI, DFSDM) для подключения цифровых микрофонов в определенном приложении, в соответствии с количеством используемых ножек GPIO.
Таблицы 7, 8 и 9 показывают аппаратуру, используемую для подключения соответственно одного, двух и четырех цифровых микрофонов к различным звуковым и последовательным интерфейсам.
• Столбец “Количество GPIO” показывает количество ножек GPIO, необходимых для подключения цифровых микрофонов к звуковому интерфейсу.
• Столбец “Таймер” показывает, нужен ли аудиоинтерфейсу таймер для формирования подходящих тактов для микрофонов.
Таблица 7. Аппаратура, используемая для подключения одного цифрового микрофона.
Интерфейс | Количество GPIO | Таймер |
SPI | 2 | Нет |
I2S | 2 | Нет |
SAI | 2 | Нет |
DFSDM | 2 | Нет |
Таблица 8. Аппаратура, используемая для подключения двух цифровых микрофонов.
Интерфейс | Количество GPIO | Таймер |
SPI | 4 | Да |
I2S | 4 | Да |
SAI | 4 | Да |
SAI (два синхронных субблока) | 4 | Нет |
SAI с интерфейсом PDM | 2 | Нет |
DFSDM | 2 | Нет |
Таблица 9. Аппаратура, используемая для подключения четырех цифровых микрофонов.
Интерфейс | Количество GPIO | Таймер |
SAI (два синхронных субблока) | 6 | Да |
SAI с интерфейсом PDM | 3 | Нет |
DFSDM | 3 | Нет |
[Цифровая обработка сигнала]
В этой секции представлены 2 способа преобразования данных PDM в данные PCM. Первый способ программный, когда используется специальная библиотека декодирования звука PDM, и второй способ аппаратный, использующий фильтры DFSDM.
Программная библиотека декодирования PDM. Библиотека декодирования звука PDM это оптимизированное программное обеспечение для реализации декодирования PDM и реконструкции сигнала, когда к STM32 подключаются MEMS-микрофоны. В этой библиотеке реализовано несколько фильтров для 1-битного высокочастотного выходного сигнала PDM цифрового микрофона, и есть преобразование этого сигнала в стандартный 16-битный формат PCM на правильной частоте выборок звука.
Как уже упоминалось, цифровой MEMS-микрофон выводит сигнал PDM, который представляет собой высокочастотный (от 1 до 3.25 МГц) поток 1-битных цифровых выборок. Данные PDM захватываются последовательным интерфейсом, встроенным в STM32. Эти данные перемещаются через DMA (что снижает вычислительную нагрузку) в системный буфер RAM для обработки. После преобразования сырые данные PCM могут быть обработаны в зависимости от приложения (сохранены как WAV/сжатые данные на носитель данных, переданы на внешний аудио кодек DAC).
Рис. 24. Блок-схема захвата цифровых данных и их обработки.
Библиотека декодирования звука PDM предоставляет 2 шага цифровой обработки сигнала: цифровой фильтр PDM и децимация, а также кондиционирование цифрового сигнала.
Рис. 25. Цифровая обработка сигнала.
На первом шаге сигнал PDM от микрофона фильтруется и децимируется, чтобы получить звуковой сигнал нужной частоты выборок и нужного разрешения.
На втором шаге цифровой звуковой сигнал, вышедший из предыдущего конвейера фильтра, дополнительно обрабатывается до нужной кондиции реализацией ФНЧ и ФВЧ. Оба этих фильтра могут быть разрешены/запрещены и сконфигурированы (по частотам среза) с использованием функции инициализации фильтра.
Примечание: в конфигурации стерео, если 2 микрофона используют общий сигнал данных, то в результате от микрофонов получаются данные PDM с чередованием. Поэтому программа выполняет дополнительный шаг удаления чередования, что необходимо для разделения данных двух микрофонов перед выполнением преобразования PDM в PCM.
Фильтры DFSDM для цифровой обработки сигнала. Цифровой MEMS-микрофон выводит сигнал PDM, который представляет собой высокочастотный (от 1 до 3.25 МГц) поток 1-битных цифровых выборок. Данные захватываются последовательным трансивером DFSDM, который предоставляет соединение с внешним Sigma-Delta модулятором цифрового микрофона. Цифровые фильтры выполняют аппаратную фильтрацию (не нагружая CPU), которая усредняет 1-битный входной поток данных от модулятора SD в поток данных более высокого разрешения и более низкой частоты дискретизации (получаются сырые данные PCM). Эти данные перемещаются через DMA (что снижает вычислительную нагрузку) в системный буфер RAM для последующей фильтрации. После этого сырые данные PCM могут быть обработаны в зависимости от приложения (сохранены как WAW/сжатые данные на носитель данных, переданы на внешний аудио кодек DAC).
Рис. 26. Блок-схема захвата цифровых данных и их обработки с использованием DFSDM.
[Примеры конфигураций, основанных на STM32CubeMX]
В этой секции показано выполнение различных шагов, необходимых для создания базового звукового приложения, которое захватывает данные PDM с цифровых микрофонов в режимах моно или стерео, и затем преобразует их в данные PCM.
Основные шаги состоят в выборе правильной конфигурации аппаратуры и генерации кода инициализации на языке C, используя утилиту STM32CubeMX. На втором шаге добавляется соответствующий код пользователя к сгенерированному проекту. В завершении дается ссылка на пакет примеров STM32Cube_FW звуковых приложений, и на пакетт X-CUBE-MEMSMIC1 для завершения построения необходимого кода пользователя каждого примера.
В этой секции подразумевается следующее:
• Пользователю нужно получить данные PCM с частотой дискретизации 16 или 48 кГц.
• Цифровой микрофон принимает частоту тактов в 64 раза выше, чем частота дискретизации потока PCM (передискретизация на 64).
Этот пример основан реализован на плате разработчика NUCLEO-F413ZH, и использует внешние цифровые микрофоны, подключенные через I2S, SPI или SAI.
Чтобы получить данные PCM с частотой дискретизации 16 кГц, частота тактов микрофона, генерируемая интерфейсом, должна быть 1.024 МГц для режима моно и 2.048 МГц для режима стерео. Чтобы получить данные PCM с частотой дискретизации 48 кГц, частота тактов микрофона, генерируемая интерфейсом, должна быть 3.072 МГц для режима моно и 6.144 МГц для режима стерео.
[Конфигурация I2S, выполненная с использованием STM32CubeMX]
Конфигурация GPIO и аппаратных выводов. Из перечисленного оборудования на закладке Pinout выберите периферийное устройство I2S2, и сконфигурируйте его в режиме Half-duplex master. Рис. 27 показывает, как это делается.
Рис. 27. Конфигурация ножек GPIO для интерфейса I2S.
Разрешенные ножки I2S2_SD, I2S2_CK и I2S2_WS, выделяются зеленым цветом, как только GPIO периферии I2S корректно сконфигурированы.
Примечание: в этом примере ножка I2S2_WS не используется. Она может быть освобождена и превращена в обычный порт GPIO для выполнения других функций, что делается путем небольшой модификации кода в файле инициализации MSP (stm32f4xx_hal_msp.c) после завершения генерации проекта.
Конфигурация тактирования. Здесь описываются различные конфигурации тактов I2S в режимах моно и стерео для потоков PCM с частотой дискретизации 16 кГц и 48 кГц. В качестве базового источника тактирования используется кварц HSE = 8 МГц.
В режиме стерео таймер и I2S должны использовать такты от одного и того же источника, по этой причине PLLR выбран как источник тактов для I2S.
Примечание: в столбце “Точность (ppm)” таблицы 10 приведена ошибка, показывающая разницу между ожидаемой частотой выборок звука и реальной частотой. Единица ppm показывает, сколько значений приходится на миллион (ppm расшифровывается Parts Per Million).
Таблица 10. Конфигурация тактов I2S2 и соответствующая точность полученной частоты дискретизации.
Целевая частота выборок | Режим микрофона | Источник тактов мультиплексора I2S_APB1 | DivM | PLLN | DivR | DivP | Такты I2S (МГц)(1) | Точность (ppm) |
16 кГц | Моно | PLLI2SR | 5 | 192 | 2 | – | 153.60 | 0 |
PLLI2SR | 5 | 192 | 5 | – | 61.44 | 0 | ||
Стерео (с таймером) | PLLR | 7 | 344 | 6 | 4 | 65.52 | -186 | |
48 кГц | Моно | PLLI2SR | 5 | 192 | 2 | – | 153.60 | 0 |
PLLI2SR | 5 | 192 | 5 | – | 61.44 | 0 | ||
Стерео (с таймером) | PLLR | 7 | 344 | 4 | 4 | 98.29 | -186 |
Примечание (1): чтобы все работало правильно, тактовая частота I2S должна быть выше, чем его частота APB.
Рис. 28 показывает пример конфигурации тактирования I2S в режиме моно.
Рис. 28. Конфигурация тактов I2S, созданная утилитой STM32CubeMX.
Конфигурация I2S. Выберите закладку конфигурации (Configuration), и затем кликните на кнопку I2S2, как показано на рис. 29.
Рис. 29. Конфигурация I2S.
a) Установка параметров I2S.
В окне конфигурации I2S выберите закладку установки параметров (Parameter Settings) и сконфигурируйте параметры I2S следующим образом:
• Selected Audio Frequency (выбранная частота дискретизации звука) = AUDIO_SAMPLING_FREQUENCY
• Communication Standard = MSB First (Left Justified): I2S считывает данные по спаду уровня тактов. В конфигурации моно ножка LR (L/R) микрофона должна быть соединена с GND.
Рис. 30 показывает пример настройки конфигурации I2S для Audio Sampling Frequency = 16 кГц в режиме моно.
Рис. 30. Установка параметров I2S.
b) Конфигурация I2S DMA.
В этом примере DMA обрабатывает перемещение данных PDM от I2S в память. В окне конфигурации I2S выберите закладку DMA Settings и добавьте запрос DMA (DMA Request). Рис. 31 показывает, как разрешить DMA.
Рис. 31. Настройка I2S DMA.
Чтобы завершить конфигурирование DMA, кликните на только что созданный запрос DMA, и выполните указания из врезки “Настройка запроса DMA”, где приведено описание настройки DMA.
[Конфигурация SPI, выполненная с использованием STM32CubeMX]
Из аппаратных периферийных устройств, перечисленных на закладке Pinout, выберите периферию SPI1 и сконфигурируйте её в режиме Receive Only Master. Рис. 32 показывает, как это делается. Разрешенные выводы SPI1_SCK и SPI1_MISO будут выделены зеленым, когда правильно сконфигурированы ножки GPIO, работающие в режиме аппаратуры SPI.
Рис. 32. Конфигурация ножек GPIO, работающих в режиме SPI.
Конфигурация тактирования. Здесь описываются различные конфигурации тактов SPI в режимах моно и стерео для потоков PCM с частотой дискретизации 16 кГц и 48 кГц. В качестве базового источника тактирования используется кварц HSE = 8 МГц. SPI тактируется от частоты шины APB2.
Таблица 11. Конфигурации тактирования SPI и соответствующая точность полученной частоты выборок.
Целевая частота выборок | Режим микрофона | DivM | PLLN | DivR | DivP | Такты SPI (МГц) |
Точность (ppm) |
16 кГц | Моно | 7 | 344 | – | 6 | 65.52 | -186 |
Стерео (с таймером) | 7 | 344 | – | 6 | 65.52 | -186 | |
48 кГц | Моно | 7 | 344 | – | 4 | 98.29 | -186 |
Стерео (с таймером) | 7 | 344 | – | 4 | 98.29 | -186 |
Рис. 33 показывает пример конфигурации тактов SPI в режиме моно.
Рис. 33. Конфигурация тактов SPI, созданная утилитой STM32CubeMX.
Конфигурация SPI. Выберите закладку конфигурации (Configuration), затем кликните на кнопку SPI, как показано на рис. 34.
Рис. 34. Конфигурация SPI.
a) Установка параметров SPI.
В окне конфигурации SPI выберите закладку установки параметров (Parameter Settings) и сконфигурируйте параметры SPI.
В режиме моно полярность тактов Clock Polarity (CPOL) и фаза тактов Clock Phase (CPHA) выбираются в соответствии с состоянием ножки L/R (LR) микрофона.
Рис. 35 показывает пример конфигурации SPI для Audio Frequency = 16 кГц в режиме моно.
Рис. 35. Установка параметров SPI.
b) Конфигурация SPI DMA.
В этом примере DMA обрабатывает перемещение данных PDM от SPI в память. В окне конфигурации SPI выберите закладку DMA Settings и добавьте запрос DMA (DMA Request). Рис. 36 показывает, как разрешить DMA.
Рис. 36. Настройка I2S DMA.
Чтобы завершить конфигурирование DMA, кликните на только что созданный запрос DMA, и выполните указания из врезки “Настройка запроса DMA”, где приведено описание настройки DMA.
[Конфигурация SAI, выполненная с использованием STM32CubeMX]
Конфигурация GPIO и аппаратных выводов. Из перечисленного оборудования на закладке Pinout выберите периферийное устройство SAI1, и разрешите его субблок A в режиме Master. Рис. 37 показывает, как это делается. Разрешенные выводы SAI1_SD_A, SAI1_SCK_A и SAI1_FS_A будут выделены зеленым, когда правильно сконфигурированы ножки GPIO, работающие в режиме аппаратуры SAI.
Рис. 37. Конфигурация ножек GPIO, работающих в аппаратном режиме SAI.
Примечание: в этом примере ножка SAI1FS_A не может использоваться. При необходимости она освобождается и превращается обратно в обычный вывод порта GPIO путем незначительной модификации кода в файле инициализации MSP (stm32f4xx_hal_msp.c) после того, как будет сгенерирован проект.
Конфигурация тактов. Закладка Clock Configuration устанавливает тактовую частоту SAI. Таблица 12 предоставляет значения точности установки частоты выборок звука для разных вариантов конфигурирования тактов. В качестве источника тактов SAI используется PLLI2SR.
Таблица 12. Конфигурации тактов и соответствующая точность установки частоты выборок звука.
Целевая частота выборок | Режим микрофона | DivM | PLLN | DivR | DivP | Такты SAI (МГц) |
Точность (ppm) |
16 кГц | Моно | 5 | 128 | 5 | 6 | 40.96 | 0 |
Стерео (с таймером) | 5 | 128 | 5 | 6 | 40.96 | 0 | |
48 кГц | Моно | 5 | 192 | 25 | 4 | 12.29 | 0 |
Стерео (с таймером) | 5 | 192 | 25 | 4 | 12.29 | 0 |
Рис. 38 показывает пример конфигурирования тактов SAI.
Рис. 38. Конфигурация тактов SAI на частоте выборок 16 кГц для режима моно.
Конфигурация SAI. Выберите закладку конфигурации (Configuration) и кликните на кнопку SAI1, как показано на рис. 39.
Рис. 39. Конфигурация SAI.
a) Установка параметров SAI.
В окне конфигурации SAI выберите закладку Parameter Settings и сконфигурируйте параметры. Разрешенный субблок SAI конфигурируется следующим образом:
• Data Size = 16 Bits
• Output Mode = Stereo (этот параметр устанавливается одинаково, независимо от того, сколько подключено микрофонов к SAI, один или два)
• Companding Mode = No companding mode
• Frame Synchro definition = Channel Identification
• Number of Slots = 4
• Slot Active = All
• Frame Synchro Active Length = Frame Length / 2
• Master Clock Divider = Enabled (другое возможное решение: Master Clock Divider = Disabled)
• Audio Frequency = Audio Sampling Frequency
• В режиме моно Clock Strobing выбирается в зависимости от состояния вывода L/R (LR) микрофона.
Рис. 40 показывает пример конфигурации SAI для Audio Frequency = 16 кГц в режиме моно.
Рис. 40. Настройка параметров SAI.
b) Конфигурация SAI DMA.
В этом примере DMA обрабатывает перемещение данных PDM от SPI в память. В окне конфигурации SAI выберите закладку DMA Settings и добавьте запрос DMA (DMA Request). Рис. 41 показывает, как разрешить DMA.
Рис. 41. Настройка SAI DMA.
Чтобы завершить конфигурирование DMA, кликните на только что созданный запрос DMA, и выполните указания из врезки “Настройка запроса DMA”, где приведено описание настройки DMA.
[Таймер]
В режиме стерео таймер используется для деления тактовой частоты, генерируемой аудиоинтерфейсом, и передачи поделенной частоты на цифровые микрофоны.
Конфигурация GPIO и аппаратных выводов. На закладке Pinout выберите таймер 3 (TIM3) из перечисленных аппаратных периферийных устройств, и разрешите режим slave путем выбора External Clock Mode 1. Выберите TI1FP1 в качестве источника для триггера таймера (Trigger Source) и разрешите Channel 2 в PWM Generation Ch3. Рис. 43 показывает, как разрешить TIM3. Используемые выводы TIM3_Ch2 и TIM3_Ch3 подсвечиваются зеленым, как только были корректно сконфигурированы ножки GPIO, привязанные к аппаратным функциям таймера TIM3.
Рис. 43. Конфигурация ножек GPIO таймера.
Конфигурация таймера. Выберите закладку конфигурации (Configuration) и кликните на кнопку TIM3, как показано на рис. 44.
Рис. 44. Конфигурация таймера.
Установка параметров таймера. В окне конфигурации TIM3 выберите закладку Parameter Settings. Рис. 45 показывает, как сконфигурировать TIM3 для деления на 2 частоты тактов Trigger Source.
Рис. 45. Настройка параметров таймера.
Добавление библиотечных модулей декодирования PDM. См. врезку “Добавление библиотечных модулей декодирования PDM”.
Рис. 42 показывает конфигурацию запроса DMA для каждого из звуковых интерфейсов.
Рис. 42. Настройки запроса DMA.
Выберите используемую среду разработки, сгенерируйте проект с помощью STM32CubeMX и откройте в среде разработки сгенерированный проект.
Для STM32F413xx MCU библиотека декодирования звука PDM включает один файл заголовка pdm_filter.h и двоичные/объектные коды для следующих платформ:
• libPDMFilter_CM4F_IAR.a: для компилятора среды разработки IAR.
• libPDMFilter_CM4F_Keil.lib: для компилятора ARM.
• libPDMFilter_CM4F_GCC.a: для компилятора GNU.
Эта библиотека предоставляется в пакете STM32Cube_FW_F4 компании ST (начиная с версии V1.16), и она находится в каталоге Middlewares\ST\STM32_Audio\Addons\PDM. Убедитесь, что заголовочный файл pdm_filter.h находится среди путей поиска заголовочных файлов проекта (Include Paths) и также в проект добавлен соответствующий двоичный библиотечный файл.
Этот пример также основан на плате NUCLEO-F413ZH, и использует 2 внешних цифровых микрофона, каждый из которых подключен к отдельному субблоку SAI. Это один из допустимых вариантов аппаратного соединения, описанного выше в секции “Использование двух синхронных субблока SAI”.
[Конфигурация SAI, выполненная с использованием STM32CubeMX]
Конфигурация GPIO и аппаратных выводов. После создания проекта STM32CubeMX выберите периферийное устройство SAI1 среди перечисленных на закладке Pinout периферийных устройств, сконфигурируйте субблок A в режиме Master и субблок B в режиме Synchronous Slave. Рис. 46 показывает, как это делается. Для этого случая сигнал тактов бит и синхронизации фрейма используются общими для двух субблоков, чтобы снизить количество внешних выводов для коммуникации с микрофонами. Разрешенные выводы SAI1_SD_A, SAI1_SD_B, SAI1_SCK_A и SAI1_FS_A подсвечиваются зеленым, как только были корректно сконфигурированы ножки GPIO, привязанные к аппаратным функциям SAI.
Рис. 46. Конфигурация ножек GPIO аппаратуры SAI.
Конфигурация тактов. Здесь описывается конфигурация тактов SAI с использованием двух синхронных субблоков для генерации потоков с частотой выборок 16 кГц и 48 кГц. Для получения выходных данных с частотой выборок 16 кГц частота тактов SAI должна быть 1.024 МГц. Для получения выходных данных с частотой выборок 48 кГц частота тактов SAI должна быть 3.072 МГц. В качестве источника тактов используется PLLI2SR. Чтобы получить точную частоту бит, необходимо соответствующим образом сконфигурировать MCKIDV.
Таблица 13. Конфигурация тактов SAI и соответствующая точность частоты выборок.
Целевая частота выборок | DivM | PLLN | DivR | Такты SAI (МГц) |
Точность (ppm) |
16 кГц | 5 | 128 | 5 | 40.96 | 0 |
48 кГц | 5 | 192 | 25 | 12.29 | 0 |
Рис. 47 показывает конфигурацию тактов SAI, используемую в этом примере.
Рис. 47. Конфигурация тактов SAI.
Установка параметров. В окне конфигурации SAI выберите закладку Parameter Settings и сконфигурируйте параметры. Субблоки SAI должны быть сконфигурированы следующим образом:
• Data Size = 16 Bits
• Frame Length = 4 x Data Size
• Output Mode = Stereo
• Companding Mode = No companding mode
• Frame Synchro definition = Channel Identification
• Number of Slots = 4
• Slot Active = All
• Frame Synchro Active Length = Frame Length / 2
• Master Clock Divider = Enabled
• Audio Frequency = AUDIO_SAMPLING_FREQUENCY
Параметр Clock Strobing выбирается в соответствии с состояние вывода L/R (LR) микрофона, подключенного к каждому субблоку. Рисунки 48 и 49 показывают как конфигурировать соответственно субблоки SAIA и SAIB для получения частоты выборок звука (audio sampling frequency) 16 кГц.
Рис. 48. Настройка параметров SAIA.
Рис. 49. Настройка параметров SAIB.
Установка параметров DMA. В этом примере DMA обрабатывает перемещение данных PDM в память, поступающих от каждого субблока SAI. В окне конфигурации SAI выберите закладку DMA Settings и добавьте запрос DMA (DMA Request) для каждого субблока. Рис. 50 показывет, как разрешить DMA.
Рис. 50. Настройка DMA для субблоков SAI.
Для завершения настройки кликните на только что созданные запросы DMA и выполните указания из врезки “Настройка запроса DMA”, где приведено описание настройки DMA.
Добавление библиотечных модулей декодирования PDM. См. врезку “Добавление библиотечных модулей декодирования PDM”.
Этот пример основан на плате NUCLEO-H743ZI и использует 2 цифровых микрофона, подключенных в режиме стерео к SAI через интерфейс PDM.
[Конфигурация SAI, выполненная с использованием STM32CubeMX]
Конфигурация GPIO и аппаратных выводов. После создания проекта STM32CubeMX выберите периферийное устройство SAI1 среди перечисленных на закладке Pinout периферийных устройств, и сконфигурируйте его в режиме Pulse Density Modulation. Выберите количество микрофонов и выходную тактовую частоту. Рис. 51 показывает, как разрешить субблок A интерфейса SAI1 в режиме Pulse Density Modulation с поддержкой двух микрофонов и CK1 в качестве выхода тактов. Разрешенные выводы SAI1_CK1 и SAI1_D1 подсвечиваются зеленым, как только были корректно сконфигурированы ножки GPIO, привязанные к аппаратным функциям SAI.
Рис. 51. Конфигурация ножек GPIO аппаратуры SAI.
Конфигурация тактов. Рис. 52 показывает конфигурацию тактов SAI для этого примера. Более подробно про конфигурацию тактирования см. таблицу “Allowed TDM frame configuration” в руководстве RM0433 [4].
Рис. 52. Конфигурация тактов SAI для двух микрофонов, чтобы получить PCM с частотой выборок 16 кГц.
Конфигурация SAI. Выберите закладку конфигурации (Configuration) и кликните на кнопку SAI1, как показано на рис. 53.
Рис. 53. Конфигурация SAI.
Установка параметров SAI. В окне конфигурации SAI выберите закладку Parameter Settings и сконфигурируйте параметры. Субблок A интерфейса SAI должен быть сконфигурирован следующим образом:
• Data Size = 16 Bits
• Frame Length = 16
• Output Mode = Stereo
• Companding Mode = No companding mode
• Frame Synchro definition = Start Frame
• Number of Slots = 1
• Slot Active = All
• Frame Synchro Active Length = 1
• Frame Synchro Polarity = Active High
• Master Clock Divider = Disabled
Рис. 54 показывает, как сконфигурировать субблок SAIA для получения частоты выборок звука (audio sampling frequency) 16 кГц.
Рис. 54. Настройка параметров SAI.
Настройки DMA. В этом примере DMA управляет перемещением данных PDM в память, поступающих от интерфейса SAI. В окне конфигурации SAI выберите закладку DMA Settings и добавьте запрос DMA (DMA Request). Рис. 55 показывает, как сконфигурировать DMA.
Рис. 55. Настройки SAI DMA.
Конфигурация Cortex M7. Выберите закладку конфигурации (Configuration) и кликните на кнопку CORTEX_M7, как показано на рис. 56.
Рис. 56. Конфигурация CORTEX_M7.
Установка параметров Cortex M7. В окне конфигурации CORTEX_M7 выберите закладку Parameter Settings для конфигурирования кеша (Cache) и блока защиты памяти (Memory Protection Unit, MPU). Это позволит улучшить производительность в случае использования интерфейса AXI с несколькими мастерами.
Для типовой конфигурации MPU обратитесь к проекту-шаблону в пакете STM32Cube_FW_H7_V1.0.0 (начиная с версии V1.0.0), который находится в каталоге Projects\STM32H743ZI-Nucleo\Templates.
Более подробно по конфигурацию и использование блока защиты памяти см. апноут AN4838 [5]. Рис. 57 показывает, как для этого примера конфигурируется Cache и MPU.
Рис. 57. Настройка параметров Cortex M7.
[Добавление библиотеки декодирования PDM]
Выберите используемую среду разработки (тулчейн), сгенерируйте проект в утилите STM32CubeMX и откройте проект в среде разработки.
Для серии микроконтроллеров STM32H7 библиотека декодирования PDM включает заголовочный файл pdm2pcm_glo.h и двоичные/объектные коды для следующих платформ:
• libPDMFilter_CM7_IAR.a: для компилятора среды разработки IAR.
• libPDMFilter_CM7_Keil.lib: для компилятора ARM.
• libPDMFilter_CM7_GCC.a: для компилятора GNU.
Эта библиотека предоставляется в пакете STM32Cube_FW_H7 (начиная с версии V1.0.0), и она находится в каталоге Middlewares\ST\STM32_Audio\Addons\PDM. Убедитесь, что добавили заголовочный файл pdm2pcm_glo.h в пути поиска заголовочных файлов проекта (Include Paths), и добавили в проект соответствующий двоичный файл библиотеки.
Этот пример основан на плате NUCLEO-F413ZH с использованием внешних цифровых микрофонов, подключенных к DFSDM в режиме стерео. Это применимо к конфигурации аппаратуры, описанной выше в разделе “Интерфейс DFSDM”.
[Конфигурация DFSDM, выполненная с использованием STM32CubeMX]
Конфигурация GPIO и аппаратных выводов. После создания проекта STM32CubeMX выберите периферийное устройство DFSDM1 среди перечисленных на закладке Pinout периферийных устройств, и разрешите необходимые каналы DFSDM. Рис. 58 показывает, как разрешить каналы DFSDM в режиме стерео. В этом режиме разрешенные каналы должны следовать друг за другом в порядке возрастания номера канала.
Рис. 58. Конфигурация ножек GPIO аппаратуры DFSDM в режиме стерео.
Разрешенные выводы DFSDM1_DATIN1 и DFSDM1_CKOUT подсвечиваются зеленым, как только были корректно сконфигурированы ножки GPIO, привязанные к аппаратным функциям DFSDM, что показано на рис. 59.
Рис. 59. Конфигурация ножек DFSDM.
Конфигурация канала. В окне конфигурации DFSDM выберите закладку Parameter Settings и сконфигуруйте параметры. Значение поля Type выбирается в соответствии с состоянием ножки L/R (LR) микрофонов, подключенных к каналам DFSDM. В режиме стерео каждый канал должен считывать данные на разных перепадах тактов, чтобы микрофоны могли использовать общий сигнал данных.
Рисунки 60 и 61 показывают, как сконфигурировать каналы Channel 1 и Channel 0 соответственно для получения частоты выборок звука (Audio Frequency) 16 кГц.
Рис. 60. Конфигурация DFSDM Channel 1.
Рис. 61. Конфигурация DFSDM Channel 0.
Конфигурация фильтра. В этом примере Filter 0 и Filter 1 привязаны соответственно к Channel 1 и Channel 0 как к обычным каналам. Параметр Sinc Order конфигурируется в соответствии с частотой выборок звука (audio sampling frequency). Таблица 11 показывает эти возможные значения.
Таблица 11. Значения для порядка фильтра DFSDFM.
Целевая частота выборок | Порядок фильтра |
16 кГц | Тип фильтра Sinc 4 или Sinc 5 |
48 кГц |
Поле параметра Fosr содержит значение коэффициента децимации. На рисунках 62 и 63 показан пример конфигурации Filter 1 и Filter 0 для частоты выборок звука (Audio Sampling Frequency) 16 кГц.
Рис. 62. Конфигурация DFSDM Filter 0.
Рис. 63. Конфигурация DFSDM Filter 1.
Конфигурация выхода тактов. В этом примере Audio Clock выбирается как источник тактов для выхода тактов DFSDM, что дает больше гибкости в конфигурировании тактов.
Значение делителя тактов (Divider) должно соответствовать следующей формуле:
Divider = DFSDM Clock Source / (AUDIO_SAMPLING_FREQUENCY x DECIAMTION_FACTOR)
Рис. 64 показывает пример конфигурации DFSDM Clock Source = 48 МГц, Audio Sampling Frequency = 16 кГц и Decimation Factor = 64.
Рис. 64. Конфигурация выхода тактов DFSDM.
Настройки DFSDM DMA. В этом примере под управлением DMA в память перемещаются данные, поступающие от каналов DFSDM, что снижает вычислительную нагрузку на микроконтроллер.
В окне конфигурации DFSDM выберите закладку DMA Settings и добавьте запрос DMA (DMA Request) для каждого Filter. Кликните на только что созданные запросы DMA и сконфигурируйте настройки, как показано на рис. 65.
Рис. 65. Настройки DFSDM DMA.
Конфигурация тактов DFSDM. В этом примере выходные такты DFSDM генерируются из тактов аудио при подаче тактовой частоты 61.44 МГц на блок DFSDM, как показано на рис. 66.
Рис. 66. Конфигурация тактов DFSDM.
Таблица 15 предоставляет значения точности полученной частоты выборок звука (audio sampling frequency) для следующих конфигураций тактов:
• Для потока 16 кГц частота CKOUT должна быть 1.024 МГц.
• Для потока 48 кГц частота CKOUT должна быть 3.072 МГц.
• Коэффициент передискретизации равен 64.
Таблица 15. Конфигурация тактов DFSDM и соответствующая точность частоты выборок звука PCM.
Целевая частота выборок | DivM | PLLN | DivR | Делитель выхода тактов | Такты DFSDM (МГц) |
Точность (ppm) |
16 кГц | 5 | 192 | 5 | 60 | 61.44 | 0 |
48 кГц | 5 | 192 | 5 | 20 | 61.44 | 0 |
[Ссылки]
1. AN5027 Interfacing PDM digital microphones using STM32 MCUs and MPUs site:st.com.
2. STM32F407, интерфейс SPI.
3. STM32F4xx: интерфейс SPI.
4. RM0433 STM32H742, STM32H743/753 and STM32H750 Value line advanced Arm®-based 32-bit MCUs site:st.com.
5. AN4838 Managing memory protection unit in STM32 MCUs site:st.com.
6. INMP441: цифровой микрофон с интерфейсом I2S.
% PDF-1.3 % 1 0 obj> поток конечный поток эндобдж 2 0 obj> эндобдж 6 0 obj> / Rect [67,26 692,78 527,94 707,06] >> эндобдж 7 0 obj> / Rect [67,26 660,8 527,94 675,08] >> эндобдж 8 0 obj> / Rect [123.96 642.2 527.94 654.2] >> эндобдж 9 0 obj> / Rect [123.96 623.24 527.94 635.24] >> эндобдж 10 0 obj> / Rect [123.96 604.22 527.94 616.22] >> эндобдж 11 0 obj> / Rect [159,42 586,88 224,16 600,62] >> эндобдж 12 0 obj> / Rect [123,96 569,9 527,94 581,9] >> эндобдж 13 0 obj> / Rect [123.96 552,86 527,94 564,86] >> эндобдж 14 0 obj> / Rect [123,96 535,88 527,94 547,88] >> эндобдж 15 0 obj> / Rect [123,96 518,9 527,94 530,9] >> эндобдж 16 0 obj> / Rect [123,96 501,86 527,94 513,86] >> эндобдж 17 0 obj> / Rect [123,96 484,88 527,94 496,88] >> эндобдж 18 0 obj> / Rect [123,96 467,9 527,94 479,9] >> эндобдж 19 0 obj> / Rect [123,96 450,86 527,94 462,86] >> эндобдж 20 0 obj> / Rect [123,96 433,88 527,94 445,88] >> эндобдж 21 0 obj> / Rect [123,96 416,9 527.94 428,9] >> эндобдж 22 0 obj> / Rect [123,96 399,86 527,94 411,86] >> эндобдж 23 0 obj> / Rect [123,96 382,88 527,94 394,88] >> эндобдж 24 0 obj> / Rect [123,96 365,9 527,94 377,9] >> эндобдж 25 0 obj> / Rect [123,96 348,86 527,94 360,86] >> эндобдж 26 0 obj> / Rect [123,96 331,88 527,94 343,88] >> эндобдж 27 0 obj> / Rect [123,96 314,9 527,94 326,9] >> эндобдж 28 0 obj> / Rect [123,96 297,86 527,94 309,86] >> эндобдж 29 0 obj> / Rect [123,96 280,88 527,94 292,88] >> эндобдж 30 0 obj> / Rect [123.96 263,9 527,94 275,9] >> эндобдж 31 0 obj> / Rect [123,96 246,86 527,94 258,86] >> эндобдж 32 0 obj> / Rect [123,96 229,88 527,94 241,88] >> эндобдж 33 0 obj> / Rect [123,96 212,9 527,94 224,9] >> эндобдж 34 0 obj> / Rect [123,96 195,86 527,94 207,86] >> эндобдж 35 0 obj> / Rect [67,26 163,76 527,94 178,04] >> эндобдж 36 0 obj> / Rect [67,26 131,78 527,94 146,06] >> эндобдж 37 0 obj> / Rect [74,76 87,44 89,1 98,66] >> эндобдж 5 0 obj> / ProcSet [/ PDF / Text] / ColorSpace> / Font> / Properties >>> эндобдж 4 0 obj> поток hZ [oF ~ ׯ GXQ.m> (2p + * Eџ ڇ! ETlM [\ (Nx; _ / ‘& y] 믾 zv9Mn; z6Mf38eQ vH $ 4lnűLl1c009: ԑr ܆ caXEu “ۡ | Z ڡ x3ǴoFg # 0f) ̲EdYʪ | tBFF` LcquL & fqL & fqL; , uj + ANYD & ˦ / cinT, ͢T1 ~ arY.v + XM \ 1r_q“ wp ܞ GЦt $ C_GWnvOeY {2 & l # MYm8 {) 8XDhb | l> XJ, “. 3f4Lƒ !!” SZ {C78 * B @ D` eJ ٪ Q “aX-v (1GN @ ‘xf ,, G NІm @ * $ EHnUs8t] q # dȱ ڬ itOVH7NA; l” YdLΥ ގ y ذ A “l-? n. ## i # X) cmZuWZZ; ⱳ
STM32F103C8T6 Blue Pill Распиновка, периферийные устройства, программирование и функции
STM32F103C8T6 – один из микроконтроллеров среднего уровня семейства STM32F103x8, основанный на архитектуре RISC.Интегрированная плата разработки Blue Pill была представлена в качестве недорогой платы в качестве альтернативы платам обнаружения STMicroelectronics. Цена Blue Pill составляет около 2–3 долларов.
МикроконтроллерSTM32F103C8T6 поставляется с выводами GPIO, процессором, памятью, USB-портом, аналого-цифровыми преобразователями и другими периферийными устройствами. Ядро ARM Cortex с потрясающей скоростью 72 МГц и замечательной энергоэффективностью.
Это руководство представляет собой введение в плату разработки STM32F103C8T6 Blue Pill.Здесь будут обсуждаться все функции, спецификации, конфигурация контактов, контакты GPIO и периферийные устройства, а также приложения.
STM32F103C8T6 Введение
STM32F103C8T6 Blue Pill Development Board содержит 32-битное ядро Cortex-M3 RISC ARM с внутренним генератором 4-16 МГц. Это микросхема с технологией флэш-памяти CMOS. Этот чип имеет 37 контактов GPIO и 10 аналоговых контактов. Он имеет несколько современных интерфейсов связи, таких как CAN и порт USB. Периферийные устройства обеспечивают превосходный контроль над платой, поскольку она работает при очень низком напряжении, поэтому она подходит для приложений с низким энергопотреблением.Он также поставляется со встроенным сторожевым таймером и оконным сторожевым таймером для правильного выполнения инструкций.
STM32F103C8T6 Распиновка синей таблетки
На следующей схеме показана распиновка платы разработки STM32F103C8T6 Blue Pill:
STM32F103C8T6 Конфигурация синей таблетки
Давайте обсудим распиновку платы разработки STM32F103C8T6 Blue Pill. Подробная информация о конфигурации выводов в таблице указана ниже:
Тип | Имя контакта | Функция |
---|---|---|
Питание | – 3.3 В – 5 В – GND | 1. Рабочее выходное напряжение 2. Электропитание от USB или 5 В, вывод внешнего источника 3. Вывод заземления |
Аналоговые выводы | PA0-PA7, PB0-PB1 | 10 контактов АЦП с разрешением 12 бит |
Контакты ввода / вывода | PA0-PA15, PB0-PB15, PC13-PC15 | 37 контактов ввода / вывода общего назначения |
Внешние прерывания | PA0-PA15, PB0-PB15, PC13-PC15 | Контакты прерывания |
PWM | PA0-PA3, PA6-PA10, PB0-PB1, PB6-PB9 | 15 контактов широтно-импульсной модуляции |
Последовательная связь (UART) | TX1, RX1, TX2, RX2, TX3, RX3 | RTS, CTS контакты USART |
SPI | MISO0, MOSI0, SCK0, MISO1, MOSI1, SCK1, CS0 | 2 контакта последовательного периферийного интерфейса | CAN | CAN0TX, CAN0RX | Шина сети контроллера контакты |
I 2 C | SCL1, SCL2, SDA1, SD2 | Контакты последовательных данных и синхронизации между интегральной схемой |
Встроенный светодиод | PC13 | Светодиод для индикации |
- Внешние прерывания: Аппаратные прерывания используются для обнаружения внешних сигналов.
- PWM: Всего 15 контактов широтно-импульсной модуляции для генерации аналоговых сигналов напряжения с цифровых выходов PWM.
- RTS / CTS: Request-to-Send / Clear-to-Send – это протокол, который сообщает о передаче и приеме данных, чтобы контролировать поток данных и сигналов.
- SPI: Последовательный периферийный интерфейс для связи между микроконтроллером и периферийными устройствами.
- CAN: Многопоследовательная шина, также отвечающая за двустороннюю связь.
- I 2 C: Другой протокол последовательного интерфейса для синхронизированной побитовой передачи данных.
Характеристики и характеристики
Функции и периферия | Доступность |
---|---|
Архитектура | RISC |
Счетчик контактов | 47 |
SRAM | 20 килобайт |
Последовательный провод | 1 |
Флэш-память | 64/128 килобайт |
Частота процессора | 72 МГц (макс.) |
USB-разъем | Micro |
ADC | 2 |
Количество Таймеры | 7 |
Коммуникационные интерфейсы | 9 |
USB-модуль | Да |
I 2 C | 2 |
SPI | 2 |
Рабочая температура | -40 0 С – 105 0 С |
Ток источника / стока | 6 мА |
Рабочее напряжение | 2.0 В – 3,6 В |
Модуль USART | 3 |
Внутренний осциллятор | 4–16 МГц |
Оконный сторожевой таймер (WWDT) | Да |
Интерфейс отладки JTAG | 1 |
Некоторые подробные характеристики включают:
- Циклический контроль избыточности (CRC) для мониторинга повреждения данных
- Три различных варианта загрузки (через пользовательскую флэш-память, системную память или SRAM) для реорганизации флэш-памяти через USART1
- 7 разных таймеров для разных частот дискретизации для аналоговых сигналов
- Последовательный протокол JTAG (Joint Test Action Group) для отладки и тестирования блока микроконтроллера
- Часы с фазовой автоподстройкой частоты (PLL) для стабильности за счет фазирования выходных и входных сигналов
- A Оконный сторожевой таймер для наблюдения за ошибками при приеме сигнала и трансмиссия
STM32F103C8T6 Blue Pill Схема
На следующем рисунке для справки показана принципиальная схема.Если ваша Blue Pill была повреждена, вы можете обратиться к этой принципиальной схеме, чтобы заменить неисправные компоненты:
Как программировать STM32F103C8T6 Совет по развитию
Существует два способа программирования платы разработки STM32F103C8T6. Используя следующие методы:
- USB-ключ STLink
- Внешний USB-преобразователь или последовательный преобразователь
Компиляторы поддержки
Существует множество вариантов компиляторов и IDE для написания программ и флэш-кода для STM32F10C8T6 Blue Pill.Но это два самых популярных и простых в использовании компилятора.
Keil uvision
Программное обеспечение, такое как Kiel / CubeMX и программное обеспечение STLink, также используется для компиляции и загрузки программ. Это делается через однопроводной интерфейс отладки, который разработан для ядер ARM для передачи и доступа к памяти. Вы можете обратиться к этим руководствам по началу работы по Keil Vision:
Ардуино IDE
Этот MCU совместим с программным обеспечением Arduino.Его можно запрограммировать с помощью компиляторов Arduino. Arduino использует два компилятора: avr-g ++ и arm-none-eabi-g ++. Код может быть записан на MCU с помощью контактов UART1 через внешний USB.
Чтобы запрограммировать STM32F10C8T6 с помощью программного обеспечения Arduino, необходимо выбрать необходимую плату из меню плат, предоставляемых программным обеспечением. Затем загрузите подходящие файлы, чтобы плата могла эффективно программировать. Образцы эскизов Arduino, например Blink, можно загрузить в MCU, поскольку в разработке есть встроенный светодиод.Ознакомьтесь с этими руководствами по началу работы с Arduino IDE:
Приложения- Робототехника
- Медицинские системы
- Системы домашней автоматизации
- Недорогие встроенные системы
- Потребительское оборудование
- Системы GPS
- Промышленное применение
2D-диаграмма
STM32F103C8T6 поставляется в двух корпусах: LQFP48, UFQFPN48. На следующем рисунке показана 2-я модель UFQFPN48. Он показывает нам физические размеры компонентов, необходимых при проектировании печатной платы.
Платы для разработки:
STM32F103C8T6 Введение: спецификации, расположение выводов, техническое описание [Видео]
STM32F103C8T6 – один из микроконтроллеров среднего уровня семейства STM32F103x8, основанный на архитектуре RISC.
Семейство линейки STM32F103xx средней производительности включает высокопроизводительное 32-битное ядро RISC ARM Cortex-M3, работающее на частоте 72 МГц, высокоскоростную встроенную память (флэш-память до 128 Кбайт и SRAM до 20 Кбайт) а также широкий спектр усовершенствованных устройств ввода-вывода и периферийных устройств, подключенных к двум шинам APB.Все устройства имеют два 12-битных АЦП, три 16-битных таймера общего назначения плюс один таймер ШИМ, а также стандартные и расширенные интерфейсы связи: до двух I2C и SPI, три USART, USB и CAN.
Это обучающее видео показывает, как подключить STM32F103C8T6 к Arduino.
Каталог
STM32F103C8T6 Распиновка
Если вы хотите узнать описание и функцию каждого вывода, пожалуйста, проверьте страницы 28–33 в техническом описании.
STM32F103C8T6 Характеристики
■ Ядро: 32-разрядный процессор ARM Cortex ™ -M3
– 72 МГц, 90 DMIPS с 1,25 DMIPS / МГц
– Одноцикловое умножение и аппаратное деление
– Вложенный контроллер прерываний с 43 маскируемыми каналами прерываний
– Обработка прерываний (до 6 циклов ЦП) с хвостовой цепочкой
■ Воспоминания
– Флэш-память от 32 до 128 Кбайт
– от 6 до 20 Кбайт SRAM
■ Часы, сброс и управление питанием
– 2.Питание приложений от 0 до 3,6 В и входы / выходы
– POR, PDR и программируемый детектор напряжения (PVD)
– кварцевый генератор от 4 до 16 МГц
– Внутренний 8 МГц RC
с заводской настройкой– Внутренний 32 кГц RC
– PLL для тактовой частоты процессора
– Выделенный генератор 32 кГц для RTC с калибровкой
■ Низкое энергопотребление
– Режимы сна, остановки и ожидания
– Питание VBAT для RTC и резервных регистров
■ 2 аналогово-цифровых преобразователя по 12 бит, 1 мкс (16 каналов)
– Диапазон преобразования: от 0 до 3.6 В
– Возможность двойного отбора проб и удержания
– синхронизируется с таймером расширенного управления
– Датчик температуры
■ DMA
– 7-канальный контроллер прямого доступа к памяти
– Поддерживаемые периферийные устройства: таймеры, АЦП, SPI, I2C и USART
Параметры STM32F103C8T6
Номер детали производителя: | STM32F103C8T6 |
Код жизненного цикла детали: | Активный |
Ihs Производитель: | СТМИКРОЭЛЕКТРОНИКА |
Код упаковки детали: | QFP |
Описание упаковки: | LFQFP, QFP48 ,.28кв., 20 |
Количество контактов: | 48 |
Код соответствия требованиям: | соответствует |
Код HTS: | 8542.31.00.01 |
Рейтинг риска: | 0,85 |
Имеет АЦП: | ДА |
Размер бита: | 32 |
JESD-30 Код: | S-PQFP-G48 |
Длина: | 7 мм |
Количество линий ввода / вывода: | 37 |
Максимальная рабочая температура: | 85 ° С |
Рабочая температура – мин .: | -40 ° С |
Материал корпуса корпуса: | ПЛАСТИК / ЭПОКСИД |
Форма упаковки: | ПЛОЩАДЬ |
Тип упаковки: | ПЛОСКАЯ УПАКОВКА, НИЗКИЙ ПРОФИЛЬ, МОНТАЖНЫЙ ШАГ |
Пиковая температура оплавления (Cel): | 260 |
ROM Возможность программирования: | ВСПЫШКА |
Макс.высота сидя: | 1.6 мм |
Скорость: | 72 МГц |
Макс.напряжение питания: | 3,6 В |
Напряжение питания – мин .: | 2 В |
Номинальное напряжение питания: | 3,3 В |
Технологии: | CMOS |
Температурный класс: | ПРОМЫШЛЕННЫЙ |
Форма клеммы: | КРЫЛО |
Шаг терминала: | 0.5 мм |
Положение клеммы: | QUAD |
ИБП / мкК / Периферийные ИС Тип: | МИКРОКОНТРОЛЛЕР, RISC |
Код Rohs: | Есть |
Код ECCN: | 3A991.A.2 |
Заводское время выполнения: | 14 недель |
Семейство процессоров: | STM32 |
Макс.тактовая частота: | 16 МГц |
Каналы ЦАП: | НЕТ |
Ширина ПЗУ встроенной программы: | 8 |
Код упаковки: | LFQFP |
Код эквивалентности упаковки: | QFP48 ,.28кв., 20 |
Источники питания: | 2,5 / 3,3 В |
Статус квалификации: | Не соответствует требованиям |
RAM (байты): | 20480 |
ROM (слова): | 65536 |
Подраздел: | Микроконтроллеры |
JESD-609 Код: | .e4 |
Терминальная отделка: | Никель / палладий / золото (Ni / Pd / Au) |
Время при пиковой температуре оплавления – макс. (С): | 30 |
Уровень чувствительности к влаге: | 2 |
Максимальный ток питания: | 50 мА |
Фирменное наименование: | STMicroelectronics |
Формат: | ФИКСИРОВАННАЯ ТОЧКА |
Количество внешних прерываний: | 16 |
Количество каналов прямого доступа к памяти: | 7 |
STM32F103C8T6 Преимущества
Отличное поведение в реальном времени
Превосходная энергоэффективность
Превосходное и инновационное периферийное оборудование
Максимальная интеграция
Межполюсная, периферийная и программная совместимость для разных семейств
STM32F103C8T6 CAD-модели
STM32F103C8T6 Функциональные эквиваленты
Номер детали | Описание | Производитель |
STM32F103C8T6TR МИКРОКОНТРОЛЛЕРЫ И ПРОЦЕССОРЫ | Линия Mainstream Performance, MCU Arm Cortex-M3 с 64 Кбайт флэш-памяти, ЦП 72 МГц, управление двигателем, USB и CAN | STMicroelectronics |
STM32F103C8T7TR МИКРОКОНТРОЛЛЕРЫ И ПРОЦЕССОРЫ | Линия Mainstream Performance, MCU Arm Cortex-M3 с 64 Кбайт флэш-памяти, ЦП 72 МГц, управление двигателем, USB и CAN | STMicroelectronics |
STM32F103C4T6AXXX МИКРОКОНТРОЛЛЕРЫ И ПРОЦЕССОРЫ | 32-БИТ, ВСПЫШКА, 72 МГц, RISC-МИКРОКОНТРОЛЛЕР, PQFP48, 7 X 7 MM, СООТВЕТСТВУЮЩИЙ ROHS, LQFP-48 | STMicroelectronics |
STM32F103C8T6XXX МИКРОКОНТРОЛЛЕРЫ И ПРОЦЕССОРЫ | 32-БИТ, ВСПЫШКА, 1.25 МГц, RISC-МИКРОКОНТРОЛЛЕР, PQFP48, 7 X 7 MM, СООТВЕТСТВУЮЩИЙ ROHS, LQFP-48 | STMicroelectronics |
STM32F103C8T7XXX МИКРОКОНТРОЛЛЕРЫ И ПРОЦЕССОРЫ | 32-БИТНЫЙ, ВСПЫШКА, 1,25 МГц, RISC-МИКРОКОНТРОЛЛЕР, PQFP48, 7 X 7 MM, СООТВЕТСТВУЮЩИЙ ROHS, LQFP-48 | STMicroelectronics |
STM32F103C4T6ATR МИКРОКОНТРОЛЛЕРЫ И ПРОЦЕССОРЫ | 32-БИТ, ВСПЫШКА, 72 МГц, RISC-МИКРОКОНТРОЛЛЕР, PQFP48, 7 X 7 MM, СООТВЕТСТВУЮЩИЙ ROHS, LQFP-48 | STMicroelectronics |
STM32F103C8T6 Популярность по регионам
STM32F103C8T6 Документы
STM32F103C8T6 Пакет
LQFP48 7 x 7 мм, 48-контактный плоский низкопрофильный четырехъядерный корпус
STM32F103C8T6 Производитель
STMicroelectronics – глобальная независимая полупроводниковая компания, которая является лидером в разработке и поставке полупроводниковых решений для всего спектра приложений микроэлектроники.Непревзойденное сочетание опыта в области микросхем и систем, производственной мощи, портфеля интеллектуальной собственности (IP) и стратегических партнеров ставит компанию на передовые позиции в области технологии System-on-Chip (SoC), а ее продукты играют ключевую роль в обеспечении современных тенденций конвергенции.
Техническое описание компонентов
Распиновка STM32F103C8T6 – 32-разрядный микроконтроллер на базе ARM
Номер детали: STM32F103C8T6
Функция: Линия производительности средней плотности 32-разрядный MCU на базе ARM
Корпус: 48-контактный LQFP
Производитель: STMicroelectronics
Изображение
Описание
Семейство STM32F103xx, STM32F103C8T6 со средней производительностью включает высокопроизводительное 32-битное ядро RISC ARM Cortex-M3, работающее на частоте 72 МГц, высокоскоростную встроенную память (флэш-память до 128 Кбайт и SRAM до 20 Кбайт). ), а также широкий спектр усовершенствованных устройств ввода-вывода и периферийных устройств, подключенных к двум шинам APB.Все устройства предлагают два 12-битных АЦП, три 16-битных таймера общего назначения плюс один таймер ШИМ, а также стандартные и расширенные интерфейсы связи: до двух I2C и SPI, три USART, USB и CAN. Устройства работают от источника питания от 2,0 до 3,6 В. Они доступны как в диапазоне температур от –40 до +85 ° C, так и в расширенном диапазоне температур от –40 до +105 ° C. Полный набор режимов энергосбережения позволяет разрабатывать приложения с низким энергопотреблением.
Распиновка STM32F103C8T6
Характеристики
Архитектура: ARM Cortex-M3
Частота процессора: 72 МГц
Размер программной памяти: 64 КБ
Размер оперативной памяти: 20 КБ
No.Количество контактов: 48 контактов
Тип корпуса MCU: LQFP
Количество входов / выходов: 37 входов / выходов
Тип встроенного интерфейса: CAN, I2C, SPI, USART, USB
Напряжение питания Мин .: 2 В
Максимальное напряжение питания: 3,6 В
Упаковка : Каждый
Автомобильный квалификационный стандарт: –
MSL: MSL 3-168 часов Базовый номер
: (ARM Cortex) STM32
Тактовая частота: 72 МГц Семейство / серия контроллеров
: STM32
Размер флэш-памяти: 64 КБ
Размер ядра MPU: 32 бит
Тип памяти: Flash
Кол-во входов АЦП: 10
No.битов: 32 бит
Количество каналов ШИМ: 1
Количество таймеров: 4
Количество битов в таймере: 16
Информация для заказа
Справочная площадка
http://www.st.com/en/microcontrollers/stm32f103c8.html
Другие листы данных в файле: STM32F103C8T7, STM32F103CBT7
STM32F103C8T6 Распиновка листа данных
Статьи по теме в Интернете
Введение в синюю таблетку STM32 (STM32duino)
В этой статье вы узнаете, как STM32duino сочетается с Arduino и как сделать его совместимым с интегрированной средой разработки (IDE) Arduino.
Опубликовано Джон Тил
Если вы планируете использовать Arduino для раннего прототипа вашего продукта, вам также следует подумать о более мощной плате для разработки STM32duino.
Обычно называемая STM32 Blue Pill, эта плата обладает почти всеми возможностями модуля Arduino, но по более низкой цене.
Есть только две основные проблемы. Во-первых, он несовместим с большинством щитов Arduino из-за различий в размерах и выводах.В большинстве случаев он все еще может использовать эти щиты. Просто эти экраны просто не могут быть прикреплены к модулю.
Во-вторых, перед запуском кода Arduino необходимо выполнить несколько шагов. Чтобы сделать его совместимым с обычным способом загрузки кода Arduino в целевой модуль через USB-порт ПК, необходимо предпринять еще больше шагов. В полученном виде плата не выполняет ни одного из этих действий.
Хотя механическую несовместимость с экранами Arduino устранить нельзя, можно сделать их совместимыми с системой разработки Arduino.Это тема данной статьи.
STM32duino в сравнении с Arduino Uno
В таблице 1 представлено краткое сравнение наиболее распространенной платы STM32duino Blue Pill и типичной платы Arduino Uno.
Можно легко заметить, что Blue Pill превосходит Uno почти во всех аспектах, за исключением механической совместимости щитов Arduino, которые в основном разработаны для форм-фактора Uno.
С точки зрения физического размера, на рисунке 1 показано параллельное сравнение типичного Uno, STM32Duino и Arduino Nano.STM32Duino заметно меньше Uno, но длиннее Nano. На рисунке 2 ниже показана распиновка платы Blue Pill.
Обратите внимание, однако, что Nano не имеет интерфейса USB для системы разработки, что требует наличия отдельного преобразователя USB в последовательный порт, такого как FTDI232, для загрузки кода на него.
Элемент | Uno | STM32duino | Комментарии |
MPU | ATMega328 | STM32F103C8T6 (Cortex M3) | |
Flash (КБ) | 32 | 64/128 * | * 128K в некоторых моделях. |
SRAM (КБ) | 2 | 20 | |
EEPROM (КБ) | 1 | Нет | |
Скорость (МГц) | 72 | ||
Ширина шины (бит) | 8 | 32 | |
UART (HW) | 1 | 3 | Не все модули HW могут использоваться одновременно из-за ограничений распиновки. Это касается обоих типов. |
SPI | 1 | 2 | |
I 2 C (HW) | 1 | 2 | |
Таймеры | 2 (8 бит) + 1 (16 бит) | 3 (16 бит) + 1 (расширенный тип) | |
Прочие | Нет | 32,768 кГц RTC кварцевые часы | |
АЦП (бит) | 10 | 12 | Uno может использовать внутреннюю ссылку АЦП, но Blue Pill использует ссылку VCC.Таким образом, АЦП Uno может быть более точным. |
Таблица 1 – Основное сравнение аппаратного обеспечения между Arduino Uno и STM32duino
Рисунок 1. Параллельное сравнение между Arduino Uno, STM32duino и Arduino Nano (слева направо)
Рисунок 2 – Распиновка STM32duino и описание функций контактов
Есть и другие, менее очевидные различия, некоторые из которых могут быть важны для определенных приложений. Вот некоторые из них:
- Поскольку Blue Pill по своей сути является 32-битной системой, ее целые числа, естественно, имеют 32-битную ширину, в отличие от 8-битной ширины для Uno.
- Это означает, что, например, сложение двух 32-битных целых чисел – это всего лишь одна операция в STM32duino, но на самом деле это четыре 8-битных добавления с переносом в Uno. В ПО это делается прозрачно, но в конечном итоге это занимает немного больше места для кода и выполняется медленнее.
- Хотя вполне возможно иметь более одного UART, или I 2 C, в Uno с помощью программной эмуляции, это требует больше кода и отвлекает больше ресурсов MPU от других задач.Учитывая и без того более низкую тактовую частоту Uno, это может быть проблемой в некоторых приложениях.
- Для таймеров применяются те же аргументы, что и микропрограммное обеспечение и использование ресурсов. В Uno можно добавить код для увеличения временных интервалов или добавить несколько событий таймера, но за счет большего количества кода и, следовательно, большего времени выполнения кода.
- В то время как АЦП Uno – 10-битный, а Blue Pill – 12-битный, Uno может использовать внутренний опорный сигнал АЦП с шириной запрещенной зоны, в то время как Blue Pill может использовать только свой VDD.В целом, АЦП Uno может быть более точным, несмотря на более низкое разрешение АЦП. Функциональность
- EEPROM может быть эмулирована во флэш-памяти Blue Pill. Однако для управления этим требуются некоторые ресурсы кода и процессора.
- Из-за увеличенных аппаратных ресурсов модуля Blue Pill вполне возможно запускать FreeRTOS на нем, и многие приложения могут извлечь из этого выгоду. Обратите внимание, что, хотя для Uno все еще возможно, преимущества FreeRTOS должны быть тщательно взвешены. потребление ресурсов.FreeRTOS для STM32duino можно скачать здесь.
Что нужно для совместимости с STM32duino и Arduino
Как уже было сказано, Blue Pill и Uno имеют очень разные микроконтроллеры и разные устройства ввода-вывода и периферийные устройства. Тем не менее, при правильной настройке они оба могут запускать Arduino.
Чтобы сделать любую плату микроконтроллера, включая STM32duino и Arduino, совместимой, должно произойти несколько вещей. В этом разделе кратко объясняется, что это такое, прежде чем приводиться подробные инструкции по достижению этой совместимости.
Само ядро Arduino должно быть каким-то образом предварительно загружено в микроконтроллер. Это встроенный код, который поддерживает основные функции Arduino, такие как digitalRead или digitalWrite.
Тогда есть загрузчик. Хотя в этом нет строгой необходимости, поскольку в STM32 уже есть загрузчик, который можно использовать с программатором устройств STLink V2, гораздо удобнее использовать USB для загрузки программ Arduino на плату Arduino. Это подход, использованный в этой статье.
Поскольку код Arduino в основном представляет собой оболочку над обычным кодом C / C ++, в среде Arduino IDE необходимо установить совместимый компилятор C ++. Хотя компиляция может превратить пользовательский код в двоичные файлы, совместимые с микроконтроллером STM32F103C8T6 Blue Pill, она все же должна кое-что знать о том, как построена фактическая плата.
Должно быть известно все, от того, какие выводы ввода-вывода доступны, каковы их присвоенные имена, какая частота кварцевого резонатора и какой ввод-вывод управляется встроенным светодиодом.Этот файл «определения платы» должен быть известен компилятору, чтобы правильно скомпилировать окончательный двоичный файл.
Наконец, на ПК должен быть загружен соответствующий драйвер устройства, чтобы Blue Pill USB воспринимался ПК как последовательный порт для загрузки кода из Arduino IDE.
Последние два шага необходимо выполнить только один раз за установку. Пока используется один и тот же компьютер с той же настройкой разработки Arduino IDE, эти шаги не нужно повторять.
Подготовка ПК и Arduino IDE
Чтобы подготовить IDE Arduino, сначала запустите IDE.Убедитесь, что это последняя версия. Версия должна быть не ниже 1.8.X. X сейчас 12. Перейдите в Инструменты> Доска «???» > Менеджер совета…, где «???» это текущая выбранная плата в среде IDE. Это показано на рисунке 3.
В диспетчере плат просто найдите «Платы STM32F1XX / GD32F1XX от STM32duino » и установите его.
Рисунок 3 – Доступ к пункту меню Board Manager
Затем загрузите сюда драйверы com. Разархивируйте файл и перейдите в папку установки Arduino.Обычно это C: \ Program files (x86) \ Arduino
. Теперь перейдите в папку оборудования. В папке оборудования перетащите «Arduino_STM32-master» из ZIP-архива в папку оборудования и переименуйте его в Arduino_STM32.
ПРИМЕЧАНИЕ: Обязательно загрузите бесплатное руководство в формате PDF 15 шагов для разработки нового электронного оборудования .
Теперь откройте папку Arduino_STM32. Внутри есть папка с именем drivers. Где-то в этой папке будет файл с именем «install_drivers».Просто щелкните по нему, и драйверы должны установиться. Просто отвечайте «да» на все, что вас спрашивают.
По этой ссылке приведены инструкции для Linux и Mac. На этом компьютерная часть завершена.
Прошивка загрузчика в STM32duino
Этот шаг не является строго необходимым для запуска кода Arduino на STM32duino. Можно использовать программатор устройства STLink V2 для загрузки кода в плату.
Однако этот шаг настоятельно рекомендуется. Во-первых, это заставляет плату вести себя как обычная плата Arduino.Во-вторых, несколько проще разработать код с помощью простого USB-кабеля от ПК к плате, чем каждый раз использовать STLink V2.
Доски Blue Pill доступны в таких местах, как Amazon. Если они вам сразу не понадобятся, их можно купить на AliExpress. В настоящее время этот поставщик продает их примерно по 1,75 доллара за штуку.
Следующая необходимая деталь – программатор ST Link V2. Официальный программатор ST можно купить в Digikey.
Однако есть более дешевая версия клона от Adafruit, которая работает так же хорошо.Это примерно половина стоимости официальной версии, и ее можно найти здесь.
Если проявить немного терпения, возможны и более дешевые варианты. Вот ссылка на действительно недорогой. Он идентичен предыдущему, но стоит примерно пятую часть цены.
Два разных программатора показаны на рис. 4, где оригинал находится слева, а клон – справа. В этой статье будет использоваться клон. Впрочем, оригинал тоже работает. Обратите внимание, что клон обычно поставляется с кабельной сборкой Dupont.Это небольшой кабель, показанный в средней части рисунка 4.
Рисунок 4 – ST-Link V2: оригинал слева и клон справа
Сначала загрузите и установите здесь утилиту STM32 ST Download. Обратите внимание, что ST действительно требует имени и электронной почты, чтобы разрешить загрузку программного обеспечения. Затем загрузите фактический загрузчик отсюда.
Следующим шагом является подключение Blue Pill к ST-Link V2 (рисунок 5). Просто подключите соответствующие контакты на клоне ST-LinkV2 к STM32duino.
Обратите внимание, что на ST-Link V2 есть два GND и два 3V3. Любой из них подойдет для 3V3 и GND. Также переместите перемычки STM32duino в положение «1», как показано.
После выполнения подключений просто вставьте ST-Link V2 в USB-порт ПК. STM32duino, вероятно, будет болтаться от USB-порта, но это нормально.
Рисунок 5 – STM32duino и ST-Link V2 clone
Теперь запустите утилиту STM32 ST-Link. Появится экран, аналогичный показанному на рисунке 6.Оттуда перейдите к «Target», а затем в подменю нажмите «Connect». В случае успешного подключения отображается экран, подобный показанному на рисунке 7.
Обратите внимание, что информация о подключении также отображает информацию о целевом устройстве. В частности, обратите внимание, что некоторые STM32duino имеют 128 КБ флэш-памяти вместо 64 КБ. Последний шаг – фактически загрузить файл, содержащий данные для прошивки, и загрузить эти данные в MCU Blue Pill.
Итак, из меню «Файл» откройте загруженный ранее bin-файл.В основной области утилиты ST-Link теперь отображается содержимое этого файла. Затем перейдите в пункт меню Target и выберите Program & Verify. Этот экран показан на Рисунке 8.
Просто следуйте инструкциям оттуда. В окне состояния должно отображаться успешное выполнение операции мигания. Удалите все и верните перемычки Blue Pill в исходное положение «0». Доска готова.
Если хотите, попробуйте. Просто загрузите простой пример «Blink» из Arduino IDE.Не вдаваясь в подробности, просто убедитесь, что:
- Выбран правильный COM-порт.
- Плата настроена на «Generic STM32F103C series».
- Метод загрузки установлен на загрузчик STM32duino.
Используйте этот параметр для всех будущих разработок с использованием STM32duino.
Рисунок 6 – Начальный экран ST-Link Util
Рисунок 7. Успешное соединение ST Link Util с целевым устройством
Рисунок 8 – Готовность к «программированию и проверке» микропрограммы
Заключение
STM32duino – очень хорошая альтернатива обычным Arduino, таким как Uno, при условии, что физическая совместимость с существующими щитами Arduino не требуется.Он намного мощнее и стоит намного дешевле.
Требуется немного поработать, чтобы заставить его работать как обычная плата Arduino. Однако многие из этих шагов нужно выполнить только один раз. После завершения первоначальной настройки эта конфигурация дает множество преимуществ.
Наконец, не забудьте загрузить бесплатный PDF-файл : Окончательное руководство по разработке и продаже нового электронного оборудования . Вы также будете получать мой еженедельный информационный бюллетень, в котором я делюсь премиальным контентом, недоступным в моем блоге.Другой контент, который может вам понравиться:
3.8 4 голоса
Рейтинг статьи
STM32 – Аппаратная плата с открытым исходным кодом
Аппаратное обеспечение с открытым исходным кодом Плата для разработки MAPLE (типа ARDUINO) https://www.olimex.com/Products/Duino/STM32/OLIMEXINO-STM32/open-source-hardwareЦена | 16,95 EUR |
---|---|
10 – 49 шт. | 15,26 EUR |
50 – 10000 шт. | 13.56 евро |
Olimexino-STM32 – это оборудование с открытым исходным кодом, сертифицированное OSHW, с UID BG000035
ARDUINO / MAPLE как плата с STM32F103RBT6.ОСОБЕННОСТИ
- Микроконтроллер STM32F103RBT6 Источник питания
- DCDC обеспечивает входное напряжение питания от 9 до 30 В постоянного тока , что позволяет использовать практически любой адаптер источника питания, представленный на рынке, и использовать приложения, которые находятся в промышленном источнике питания с напряжением 24 В постоянного тока.
- Тщательно подобранные, все компоненты надежно работают в ПРОМЫШЛЕННОМ диапазоне температур -25 + 85C , поэтому плату можно использовать в ПРОМЫШЛЕННЫХ приложениях.
- ULTRA LOW POWER , а потребление составляет всего несколько микроампер, что позволяет использовать их в портативных устройствах и с батарейным питанием. Опция источника питания от литий-ионной аккумуляторной батареи
- со ВСТРОЕННЫМ встроенным зарядным устройством, чтобы при подключении аккумулятора он автоматически заряжался и оставался в этом состоянии до тех пор, пока не будет отключен другой источник питания (USB или внешний адаптер), а затем он АВТОМАТИЧЕСКИ запитывает плату – без перемычек, без переключателей!
- Разъем UEXT, который позволяет подключать многие существующие модули, такие как RF, ZIGBEE, GSM, GPS
- RTC – Часы реального времени.
- CAN с драйвером для автомобильных приложений
- microSD-карта для записи данных
- ШУМОВЫЙ ИММУННЫЙ дизайн .
- Отдельный регулятор напряжения для аналоговой части, позволяющий правильно считывать АЦП без цифрового шумоподавления.
- Светодиоды и КНОПКИ расположены на краю платы, поэтому к ним можно легко получить доступ, даже если на платах есть экраны
- Используется разъем mini USB, общий
- У оригинальной конструкции Arduino был недостаток, и разъемы не были разнесены на 0.1 “. Это делает невозможным использование перфорированной платы, поэтому для обеспечения совместимости у нас такой же интервал, но мы добавили рядом с ним разъем на 0,1”, который клиенты могут использовать с перфорированными платами
- Все сигналы на разъемах напечатаны сверху и снизу платы, поэтому при проверке с помощью щупа вы будете точно знать, какой порт вы измеряете.
- 4 монтажных отверстия упрощают установку платы
- Размеры печатной платы: (2,7 x 2,1) ~ (6,9 x 5,3) см
FAQ
- Мы работаем над дизайном с использованием платы OLIMEXINO-STM32 для автомобильного применения.Должны ли мы добавить дополнительную защиту на входе блока питания или токовая защита подходит для автомобильного использования?
- Когда мы разрабатывали OLIMEXINO-STM32, мы хотели создать промышленную, а не автомобильную плату, поэтому, если вы хотите использовать ее в автомобильном приложении, вам нужно добавить 18 В TVS или варистор на вход источника питания.
- В чем основное аппаратное различие между платами Arduino с микросхемой AVR и микросхемой STM32?
- В отличие от большинства Arduino-совместимых плат с чипом AVR, Arduino-совместимые платы с чипом STM32 работают на 3.3В. Максимальное напряжение, которое могут выдерживать контакты ввода / вывода, составляет 3,3 В. Подача напряжения выше 3,3 В на любой вывод ввода / вывода может привести к повреждению платы.
- У меня проблема с подключением устройства к Windows 7 Embedded.
- Во встроенной версии отсутствует драйвер usbser.sys из папки system32 / drivers.
ПРОЕКТЫ / ОБЗОР
Модули UEXT
Electronics – документация Bulebule 1.0.0
Микроконтроллер
Ссылка на микроконтроллер – STM32F103C8T6, что означает:
- STM32
32-битный микроконтроллер ST на базе ARM
- F
Общего назначения
- 103
Линия производительности
- C
Количество контактов, 48 контактов
- 8
Средняя плотность, 64 Кбайт флэш-памяти
- T
Тип корпуса, LQFP
- 6
Диапазон температур, от -40 до 85 ºC
Часы
Микроконтроллер настроен на использование внешних высокоскоростных часов (HSE), на 8 МГц и установите SYSCLK на 72 МГц.AHB также находится на частоте 72 МГц (AHB divider по умолчанию равен 1). Часы AHB используются для генерации SysTick прерывания. Для получения дополнительной информации см. Справочник STM32F10xxx. Руководство по эксплуатации .
Bluetooth
Робот может общаться с миром с помощью последовательного Bluetooth HC-05. модуль. Этот модуль настроен на скорость передачи
0 бод, данные 8 бит, 1 стоповый бит, без контроля четности и без управления потоком.
Энкодеры
Таймеры 1 и 4 настроены на считывание квадратурных энкодеров (и, таким образом, подключенные к каналам A и B кодировщика IE2-512).Они оба настроены на подсчет на обоих краях TI1 и TI2.
Гироскоп
Гироскопы выбраны в качестве источника синхронизации для обеспечения точности (по сравнению с внутренним релаксационный осциллятор подходит для более низкого энергопотребления, когда только акселерометр).
Гироскоп MPU-6500 имеет следующие рабочие характеристики SPI:
Данные доставляются первым, а младший – последним.
Данные фиксируются по переднему фронту SCLK.
Данные должны передаваться по заднему фронту SCLK.
Максимальная частота SCLK составляет 1 МГц. Хотя датчик и прерывание регистры могут быть прочитаны с использованием SPI на 20 МГц.
Операции чтения / записи выполняются за 16+ циклов (2+ байта).
Первый байт содержит адрес SPI, а следующие за ним данные SPI.
Первый бит первого байта содержит бит чтения (1) / записи (0).
Следующие 7 битов содержат адрес регистра.
В случае многобайтового чтения / записи данные составляют два или более байта.
Распиновка
Блуэпилл
Штифт | Функция | Тип | Подключено к |
---|---|---|---|
PA0 | ADC12_IN0 | Ввод | Напряжение аккумулятора |
PA1 | НЕТ | НЕТ | Не подключен |
PA2 | ADC12_IN2 | Ввод | Ресивер передний правый |
PA3 | ADC12_IN3 | Ввод | Ствольная коробка правая |
PA4 | ADC12_IN4 | Ввод | Сторона ресивера левая |
PA5 | ADC12_IN5 | Ввод | Ресивер передний левый |
PA6 | ТИМ3_Ч2 | Ввод | Драйвер двигателя IN1 (левый) |
PA7 | ТИМ3_Ч3 | Ввод | Драйвер двигателя IN2 (левый) |
PA8 | GPIO | Выход | Эмиттер передний левый |
PA9 | GPIO | Выход | Излучатель левая сторона |
PA10 | ТИМ1_Ч4 | Выход | Сигнал динамика |
PA11 | GPIO | Ввод | Кнопка левая |
PA12 | GPIO | Ввод | Кнопка правая |
PA15 | ТИМ2_Ч2 | Ввод | Энкодер левый, канал А |
PB0 | ТИМ3_Ч4 | Выход | Драйвер двигателя IN3 (правый) |
PB1 | ТИМ3_Ч5 | Выход | Драйвер двигателя IN4 (правый) |
PB3 | ТИМ2_Ч3 | Ввод | Энкодер левый, канал B |
PB4 | GPIO | Выход | Светодиод левый |
PB5 | GPIO | Выход | Светодиод правый |
PB6 | ТИМ4_Ч2 | Ввод | Энкодер правый, канал B |
PB7 | ТИМ4_Ч3 | Ввод | Энкодер правый, канал А |
PB8 | GPIO | Выход | Излучатель правая сторона |
PB9 | GPIO | Выход | Излучатель правый передний |
PB10 | USART3_TX | Выход | Bluetooth RX |
PB11 | USART3_RX | Ввод | Bluetooth TX |
PB12 | NSS2 | Выход | Гироскоп NCS (SPI-CS) |
PB13 | SCK2 | Выход | Гироскоп SCL (SPI-SCLK) |
PB14 | MISO2 | Ввод | Гироскоп AD0 (SPI-SDO) |
PB15 | MOSI2 | Выход | Гироскоп SDA (SPI-SDI) |
PC13 | НЕТ | НЕТ | Не подключен |
PC14 | НЕТ | НЕТ | Не подключен |
PC15 | НЕТ | НЕТ | Не подключен |
Драйвер двигателя
Штифт | Подключено к |
---|---|
IN1 | Определено в распиновке Bluepill |
IN2 | Определено в распиновке Bluepill |
IN3 | Определено в распиновке Bluepill |
IN4 | Определено в распиновке Bluepill |
ВЫХ1 | Мотор левый + (контакт 2) |
ВЫХ2 | Мотор левый – (контакт 1) |
ВЫХ3 | Мотор правый – (контакт 1) |
ВЫХ4 | Мотор правый + (контакт 2) |
EEP | Повышение напряжения 50 кОм до 5 В (перемычка J2 разомкнута) |
ULT | Не подключен |
VCC | Вмот |
ЗЕМЛЯ | ЗЕМЛЯ |
Исключения
Конфигурация прерываний (IRQ) и исключений SysTick была изменена. выведено с учетом того, что:
Приоритет настраивается, исключение и номера IRQ фиксированы.
Если программа не настраивает приоритет, то все исключения с настраиваемый приоритет имеет приоритет 0. Мы не нашли ни одной ссылки на документацию, но для опыта кажется, что по умолчанию SysTick исключение имеет более высокий приоритет, чем любое прерывание.
Для системных обработчиков значение с наименьшим приоритетом имеет приоритет над наименьшее значение номера исключения.
Для программ обслуживания прерывания (ISR) приоритет: самый низкий приоритет группы значение, наименьшее значение дополнительного приоритета и наименьшее значение номера IRQ.А пока там для этого проекта не настроено какое-либо значение второстепенного приоритета.
Вытеснение происходит только для исключений с более высоким приоритетом (нечего делать с номером исключения или второстепенным).
Для получения дополнительной информации см. STM32F10xxx / 20xxx / 21xxx / L1xxxx Руководство по программированию Cortex®-M3.
Исключения | Обработчик | Excep num | IRQ номер | Приоритет | Функциональность |
---|---|---|---|---|---|
SysTick | Система | 15 | -1 | 1 | Управление и алгоритм |
ADC1_2 | ISR | НЕТ | 18 | 1 | Низкий уровень заряда батареи |
TIM1_UP | ISR | НЕТ | 25 | 0 | Инфракрасный конечный автомат |
USART3 | ISR | НЕТ | 39 | 1 | Bluetooth |
Гироскоп
Штифт | Функция | Подключено к |
---|---|---|
SCL | SPI-SCLK | Определено в распиновке Bluepill |
SDA | SPI-SDI | Определено в распиновке Bluepill |
EDA | НЕТ | Не подключен |
ECL | НЕТ | Не подключен |
AD0 | SPI-SDO | Определено в распиновке Bluepill |
ИНТ | НЕТ | Не подключен |
NCS | SPI-CS | Определено в распиновке Bluepill |
FSYNC | НЕТ | Не подключен |
VCC | Мощность | 5 В |
ЗЕМЛЯ | Мощность | ЗЕМЛЯ |