ARM. STM32 быстрый старт. Проектирование Обвязка stm32 описание и инструкция по программированию

Однажды, я решил обновить свой ряд отладочных плат. Особой потребности в работе с новыми контроллерами я на текущий момент не испытываю, по этому было решено сделать принципиально другую отладку. В ней я хотел реализовать следующие фичи:

Возможность автономной работы. Порой очень хочется взять какое-то устройство с собой «на прогулку» или работу, но к предыдущим платам было необходимо внешнее питание. Хотелось бы, чтобы питание было бы на самой плате.

Использовать достаточно мощный чип. Так как я длительное время использовал свою отладку на stm32f100, то по мере проектов я осознал, что хочу по максимуму использовать чипы. Так как возможностей последнего мне стало не хватать (мало ног и низкая частота 24МГц), то я решил пересесть на чуть больший чип: STM32F103 , на котором у меня уже была удачная отладка, но не получившая очень широкого применения.

Использовать аккумуляторы типоразмера 18650, которые мне так полюбились своим отношением ёмкость/цена.

Использовать встроенный контроллер питания от mini-usb на MCP73833 . Хотелось попробовать сделать заводскую плату с хорошим отведением тепла от микросхемы, и посмотреть на что получится разогнать данный контроллер заряда без внешнего радиатора.

Использовать так мною любимый TPS63000 для создания 3,3В линии. Это не очень эффективный контроллер питания с точки зрения тока холостого хода, но он работает как повышающий/понижающий преобразователь, что позволяет использовать весь заряд батареи при выходном высоком выходном токе(единицы ампер).

Сделать маркировку всех сигнальных выводов платы.

Ну и так по мелочи:

Кварцы 5032 (ни одного сбоя за всё время работы)

Smd0603+кондёры 0805 на самых маленьких футпринтах.

Разделение аналоговой и цифровой земель в устройстве

Разъёмы с шагом 2,54 тип мама(PBS20) для того, чтобы в моих макетках сделанных лутом уставлять имеющиеся у меня в большом количестве разъёмы тогоже типа, но папы(дешевле выходит).

Полностью одностороннюю пайку(за исключением разъёмов под аккумулятор).

Тестирование DC-DC преобразователя.

После этого я принялся за тестирование. Для этого специально купил резистор SQP5-4R7 чтобы протестировать контроллер DC-DC на ток ~1А. В результате тестов резистор прогревался до 110*С (узнавал по пирометру), что приводило к некоторой просадке сопротивления и росту тока до 1А.

В результате было установлено, что шумов дополнительных не появляется, а вся система работает как часы. При этом температура DC-DC преобразователя находится в диапазоне 35-40*С при температуре внешней среды +27*С. Конечно, я понимаю, что с ростом нагрузки будут рости и пульсации, но я думаю что когда будет от линии питания микроконтроллера работать и достаточная силовая нагрузка, то особая точность аналоговой части не потребуется.

Тестирование зарядного устройства.

Честно говоря это первый раз, когда я решил сделать промышленно изготовленную плату с MCP73833. В предыдущий раз я посмотрел то, что данный контроллер вообще заряжает и работать + ознакомился на практике с алгоритмом его работы. В данном случае, так как приближалась сдача диплома, а попробовать очень хотелось, я просто разобрал предыдущую плату и аккуратно перенёс все компоненты на новую. В результате, при заряде батарейки после предыдущего теста я зафиксировал, что при зарядном токе в 375мА температура контроллера заряда не достигает и 45*С. Это говорит о том, что можно смело перепаять резистор управляющий зарядом, чтобы увеличить зарядный ток. Я его подниму до 500мА, а вот дальше не пойду. Связано это не с теплом, которое будет выделятся на микросхеме, а с тем, что не все мои пяти вольтовые блоки питания для мобильников выдают более 500мА. Особых защит, в тех что я смотрел, нет, и это может привести к проблемам в электросети.

Недостатки разработанной платы.

Проведя эти тесты, а также представляя как я буду работать в дальнейшем с этой платой, выяснился ряд факторов, которые я не учёл в данном проекте:

У меня не хватило опыта в трассировке для того, чтобы установить в данной печатной плате выключатель on/off на батарейку. Конечно, я это отлично умею делать путём выдёргивания 18650 из разъёма или установкой специальной пластиковой пластины. Но это же костыль друзья мои. Хорошо бы было доделать выключатель.

Нет BMS у аккумулятора на плате, хотя он нужен. Чисто технически TPS63000 работает в диапазоне входных напряжений 1,8-6В. Это возможно при глубоком разряде аккумулятора будет приводить к его порче. Это проблема решается некоторой модификацией самой батарейки и установлением в неё дешёвого bms прямо на батарейку со впихиванием/подрезанием одного из контактов. Опять же не критично, но с костылями.

В разъёме USB по цифровым линиям ничего не подключено. В этом котроллере есть встроенный USB интерфейс, но я его не вывел на разъём. Связано это с тем, что в текущих проектах это не нужно и поставить нормальную обвязку usb интерфейса на плате(с защитными диодами и микросхемой согласования уровней мне как то не доводилось).

Нет светодиода PowerGood на плате. Когда чип работает, ничего о этом не говорит. Сделано это намеренно, чтобы продлить срок жизни аккумулятора, но порой не удобно. В дальнейшем я думаю сделать на мало используемом пине светодиод и дать ссылку на код включения светодиода при работе контроллера

Недостаточная компактность платы. Текущие габариты платы 34х80 мм. Всегда хочется решение компактнее. Может и получится. Хотя с другой стороны, на обратной стороне печатной платы не так много и места.

Некоторым не очень удобный разъём для программирования и кнопка резет. Дотянутся до неё когда внутри плата сложно, но опять же можно отвёрткой (костыли).

Достаточно высокая цена устройства. Я делал прототипным производством в панели, по этому цена снижена, но один чёрт далека от китайской ардуинки/стмки за 200 руб.

Всем желающим такую штуку себе.

В настоящее время есть 2 таких платы, так что все желающие могу её приобрести за 1700 руб без доставки и аккумулятора 18650. Почему я не высылаю аккумулятор? – дело в почте России. Я был бы счастлив, если бы они пересылали аккумуляторы, хотя первому заказавшему я постараюсь отправить одну 18650 банку сразу с устройством бесплатно.

Связаться со мной можно по почте: [email protected]

С моей точки зрения о цене: сейчас за эти деньги можно купить оригинальное ардуино или дискавери с Китая. Но ни то, ни другое вы не сможете взять с собой на целый день без внешнего обвеса и аккумуляторов. А тут вы получается готовую штуку, в которую можно вставить свою плату и получить очень жёсткую конструкцию, которую можно спокойно носить с собой не переживая, что где-то отойдёт пайка или устройство испытает короткое замыкание.

Рисунок 1. Схема элементов STM32F103RC_board

Некоторая доработка. Версия 1.0.

Так уж получилось, что готовя плату к первой продаже (не мой вышезапаянный образец) я решил доделать в ней ряд фичей, для потребителя.

С первого взгляда бросаются следующие вещи:

Нет «гребёнки» PBS-30 для вставки в печатную плату. К моему сожалению тут работает 2 фактора (они у меня закончились и заказчик попросил их не ставить.

Разъём для программирования сделан другими угловыми выводами. В прошлый раз я тоже хотел использовать такие выводы, но в доступном мне магазине их не было. В итоге, меня случайно занесло на один из московских радиорынков, где я нашёл широчайший выбор данных разъёмов и купил нужных.

Светодиоды немного другие. К моему сожалению я беру SMD-светодиоды из большой кучи, и не всегда сам знаю какого они цвета. В этот раз это два зелёных и один белый светодиод.

Но дьявол часто кроется в деталях, так оказывается и тут. На данной плате я пробовал разные резисторы в управлении зарядным током. В итоге было выявлено, что микросхема MCP73833 на данной плате нормально держит ток в 800мА и при заряде с 2,5В Li-Ion батареек прогревается до 65-70*С. Конечно, по даташиту она работает с токами до 2А, но я честно пока не представляю как их реализовать на корпусе msop-10. Может быть в следующем корпусе, в котором эта проблема решается лучше, получится вытянуть 2А.

Дополнительной мелкой деталью, которую мало кто вообще заметит, является установка индуктивности от Murata а не её китайского брата близнеца с неизвестным именем. Выглядят они похоже, только данная лучше экранированна.

Предосторожность.

Во время проведения полной диагностической проверки я спалил один STM32F103RCT6. Как я это сделал:

Я взял обычный мультиметр и ткнулся им в резистор обратной связи. Пр этом TPS63000 видит просадку напряжения на обратной связи и начинает быстро повышать напряжение на своём выходе. В итоге, по проведённому тесту с отпаянным контроллером: напряжение в импульсе вырастало до 7В. При этом контроллер испытывал перенапряжение и умирал.

Забавно происходило потом: по входу на 3,6В контроллер начинал потреблять 0,6А. Это связано с тем, что в TPS63000 встроена защита по току в 2А, Именно данный ток и протекал через убитый микроконтроллер. При этом работоспособность всей оставшейся схемы сохранялась.

Диагностировать данную проблему легко: достаточно подключить индивидуальный измерительный термометр (палец) к контроллеру, и если он начинает прогреваться, то значит он мёртв.

Упаковка отправленной платы

Отсылая данную плату моему коллеге , я решил её упаковать получше, чтобы Почта Р. не сломало всё. В итоге получилось так:





Данная статья, которая является еще одним "быстрым стартом" в освоении ARM-контроллеров, возможно поможет сделать первые шаги в освоении 32-битных контроллеров ARM на базе ядра Cortex-M3 - STM32F1xxx серии. Возможно данная статья (которых на эту тему появляется как грибов после дождя) станет для кого-то полезной.

Введение

Почему ARM?
1. Есть из чего выбрать (разными производителями сегодня выпускается более 240 ARM-контроллеров)
2. Низкая цена (например за 1$ можно получить 37хI / O, 16K Flash, 4K RAM, 2xUART, 10x12bitADC, 6x16bitPWM).

А начнем нашу работу с контроллеров фирмы ST Microelectronics. Контроллеры на основе ядра ARM Cortex-M3 характеризуются широким набором периферии, высоким уровнем рабочих характеристик, низкой цене
P.S. В самом начале создается впечатление, что ARM"ы это какие-то страшные (в пайке, разводке, программировании) существа. Но это только на первый взгляд:) и вы в этом сами убедитесь.

Итак, изучать ARMы будем на примере контроллеров STM32F1. Одновременно эта серия имеет несколько линеек:

  • Value line STM32F100 - 24 МГц CPU, motor control, CEC.
  • Access line STM32F101 - 36 МГц CPU, до 1 Mб Flash
  • USB access line STM32F102 - 48 МГц CPU with USB FS
  • Performance line STM32F103 - 72 МГц, до 1 Mб Flash, motor control, USB, CAN
  • Connectivity line STM32F105/107 - 72 МГц CPU, Ethernet MAC, CAN, USB 2.0 OTG

Также существует следующая классификация:

Контроллеры STM32 можно заставить загружаться с 3-х областей памяти (в зависимости от состояния ножек BOOT0 и BOOT1 при старте контроллера или после его сброса). Записать программу в память контроллера можно следующими способами:

1 способ:
Используя загрузчик (он уже записан в системную память) и USART1 (USART2 remaped): использует внутренний тактовый сигнал 8 МГц. Чтобы запустить встроенный загрузчик, зашитый в контроллер производителем, достаточно просто бросить на лапки контроллера TX1, RX1 сигнал с преобразователя RS232-3.3В (например на базе FT232RL) и выставить перед этим BOOT0 = 1 и BOOT1 = 0 жмем RESET и можем шить программу в контроллер. А зашивается она в программе Flash Loader Demonstartor от STM (для Windows).

PS. Если вы сидите под LINUX и не имеете отладочной платы типа дискавери, можно заливать прошивку в контроллер через всеми любимый rs-232 (собственно - через преобразователь rs-232-3,3В). Для этого нужно использовать python-скрипт (Ivan A-R) (для LINUX или MACOSX).
Для начала у вас должен быть установлен Python 2.6 версии и библиотека для работы с последовательным портом - PySerial library.
Теперь, чтобы запустить скрипт stmloader.py (из терминала, разумеется) нужно его немного подправить под свой компьютер: откроем его в текстовом редакторе.
Набираем в командной строке
~$ dmesg | grep tty
чтобы увидеть все последовательные порты ПК.
и после набора...
~$ setserial -g /dev/ttyS
мы узнаем путь к нашему 232-му порту. Если система ругается на setserial, установим его
~$ sudo apt-get install setserial
мы узнаем путь к нашему физическому порту (например, у меня - /dev/ttyS0). Теперь нужно записать этот путь в файл скрипта stm32loader.py вместо дефолтного «/dev/tty.usbserial-...». Набираем в терминале
~$ python stm32loader.py -h
...для вызова справки и заливаем прошивку в наш контроллер.

2 способ:
Через USB OTG, используя DFU-режим, требует внешнего кварца на 8 МГц, 14.7456 МГц или 25 МГц (этот загрузчик есть не у всех контроллерах с USB OTG надо внимательно смотреть на маркировку вашего контроллера)

3 способ:
JTAG/SWD. Ну и для тех, кто имеет демоплату типа Discovery или самопальный JTAG/SWD программатор, можно заливать код и уже отлаживать свой микроконтроллер этим способом. Для JTAG в микроконтроллере отведено 6 лапок (TRST, TDI, TMS, TCK, TDO, RST) + 2 на питание. SWD использует 4 сигнала (SWDIO, SWCLK SWO, RESET) и 2 на питание.

PS. В среде EAGLE я набросал несколько схем-заготовок для 48-ми, 64-х и 100-ногих контроллеров (папка eagle), а stm32loader содержит скрипт stm32loader.py

Отладочная плата STM32 Discovery предназначена для изучения возможностей и принципов программирования 32-разрядных ARM микроконтроллеров серии STM32 от фирмы STMicroelectronics . На плате установлены все необходимые элементы для начала работы с данными микросхемами. Структура платы разделена на две части – отладчик ST-Link и непосредственно сам микроконтроллер.

Микроконтроллер

На плате STM32 Discovery установлен микроконтроллер STM32F100RBT6B, являющийся одним из наиболее простых в серии STM32. STM32F100RBT6B представляет собой 32-разрядный процессор с ядром ARM, серии Cortex-M3. Объем встроенной памяти составляет 128кБ Flash-памяти и 8кБ ОЗУ. Микросхема выполнена в 64 выводном корпусе LQFP для поверхностного монтажа.

Из периферийных устройств в STM32F100 реализованы:

  • 5 портов ввода вывода
  • 12-битный АЦП
  • 2 12-битных ЦАП
  • 3 интерфейса USART
  • интерфейс SPI
  • два интерфейса I2C
  • таймеры

Обвязка микроконтроллера

Помимо микроконтроллера на плате STM32 Discovery специалистами STMicroelectronics предусмотрены следующие устройства:

  • два пользовательских светодиода
  • пользовательская кнопка
  • кнопка сброс
  • кварцевый резонатор на 8 МГц
  • резонатор на 32768 Гц для работы часов реального времени и сторожевого таймера

Все линии портов микроконтроллера выведены на штыревые разъемы, расположенные по краям платы. Большим плюсом является доступность этих разъемов с обеих сторон.

Для питания МК используется напряжение 3.3В. Питание внешних устройств возможно от встроенного стабилизатора напряжения 5В.

Отладчик

STM32 Discovery оснащен фирменным отладчиком от STMicroelectronics, под названием ST-Link. Данная модель не совместима с изделиями от других производителей. Отладчик реализован на микроконтроллере STM32F103 и позволяет записывать программу в базовый МК и отслеживать ее работу. Для связи с компьютером используется разъем типа Mini-USB, который также позволяет питать устройства на плате. Для индикации работы отладчика используются два светодиода красного цвета. Один горит при включении питания, второй при работе отладчика.

При необходимости, отладчик может использоваться отдельно от целевого микроконтроллера, для совместной работы с другими устройствами на базе микросхем STMicroelectronikcs.

Программное обеспечение

Для работы с STM32 Discovery можно использовать несколько различных IDE. STMicroelectronics предлагает собственную среду разработки под названием Atollic True STUDIO. В версии LITE данная среда поставляется бесплатно. Также микроконтроллеры STM32 поддерживают такие, широко известные пакеты, как IAR, Keil, CODE RED. Прошивку целевого микроконтроллера возможно выполнить с помощью бесплатной утилиты ST-Link Utiliuty.

You have no rights to post comments

О том, как прикрутить к микроконтроллеру ёмкостный сенсор прикосновения. Эта идея показалась мне довольно перспективной, некоторым приборам сенсорные клавиши подошли бы куда лучше механических. В этой статье я расскажу о своей реализации этой полезной технологии на основе отладочной платы STM32 Discovery.

Итак, только начав осваивать STM32, я решил в качестве упражнения добавить устройству способность определять прикосновения. Начав разбираться с теорией и практикой по вышеупомянутой статье, я повторил схему товарища "a. Она работала идеально, но мне, любителю минимализма, захотелось её упростить, избавившись от лишних элементов. Лишними на мой взгляд оказались внешний резистор и дорожка к питанию. Всё это уже есть в большинстве микроконтроллеров, в том числе в AVR и в STM32. Я имею в виду подтягивающие резисторы портов ввода/вывода. Почему бы не заряжать пластинку и наши пальцы через них? В ожидании подвоха я собрал на макетке схему, которая, к моему удивлению, заработала с первого же раза. Собственно говоря, схемой это называть даже смешно, ведь всё что нам нужно - это просто подсоединить контактную пластинку к ножке отладочной платы. Всю работу на себя возьмёт микроконтроллер.

Что же из себя представляет программа? Во первых две функции:
Первая выводит на ножку сенсора (нулевой пин регистра C) логический «0»

Void Sensor_Ground (void) { GPIOC->CRL = 0x1; GPIOC->BRR |= 0x1; }

Вторая настраивает тот же вывод на вход, с подтяжкой к питанию.

Void Sensor_InPullUp (void) { GPIOC->CRL = 0x8; GPIOC->BSRR |= 0x1; }

Теперь в начале цикла опроса вызовем Sensor_Ground(), и подождём некоторое время чтобы разрядить на землю весь остаточный заряд на сенсоре. Затем обнулим переменную count, которой будем считать время зарядки сенсора и вызовем Sensor_InPullUp().

Sensor_Ground(); Delay(0xFF); //простой пустой счётчик count = 0; Sensor_InPullUp();

Теперь сенсор начинает заряжаться через внутренний подтягивающий резистор номиналом порядка десятков КОм (30..50КОм у STM32). Постоянная времени такой цепи будет равняться считанным тактам, поэтому я поменял кварцевый резонатор на отладочной плате на более быстрый, 20МГц (кстати, я не сразу заметил, что оказывается на STM32 Discovery кварц меняется без пайки). Итак считаем такты процессора, пока на входе не появится логическая единица:

While(!(GPIOC->IDR & 0x1)) { count++; }

После выхода из этого цикла в переменной count будет храниться число, пропорциональное ёмкости сенсорной пластинки. В моём случае с чипом на 20МГц значение count равняется 1 при отсутствии нажатия, 7-10 при самом лёгком касании, 15-20 при нормальном прикосновении. Остаётся лишь сравнить её с пороговым значением и не забыть снова вызвать Sensor_Ground(), чтобы к следующему циклу опроса сенсор уже был разряжен.
Полученной чувствительности хватает для уверенного определения прикосновений к голым металлическим площадкам. При прикрытии сенсора листом бумаги или пластика чувствительность падает в три - четыре раза, хорошо определяются только уверенные нажатия. Чтобы увеличить чувствительность в случае, когда сенсор необходимо прикрыть защитным материалом, можно повысить тактовую частоту микроконтроллера. С чипом серии STM32F103, способном работать на частотах до 72МГц, помехой не будут и миллиметровые преграды между пальцем и сенсором.
По сравнению с реализацией "a, мой подход работает гораздо быстрее (порядка десятка тактов на опрос одного сенсора), поэтому я не стал усложнять программу, настраивая прерывания по таймеру.

Напоследок видео с демонстрацией работы сенсора.

Main.c тестовой программы.

На микроконтроллер

Cпасибо пользователю за очень полезную статью ARM-микроконтроллеры STM32F. Быстрый старт c STM32-Discovery , пользователю за идею и доходчивое теоретическое описание.

UPD. После комментариев "a я решил разобраться с тактированием и обнаружил, что по умолчанию STM32 Discovery настроен на тактовую частоту
(HSE / 2) * 6 = 24 MHz, где HSE - частота внешнего кварца. Соответственно поменяв кварц с 8 на 20 МГц, я заставил бедную STM"ку работать на 60 МГц. Так что во-первых, некоторые из выводов очевидно не совсем верны, во-вторых то чем я занимался может привести к сбоям чипа. На случай таких сбоев в микроконтроллере есть HardFault прерывание, воспользовавшись им, я проверил более высокие частоты. Так вот, сбоить чип начинает только на 70 МГц. Но хотя эту конкретную программу контроллер переваривает на 60МГц, при использовании периферии или работе с Flash памятью он может повести себя непредсказуемо. Вывод: относитесь к данному топику как к эксперименту, повторяйте только на свой страх и риск.

В последние годы 32 разрядные микроконтроллеры (МК) на основе процессоров ARM стремительно завоёвывают мир электроники. Этот прорыв обусловлен их высокой производи тельностью, совершенной архитектурой, малым потреблением энергии, низкой стоимостью и развитыми средствами программирования.

КРАТКАЯ ИСТОРИЯ
Название ARM является аббревиатурой Advanced RISC Machines, где RISC (Reduced Instruction Set Computer) обозначает архитектуру процессоров с сокращённым набором команд. Подавляющее число популярных МК, а пример семейства PIC и AVR, также имеют архитектуру RISC, которая позволила увеличить быстродействие за счёт упрощения декодирования инструкций и ускорения их выполнения. Появление совершенных и производительных 32 разрядных ARMмикроконтроллеров позволяет перейти к решению более сложных задач, с которыми уже не справляются 8 и 16 разрядные МК. Микропроцессорная архитектура ARM с 32 разрядным ядром и набором команд RISC была разработана британской компанией ARM Ltd, которая занимается исключительно разработкой ядер, компиляторов и средств отладки. Компания не производит МК, а продаёт лицензии на их производство. МК ARM – один из быстро развивающихся сегментов рынка МК. Эти приборы используют технологии энергосбережения, поэтому находят широкое применение во встраиваемых системах и доминируют на рынке мобильных устройств, для которых важно низкое энергопотребление. Кроме того, ARM микроконтроллеры активно применяются в средствах связи, портативных и встраиваемых устройствах, где требуется высокая производительность. Особенностью архитектуры ARM является вычислительное ядро процессора, не оснащённое какими либо дополнительными элементами. Каждый разработчик процессоров должен самостоятельно до оснастить это ядро необходимыми блоками под свои конкретные задачи. Такой подход хорошо себя зарекомендовал для крупных производителей микросхем, хотя изначально был ориентирован на классические процессорные решения. Процессоры ARM уже прошли несколько этапов развития и хорошо известны семействами ARM7, ARM9, ARM11 и Cortex. Последнее делится на подсемейства классических процессоров CortexA, процессоров для систем реального времени CortexR и микропроцессорные ядра CortexM. Именно ядра CortexM стали основой для разработки большого класса 32 разрядных МК. От других вариантов архитектуры Cortex они отличаются, прежде всего, использованием 16разрядного набора инструкций Thumb2. Этот набор совмещал в себе производительность и компактность «классических» инструкций ARM и Thumb и разрабатывался специально для работы с языками С и С++, что существенно повышает качество кода. Большим достоинством МК, построенных на ядре CortexM, является их программная совместимость, что теоретически позволяет использовать программный код на языке высокого уровня в моделях разных производителей. Кроме обозначения области применения ядра, разработчики МК указывают производительность ядра CortexM по десятибалльной шкале. На сегодняшний день самыми популярными вариантами являются CortexM3 и CortexM4. МК с архитектурой ARM производят такие компании, как Analog Devices, Atmel, Xilinx, Altera, Cirrus Logic, Intel, Marvell, NXP, STMicroelectronics, Samsung, LG, MediaTek, MStar, Qualcomm, SonyEricsson, Texas Instruments, nVidia, Freescale, Миландр, HiSilicon и другие.
Благодаря оптимизированной архитектуре стоимость МК на основе ядра CortexM в некоторых случаях даже ни же, чем у многих 8разрядных приборов. «Младшие» модели в настоящее время можно приобрести по 30 руб. за корпус, что создаёт конкуренцию предыдущим поколениям МК. МИКРОКОНТРОЛЛЕРЫ STM32 Рассмотрим наиболее доступный и широко распространённый МК семейства STM32F100 от компании STMicroelectronics , которая является одним из ведущих мировых производителей МК. Недавно компания объявила о начале производства 32битного МК, использующего преимущества индустриального
ядра STM32 в недорогих приложениях. МК семейства STM32F100 Value line предназначены для устройств, где не хватает производительности 16разрядных МК, а богатый функционал «обычных» 32разрядных приборов является избыточным. Линейка МК STM32F100 базируется на современном ядре ARM CortexM3 с периферией, оптимизированной для применения в типичных приложениях, где использовались 16разрядные МК. Производительность МК STM32F100 на тактовой частоте 24 МГц превосходит большинство 16разрядных МК. Данная линейка включает приборы с различными параметрами:
● от 16 до 128 кбайт флэшпамяти программ;
● от 4 до 8 кбайт оперативной памяти;
● до 80 портов ввода вывода GPIO;
● до девяти 16разрядных таймеров с расширенными функциями;
● два сторожевых таймера;
● 16канальный высокоскоростной 12разрядный АЦП;
● два 12разрядных ЦАП со встроенными генераторами сигналов;
● до трёх интерфейсов UART с поддержкой режимов IrDA, LIN и ISO7816;
● до двух интерфейсов SPI;
● до двух интерфейсов I2С с поддержкой режимов SMBus и PMBus;
● 7канальный блок прямого доступа к памяти (DMA);
● интерфейс CEC (Consumer Electronics Control), включённый в стандарт HDMI;
● часы реального времени (RTC);
● контроллер вложенных прерываний NVIC.

Функциональная схема STM32F100 представлена на рисунке 1.

Рис. 1. Архитектура МК линейки STM32F100

Дополнительным удобством является совместимость приборов по выводам, что позволяет, при необходимости, использовать любой МК семейства с большей функциональностью и памятью без переработки печатной платы. Линейка контроллеров STM32F100 производится в трёх типах корпусов LQFP48, LQFP64 и LQFP100, имеющих, соответственно, 48, 64 и 100 выводов. Назначение выводов представлено на рисунках 2, 3 и 4. Такие корпуса можно устанавливать на печатные платы без применения специального оборудования, что является весомым фактором при мелкосерийном производстве.


Рис. 2. МК STM32 в корпусе LQFP48 Рис. 3. МК STM32 в корпусе LQFP64


Рис. 4. МК STM32 в корпусе LQFP100

STM32F100 – доступный и оптимизированный прибор, базирующийся на ядре CortexM3, поддерживается развитой средой разработки МК семейства STM32, которая содержит
бесплатные библиотеки для всей пе риферии, включая управление двига телями и сенсорными клавиатурами.

СХЕМА ВКЛЮЧЕНИЯ STM32F100C4
Рассмотрим практическое использование МК на примере самого простого прибора STM32F100C4, который, тем не менее, содержит все основные блоки линейки STM32F100. Принципиальная электрическая схема включения STM32F100C4 представлена на рисунке 5.


Рис. 5. Схема включения МК STM32F100C4

Конденсатор С1 обеспечивает сброс МК при включении питания, а конденсаторы С2-С6 фильтруют напряжение питания. Резисторы R1 и R2 ограничивают сигнальный ток выводов МК. В качестве источника тактовой частоты используется внутренний генератор, поэтому нет необходимости применять внешний кварцевый резонатор.


Входы BOOT0 и BOOT1 позволяют выбрать способ загрузки МК при включении питания в соответствии с таб лицей. Вход BOOT0 подключён к шине нулевого потенциала через резистор R2, который предохраняет вывод BOOT0 от короткого замыкания при его использовании в качестве выход ного порта PB2. С помощью соединителя J1 и одной перемычки можно из менять потенциал на входе BOOT0, определяя тем самым способ загрузки МК – из флэшпамяти или от встроенного загрузчика. При необходимости загрузки МК из оперативной памяти аналогичный соединитель с перемычкой можно подключить и к входу BOOT1.
Программирование МК осуществляется через последовательный порт UART1 или через специальные программаторы – отладчики JTAG или STLink. Последний входит в состав популярного отладочного устройства STM32VLDISCOVERY , изображённого на рисунке 6. На плате STM32VLDIS COVERY 4контактный разъём программатора – отладчика STLink – имеет обозначение SWD. Автор статьи предлагает программировать МК через последовательный порт UART1, поскольку это значительно проще, не требует специального оборудования и не уступает в скорости JTAG или ST Link. В качестве управляющего устройства, способного формировать команды и отображать результаты работы про граммы МК, а также в качестве программатора можно использовать любой персональный компьютер (ПК), имеющий последовательный COM порт или порт USB с преобразователем USBRS232.

Для сопряжения COMпорта ПК с МК подойдет любой преобразователь сиг налов RS232 в уровни логических сигналов от 0 до 3,3 В, например, микросхема ADM3232. Линия передачи TXD последовательного порта компьютера, после преобразователя уровней, должна подключаться к входу PA10 микроконтроллера, а линия приёмника RXD, через аналогичный преобразователь, – к выходу PA9.

При необходимости использования энергонезависимых часов МК, к нему следует подключить элемент питания типа CR2032 с напряжением 3 В и кварцевый резонатор на частоту 32768 Гц. Для этого МК оснащён выводами Vbat/GND и OSC32_IN/OSC32_OUT. Предварительно вывод Vbat необходимо отключить от шины питания 3,3 В.

Оставшиеся свободными выводы МК можно использовать по необходимости. Для этого их следует подключить к разъёмам, которые расположены по периметру печатной платы для МК, по аналогии с популярными устройствами Arduino и отладочной платой STM32VLDISCOVERY .


Рис. 6. Отладочное устройство STM32VLDISCOVERY


Схема электрическая принципиальная STM32VLDISCOVERY.

Таким образом, в зависимости от назначения и способа применения МК, к нему можно подключать необходимые элементы, чтобы задействовать другие функциональные блоки и пор ты, например, ADC, DAC, SPI, I2C и т.п. В дальнейшем эти устройства будут рас смотрены подробнее.

ПРОГРАММИРОВАНИЕ
Сегодня многие компании предлагают средства для создания и отладки программ микроконтроллеров STM32. К их числу относятся Keil от ARM Ltd, IAR Embedded Workbench for ARM, Atol lic TrueStudio, CooCox IDE, GCC и Eclipse IDE. Разработчик может выбрать про граммные средства по своему пред почтению. Ниже будет описан инструментарий Keil uVision 4 от компании Keil , который поддерживает огромное число типов МК, имеет развитую систему отладочных средств и может быть использован бесплатно с ограничениями размера генерируемого кода 32 кбайт (что, фактически, максимально для рассматриваемых МК).

Простой и быстрый старт с CooCox CoIDE.

Итак приступим. Идем на официальный сайт CooCox и качаем последнюю версию CooCox CoIDE . Для скачивания необходимо зарегистрироваться, регистрация простая и бесплатная. Затем инсталлируем скачанный файл и запускаем.

CooCox CoIDE — среда разработки, на базе Eclipse, которая помимо STM32 поддерживает кучу других семейств микроконтроллеров: Freescale, Holtek, NXP, Nuvoton, TI, Atmel SAM, Energy Micro и др. С каждой новой версией CoIDE список МК постоянно пополняется. После успешной установки CoIDE запускаем:

Появится стартовое окно Step 1, в котором необходимо выбрать производителя нашего микроконтроллера. Нажимаем ST и переходим к Step 2 (выбор микроконтроллера), в котором необходимо выбрать конкретную модель. У нас STM32F100RBT6B, поэтому нажимаем на соответствующую модель:

Справа, в окне Help отображаются краткие характеристики каждого чипа. После выбора нужного нам микроконтроллера переходим к третьему шагу Step 3 — к выбору необходимых библиотек для работы:

Давайте создадим простейший проект для мигания светодиодом, как это принято для изучения микроконтроллеров.

Для этого нам понадобится библиотека GPIO, при включении которой, CoIDE попросит создать новый проект. На это предложение нажимаем Yes, указываем папку где будет храниться наш проект и его название. При этом, CoIDE подключит к проекту 3 другие, необходимые для работы библиотеки, а также создаст всю необходимую структуру проекта:

Чем еще хорош CoIDE, это тем, что в нем есть возможность загружать примеры прямо в среду разработки. В вкладке Components вы можете видеть, что почти к каждой библиотеке есть примеры, нажимаем на GPIO (with 4 examples) и видим их:

Туда можно добавлять и свои примеры. Как видно на скриншоте выше, в примерах уже присутствует код для мигания светодиодом GPIO_Blink. Можно нажать кнопку add и он добавиться в проект, но как подключаемый файл, поэтому мы сделаем по другому просто скопируем весь код примера в файл main.c. Единственное, строку void GPIO_Blink(void) замените на int main(void). Итак, нажимаем F7 (или в меню выбираем Project->Build), чтобы скомпилировать проект и… не тут то было!

Среде нужен компилятор GCC, а у нас его нет. Поэтому идем на страничку GNU Tools for ARM Embedded Processors , справа выбираем тип вашей ОС и качаем последнюю версию тулчайна. Затем запускаем файл и инсталируем gcc toolchain. Далее, в настройках CoIDE укажем правильный путь к тулчайну:

Опять нажимаем F7 (Project->Build) и видим, что компиляция прошла успешно:

Осталось прошить микроконтроллер. Для этого при помощи USB подключаем нашу плату к компьютеру. Затем, в настройках дебаггера необходимо поставить ST-Link, для этого в меню выбираем Project->Configuration и открываем вкладку Debugger. В выпадающем списке выбираем ST-Link и закрываем окно:

Попробуем прошить МК. В меню выбираем Flash->Program Download (или на панели инструментов щелкаем по соответствующей иконке) и видим, что МК успешно прошит:

На плате наблюдаем мигающий светодиод, видео или фото я думаю приводить нет смысла, т.к. все это видели.

Также, в CoIDE работают различные режимы отладки, для этого нажимаем CTRL+F5 (или в меню Debug->Debug):

На этом все. Как видите, настройка среды CoIDE и работа с ней очень проста. Надеюсь данная статья подтолкнет вас в изучении очень перспективных и недорогих микроконтроллеров STM32.