stm32 что это такое

STM32 Часть 1: Основы

Нельзя доверять коду, который вы не написали полностью сами. — Кен Томпсон

Пожалуй, моя самая любимая цитата. Именно она и стала причиной по которой я решил нырнуть в самую глубь кроличьей норы. Свой путь в мир программирования я начал совсем недавно, прошло всего около месяца и я решил писать статьи для закрепления материала. Все началось с простой задачи, синхронизировать лампы в своей фото студии с помощью Ардуины. Задача была решена, но в фото студию я больше не заходил, времени нет. С того момента я решил основательно заняться программированием микроконтроллеров. Ардуина, хоть и привлекательна в своей простоте, как платформа мне не понравилась. Выбор пал на компанию ST и их популярную продукцию. В тот момент я еще не представлял в чем особо разница, но как типичный потребитель я сравнил скорость «процессора» и количество памяти, купил себе внушительную плату с дисплеем STM32F746NG — Discovery. Я пропущу моменты отчаяния и сразу перейду к делу.

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

Список всего того что понадобится:

Что нам понадобится:

Теперь разберем данный пример. Extern означает, что символ внешний, и этот символ мы объявили в файле Linker.ld, к нему мы еще вернемся чуть позже.

Тут мы используем атрибут, который скажет компилятору поместить массив в секцию isr_vector и что даже если мы не используем его в коде, то он все равно должен быть обязательно включен в программу. И первым его элементом будет тот самый указатель.

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

Приведу пример. дано что стэк начинается с 0x20010000 а код программы находиться 0x0800008. то массив можно написать как

То есть, первым делом контроллер инициализирует стэк, а потом считает адрес первой инструкции и загрузит ее в регистр программного счетчика. Теперь самое главное, в зависимости от модели эти цифры могу быть разные, но на примере stm32f7 я могу уверенно сказать что этот массив должен быть в памяти по адресу 0x08000000. Именно с этого адреса мк начнет свою работу после включения или ресета.

Теперь прервемся и обратим внимание на то как именно положить этот массив в нужную нам секцию. Этим занимается «ld» или линкер. Это программа собирает всю нашу программу воедино и для этого используется скрипт Linker.ld. Привожу пример и дальше разберем его.

Мы поместили массив куда надо теперь надо какую нибудь инструкцию нашему мк для работы. Вот дополненный init.c:

Как я уже упомянул ранее, вторым адресом должен быть указатель на первую функцию или инструкцию. И опять атрибуты, но тут все просто, функция не возвращает ни каких значений и следует ни каким ABI при входе, то есть голая «naked». В такие функции обычный пихают ассемблер.

Теперь самое время скомпилировать наш код, и посмотреть что же там под капотом. Makefile пока трогать не будем.

И тут мы видим много непонятного. по порядку:

И тут мы увидим вывод. «00000000: 00 01 00 02 09 00 00 08» что будет символизировать нам об успехе. Это моя первая статья и я не вполне смог раскрыть весь материал и суть, поэтому в следующей я более подробно опишу механизмы и мы друзья сможем перейти к программе которая не будет мигать лампочкой, но настроим тактирование самого процессора и шин.

Источник

STM32 – микроконтроллер для начинающих после Arduino

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

Что такое STM32

STM32 – это платформа, в основе которой лежат микроконтроллеры STMicroelectronics на базе ARM процессора, различные модули и периферия, а также программные решения (IDE) для работы с железом. Решения на базе stm активно используются благодаря производительности микроконтроллера, его удачной архитектуре, малом энергопотреблении, небольшой цене. В настоящее время STM32 состоит уже из нескольких линеек для самых разных предназначений.

История появления

Серия STM32 была выпущена в 2010 году. До этого компанией STMicroelectronics уже выпускались 4 семейства микроконтроллеров на базе ARM, но они были хуже по своим характеристикам. Контроллеры STM32 получились оптимальными по свойствам и цене. Изначально они выпускались в 14 вариантах, которые были разделены на 2 группы – с тактовой частотой до 2 МГц и с частотой до 36 МГц. Программное обеспечение у обеих групп одинаковое, как и расположение контактов. Первые изделия выпускались со встроенной флеш-памятью 128 кбайт и ОЗУ 20 кбайт. Сейчас линейка существенно расширилась, появились новые представители с повышенными значениями ОЗУ и Flash памяти.

Достоинства и недостатки STM32

Минусы STM32 не дают пока микроконтроллеру стать заменой Ардуино.

Сравнение STM32 с Arduino

По техническим характеристикам Ардуино проигрывает STM32. Тактовая частота микроконтроллеров Ардуино ниже – 16 МГц против 72 МГц STM32. Количество выводов GRIO у STM32 больше. Объем памяти у STM32 также выше. Нельзя не отметить pin-to-pin совместимость STM32 – для замены одного изделия на другое не нужно менять плату. Но полностью заменить ардуино конкуренты не могут. В первую очередь это связано с высоким порогом вхождения – для работы с STM32 нужно иметь базис. Платы Ардуино более распространены, и, если у пользователя возникает проблема, найти решение можно на форумах. Также для Ардуино созданы различные шилды и модули, расширяющие функционал. Несмотря на преимущества, по соотношению цена/качество выигрывает STM32.

Обзор продуктовых линеек

Семейство STM32 имеет широкий ассортимент изделий, различающихся по объему памяти, производительности, потреблению энергии и другим характеристикам.

Серии STM32F-1, STM32F-2 и STM32L полностью совместимы. Каждая из серий имеет десятки микросхем, которые можно без труда поменять на другие изделия. STM32F-1 была первой линейкой, ее производительность была ограничена. Из-за этого по характеристикам контроллеры быстро догнали изделия семейства Stellaris и LPC17. Позднее была выпущена STM32F-2 с улучшенными характеристиками – тактовая частота достигала 120 МГц. Отличается высокой процессорной мощностью, которая достигнута благодаря новой технологии производства 90 нм. Линейка STM32L представлена моделями, которые изготовлены по специальному технологическому процессу. Утечки транзисторов минимальны, благодаря чему приборы показывают лучшие значения.

Важно отметить, что контроллеры линейки STM32W не имеют pin-to-pin совместимости с STM32F-1, STM32F-2 и STM32L. Причина заключается в том, что линейку разрабатывала компания, которая предоставила радиочастотную часть. Это наложило ограничения на разработку для компании ST.

Микросхема STM32F100R4 имеет минимальный набор функций. Объем флэш памяти составляет 16 Кбайт, ОЗУ – 4 Кбайт, тактовая частота составляет 12 МГц. Если требуется более быстрое устройство с увеличенным объемом флэш-памяти до 128 Кбайт, подойдет STM32F101RB. USB интерфейс имеется у изделия STM32F103RE. Существует аналогичное устройство, но с более низким потреблением – это STM32L151RB.

Программное обеспечение для работы с контроллером

Для ARM архитектуры разработано множество сред разработки. К самым известным и дорогостоящим относятся инструменты фирм Keil и IAR System. Программы этих компаний предлагают самые продвинутые инструментарии для оптимизации кода. Также дополнительно существуют различные системы – USB стеки, TCP/IP-стеки и прочие. Применяя системы Keil, пользователь получает хороший уровень технической поддержки.

Также для STM32 используется среда разработки Eclipse и построенные на ней системы Atollic TrueStudio (платная) и CooCox IDE (CoIDE) (бесплатная). Обычно используется последняя. Ее преимущества перед другими средами разработки:

Единственный недостаток среды разработки CooCox IDE – сборка есть только под Windows.

STM32 Discovery

Начать изучение микроконтроллера STM32 лучше с платы Discovery. Это связано с тем, что на этой плате есть встроенный программатор. Его можно подключить к компьютеру через USB кабель и использовать как в качестве программируемого микроконтроллера, так и для внешних устройств. Плата Discovery имеет полную разводку пинов с контроллера на пины платы. На плату можно подключать различные сенсоры, микрофоны и другие периферийные устройства.

Что потребуется для подключения STM32 к компьютеру

Чтобы начать работу, потребуются следующие компоненты:

В качестве примера первая программа будет рассмотрена в среде CooCox IDE.

Первая программа

Обучение следует начинать с простейшего – с Hello World. Для начала нужно установить CooCox IDE на компьютер. Установка стандартная:

Когда программа установлена, ее нужно открыть. Следует перейти во вкладку Browse in Repository и выбрать ST – свой микроконтроллер.

Далее на экране появится список библиотек, которые можно подключить. Для первой программы потребуются системные CMSIS core и CMSIS Boot, библиотека для работы с системой тактирования RCC, GPIO для работами с пинами.

Сама программа пишется как и для Ардуино, нужно знать основы языка Си.

В окошке Project следует открыть main.c. В коде в самом начале следует подключить библиотеки кроме CMSIS (они уже автоматически подключены). Добавляются они следующим образом:

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

Для настройки параметров выводов следует прописать ее название и поставить точку. Во всплывающем меню будут указаны все характеристики. Их можно исправлять.

После этого нужно сделать зацикливание в while, чтобы светодиод мигал, пока не отключится питание.

Когда программа написана, ее можно загружать в контроллер. Если есть отладочная плата, ее нужно подключить через USB кабель и нажать Download Code To Flash. Если плата отсутствует, потребуется переходник, который нужно подключить к порту компьютера. Контакт BOOT 0 подключается к плюсу питания контроллера, а затем включается само питание МК. После этого начнется прошивка.

Чтобы загрузить программу в микроконтроллер, нужно следовать указаниям от приложения. Сначала прописывается код порта, к которому подключен микроконтроллер. Также указывается скорость. Советуется брать небольшое значение, чтобы не было сбоев. Программа найдет микроконтроллер, и нужно будет нажать кнопку «далее». Во вкладке Download to device нужно в поле Download from file выбрать написанную программу и нажать «далее».

После этого нужно отключить питание контроллера STM32, закрыть Flash Loader Demonstrator, выключить переходник. Теперь можно снова включить микроконтроллер в обычном режиме. Когда программа будет загружена, светодиод начнет мигать.

Работа в других программах проходит подобным образом. Также выбираются нужные библиотеки, и прописывается код. У платных утилит функционал больше, и можно создавать более сложные проекты.

Источник

Микроконтроллеры STM32 «с нуля»

Компания STMicroelectronics одной из первых вывела на рынок семейство микроконтроллеров на ядре ARM Cortex-M3 и на сегодняшний день по праву занимает лидирующее место среди производителей микроконтроллеров на этом ядре. Все началось в 2007 году с двух семейств — Performance Line (STM32F103) и Access Line (STM32F101). Компания постоянно работает как над расширением номенклатуры семейства, так и над улучшением характеристик, не забывая при этом также пополнять программную составляющую продукта. На сегодняшний момент STM32 уже состоит из 10 линеек (рис. 1) для всевозможных применений — микроконтроллеры с высокой производительностью, недорогие микроконтроллеры общего применения, микроконтроллеры с ультранизким энергопотреблением, микроконтроллеры со встроенным радиомодулем для беспроводных решений, и все это — на одном ядре ARM Cortex-M3! Нельзя не отметить pin-to-pin и программную совместимость по всем линейкам. Для более подробной информации по семейству STM32 следует посетить официальный сайт компании [1].

stm32 что это такое. Смотреть фото stm32 что это такое. Смотреть картинку stm32 что это такое. Картинка про stm32 что это такое. Фото stm32 что это такое

Рис. 1. Семейство STM32

Для начала работы и изучения любого микроконтроллера разработчику необходимы три инструмента — программная среда разработки, программатор-отладчик и оценочная плата от производителя или от сторонних производителей.

Выбор программного инструментария для разработки

Под ARM-архитектуру существует довольно широкий выбор программных средств разработки. Приведем лишь основные и самые популярные программные пакеты на российском рынке (табл. 1)

Таблица 1. Среды разработки программного обеспечения

ИнструментарийСреда разработкиC/C++ компиляторОграничение Си-иструментарияПрограмматор-отладчикСсылка
IAR SystemsEmbedded WorkbenchIAR C/C++32 Кбайт или полная с ограничением на 30 днейJ-Link ST-Link www.iar.com
KeiluVision (MDK-ARM)Keil C/C++32 КбайтULink ST-Link www.keil.com
RaisonanceRide7 + RKIT-ARMGСС C/C++Нет, ограничения по отладкеRLink www.raisonance.com
AtollicTrueStudioGСС C/C++Нет, ограничения по функционалуST-Link STICE www.atollic.com
Open sourceEclipseGСС C/C++Без ограниченийARM-Link www.eclipse.org [2]

Наиболее популярными (но и самыми дорогими) среди разработчиков для разработки ПО под ARM архитектуру являются инструментарии от компаний Keil и IAR Systems. Это обусловлено наиболее продвинутыми С-инструментариями с точки зрения оптимизации и компактности кода. Также, помимо лидирующих позиций в С-инструментариях, данные компании предоставляют широкие наборы дополнительного ПО — операционные системы реального времени, USB-стеки, TCP/IP-стеки и многое другое, но за дополнительную плату. К тому же компания Keil принадлежит ARM, и при пользовании услугами этих двух компаний вы получаете очень хорошую техническую поддержку. Но мы все же остановимся на инструментарии от IAR Systems. Выбор обусловлен универсальностью инструментария, поддерживающего большинство известных нам архитектур микроконтроллеров таких производителей как STMicroelectronics, Texas Instruments, Microchip, Atmel и т.д.

Также следует отметить популярность средств на основе компилятора GCC. Существуют как платные их варианты, так и бесплатные. Помимо всего, GCC является лидером по количеству поддерживаемых процессоров и операционных систем. Как пример варианта платных средств в сводной таблице мы привели инструментарии от компаний Raisonance и Atollic. По сравнению с двумя ранее описанными вариантами вы получаете за гораздо меньшие деньги полноценный C-инструментарий со средой разработки и технической поддержкой. Также существует вариант полностью бесплатного инструментария, например, среда разработки Eclipse и компилятор GCC. Более подробно по бесплатному варианту вопросу следует обратиться к источнику [2].

Выбор оценочной платы для разработки

На рынке существует огромный выбор оценочных плат для STM32 как от STMicroelectronics, так и от сторонних производителей. Например, недорогие и оригинальные модули «Махаон» и «Барракуда» предлагает компания Терраэлектроника. Но наша основная цель — использовать для ознакомления и изучения микроконтроллеров семейства STM32 доступные и по возможности недорогие модули. Именно для таких целей компания STMicroelectronics разработала линейку оценочных плат «Discovery»: для восьмибитных микроконтроллеров — STM8S-Discovery и STM8L-Discovery, для 32-битных — STM32VLDiscovery. Особенность данных оценочных плат заключается в завершенном решении для старта разработки программного обеспечения на микроконтроллерах — сам микроконтроллер с необходимой обвязкой и внешними компонентами, а также интегрированный программатор-отладчик ST-Link. Это полноценное решение, не требующее дополнительных затрат, а рыночная цена плат «Discovery» составляет 10…15$. Используя эти платы в собственных разработках, можно применять для программирования и отладки собственных приложений встроенный ST-Link через выведенный внешний разъем. С учетом всего вышеописанного, для широкого круга радиолюбителей и разработчиков коммерческих компаний отпадает необходимость в самостоятельном изготовлении отладочных плат и программаторов.

В журнале «Новости Электроники» №6 за 2010 год была опубликована статья «STM8 с нуля», в которой рассматривалась отладочная плата STM8S-Discovery, нас же интересуют микроконтроллеры семейства STM32. В связи с этим мы рассмотрим более подробно отладочную плату STM32VLDiscovery (рис. 2).

stm32 что это такое. Смотреть фото stm32 что это такое. Смотреть картинку stm32 что это такое. Картинка про stm32 что это такое. Фото stm32 что это такое

Рис. 2. Оценочный набор STM32VLDiscovery

В основе платы — микроконтроллер линейки «Value Line» STM32F100RBT6, программатор-отладчик ST-Link с выведенным разъемом SWD, механические кнопки, светодиоды и обвязка. Свободные ножки микроконтроллера выведены на внешние разъемы.

Выбор программатора-отладчика для разработки

В качестве программатора-отладчика производитель каждой среды разработки, как правило, предоставляет собственное решение, но поддерживаются устройства и других производителей. В таблице 1 можно увидеть среды разработки и поддерживаемые программаторы-отладчики. Большинство сред разработки поддерживают ST-Link — самый дешевый вариант на сегодняшний день. Нужно признать, что «родные» программаторы отладчика предоставляют большие возможности по отладке ПО, хотя разница в цене также ощутима. Добавим, что при выборе программаторов-отладчиков существует несколько вариантов от одного производителя: как более простые с поддержкой основных отладочных функций, так и профессиональные версии с поддержкой полного спектра функций отладки и трассировки. Например, программаторы-отладчики для IAR Embedded Workbench — J-Link и J-Trace, для Keil uVision — ULink и ULink-Pro. В нашем же случае, как писалось выше, ST-Link интегрирован в отладочную плату, так что дальше мы будем пользоваться именно этим инструментом и отладочной платой STM32VLDiscovery.

Установка среды разработки

На данном этапе мы уже определились с программным и аппаратным обеспечением. Теперь переходим на официальный сайт IAR Systems [3], далее — на вкладку «Downloads». Должна появиться страница со списком всего доступного ПО. Нас интересует поле «Processor or core», строка «ARM», тут видно, что для загрузки доступны два варианта ПО. Первая версия — с ограничением по времени, но без ограничения по функциональности (30-day evaluation edition). Вторая версия — без ограничения по времени, но с ограничением 32Кб по загружаемому в микроконтроллер коду (Kickstart edition). Для загрузки необходимо заполнить форму на сайте, затем вам на почту должна прийти ссылка, и уже по этой ссылке можно скачать установочный файл ПО. Но при этом необходимо сохранить ключ активации и лицензионный номер, которые понадобятся при установке ПО. Загружаем второй вариант и устанавливаем. Процесс установки ПО ничем не отличается от стандартных программ, поэтому подробно на этом пункте мы заострять внимание не будем.

Стандартная библиотека периферии STM32

STMicroelectronics для облегчения труда разработчиков предоставляет бесплатные стандартные библиотеки периферии для своих микроконтроллеров и, в частности, для семейства STM32. Вначале мы рассмотрим библиотеку, разберемся, как с ней работать, и далее на основе этой библиотеки обсудим небольшой пример на отладочной плате STM32VLDiscovery. Структура библиотеки представлена на рисунке 3.

stm32 что это такое. Смотреть фото stm32 что это такое. Смотреть картинку stm32 что это такое. Картинка про stm32 что это такое. Фото stm32 что это такое

Рис. 3. Функциональная структура стандартной библиотеки периферии

Стандартная библиотека периферии написана в соответствии со стандартом ANSI C и может использоваться с любым компилятором. Структура библиотеки не так сложна, как кажется на первый взгляд, и состоит из двух взаимодополняющих составляющих.

Первая составляющая — заголовочные файлы и файлы реализации всей периферии микроконтроллеров STM32 — STM32F10x_StdPeriph_Driver. Вся функциональность периферийных модулей описана в заголовочных файлах и файлах реализации. Например, для портов ввода-вывода это два файла — stm32f10x_gpio.h и stm32f10x_gpio.c.

Вторая составляющая — заголовочные файлы и файлы реализации самого ядра ARM Cortex-M3 от компании ARM — CMSIS (ARM® Cortex TM Microcontroller Software Interface Standard). Ядро ARM Cortex-M3 выходит за рамки обычного понятия ядра микроконтроллера и представляет собой мини-микроконтроллер с периферией — встроенные системный таймер, контроллер прерываний и т.д. CMSIS предоставляет собой константы и определения, функции доступа к регистрам и периферийным модулям ядра, независимый интерфейс для операционных систем реального времени (RTOS). CMSIS состоит из трех файлов:

Для использования стандартной библиотеки периферии необходимо в файл основной программы (обычно это main.c) включить файл #include «stm32f10x.h» и прописать определенные константы в свойствах проекта. Настройка проекта более подробно будет рассмотрена в приведенном ниже примере. Также библиотекой предоставляются три файла, доступные для модификации пользователем — файл конфигурации библиотеки stm32f10x_conf.h и файлы прерываний stm32f10x_it.h и stm32f10x_it.c. Для использования определенных модулей периферии в проект необходимо добавить файлы реализации и сконфигурировать файл stm32f10x_conf.h. Под конфигурацией файла stm32f10x_conf.h подразумевается раскомментирование строчек с названием периферийного модуля, предполагаемого для использования. В нашем случае это строчка #include «stm32f10x_gpio.h». Обработка прерываний происходит в заголовочном файле и файле реализации stm32f10x_it.h и stm32f10x_it.c. Функции обработчиков прерывания не должны содержать параметров — void function(void). Если посмотреть файл stm32f10x_it.h, то можно увидеть, что в нем уже написаны пустые обработчики прерывания, но тут имеются не все функции. Дополнительные имена функций обработчиков прерывания — это фактически адреса обработчиков прерывания. Их придется прописывать вручную, и эти имена уже объявлены в файле начальной инициализации. Этот файл мы рассмотрим далее более подробно.

Вся периферия описана в структурах данных языка Си, которые и используются для конфигурации периферийного модуля. Функции и константы для периферийных модулей начинаются с префиксов, совпадающих с именем периферийного модуля. Например, имена функций для портов ввода-вывода — GPIO_Init(), GPIO_SetBits(), GPIO_ReadInputData() и константы — GPIOA, GPIO_Speed_50MHz, GPIO_Pin_0.

Для большей наглядности кода и сокращения его визуального размера стандартные типы данных предопределены в файле stm32f10x_type.h, например:

Стандартную библиотеку периферии можно загрузить с официального сайта STMicroelectronics по ссылке [4]. Структура пакета библиотеки следующая:

Для более простого старта создания и конфигурации проекта на основе отладочных плат STM3210xx-EVAL предлагается «пустой» шаблон проекта для разнообразных сред разработки. В него можно внести ваш код, выбрать в конфигурации конкретную отладочную пату и начать работать. Шаблон проекта приведен для пяти сред разработки, можно начать работать с любой из них. Помимо этого, на первых порах можно посмотреть параметры конфигурации проектов.

Для прояснения картины пользования библиотекой перейдем к практической части статьи.

Практическая часть: пример проекта

На данном этапе мы загрузили и установили среду разработки IAR Embedded Workbench и получили общие знания по стандартной библиотеке периферии. Самое время приступить к практической части нашего материала.

Для всех своих отладочных плат STMicroelectronics предоставляет на официальном сайте примеры работы и описание. Полный список документации для STM32VLDiscovery можно посмотреть по ссылке [5], а кликнув по вкладке «Design Support», можно посмотреть всю доступную информацию по отладочной плате. С этой же страницы загружаем пакет «STM32VLDISCOVERY firmware package (AN3268)» по ссылке [3]. В состав пакета входит стандартная библиотека периферийных устройств и примеры проектов для отладочной платы. Рассмотрим структуру пакета более подробно:

Заходим в директорию ProjectMaster WorkspaceEWARMv5 и запускаем проект Value_Line_Discovery.eww. В рабочей области проектов (рис. 4) можно увидеть 13 различных проектов для работы с портами ввода-вывода, внешними прерываниями, контроллером DMA, таймерами, режимами низкого энергопотребления и т.д. Для работы с каждым конкретным проектом его необходимо сделать активным — наводим на имя проекта курсор мыши, кликаем правую кнопку мыши и в выпадающем меню выбираем поле Set as Active. Далее можно вносить свои изменения, компилировать, загружать прошивку и отлаживать ПО.

stm32 что это такое. Смотреть фото stm32 что это такое. Смотреть картинку stm32 что это такое. Картинка про stm32 что это такое. Фото stm32 что это такое

Рис. 4. Проект EXTI — EXTI

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

Как видно из рисунка, проект состоит из нескольких папок, разделяющих файлы проекта по смысловому значению:

Как уже описывалось выше, папка CMSIS содержит файл библиотеки ядра ARM Cortex-M3 и файл начальной инициализации. Папка EWARMv5 содержит начальный файл инициализации, он выбирается для каждого объема памяти микроконтроллера. Все доступные файлы для всех микроконтроллеров STM32 можно, в зависимости от микроконтроллера, используемого в проекте, выбрать по следующему пути: Х. stm32vldiscovery_packageLibrariesCMSISCM3DeviceSupportSTSTM32F10xstartuparm. Необходимый файл выбирается по окончанию файла. Опишем все файлы:

Узнать, какой микроконтроллер соответствует той или иной линейке и префиксу, можно из документации.

В папке StdPeriph_Driver содержатся исполняемые файлы периферийных устройств. В данную папку необходимо добавлять именно файлы, соответствующие используемой периферии в проекте. В нашем случае мы видим (рис. 4), что в папку добавлены четыре файла — файл приоритетов прерывания, внешних прерываний, портов ввода-вывода и системы тактирования. Соответственно, в проекте используются вышеперечисленные периферийные модули.

В папке User размещены пользовательские файлы — основной файл программы и файл обработчиков прерываний. Ну а в папке Output содержится выходной файл прошивки.

Для работы со стандартной библиотекой периферии необходимо настроить проект. У нас он уже настроен, но рассмотрим все необходимые настройки для создания будущего собственного проекта. Кликаем правой кнопкой мыши на имени проекта, в выпадающем поле выбираем вкладку options, далее в поле Category выбираем пункт General Options и, далее, в правом поле — вкладку Target (рис. 5). В данном меню выбирается тип микроконтроллера, в нашем случае это STM32F100RBT6.

stm32 что это такое. Смотреть фото stm32 что это такое. Смотреть картинку stm32 что это такое. Картинка про stm32 что это такое. Фото stm32 что это такое

Рис. 5. Настройка проекта — выбор типа микроконтроллера

После выбора микроконтроллера необходимо прописать все пути к стандартной библиотеке периферии. В поле Category выбираем пункт С/C++ Compiler и далее в правом поле — вкладку Preprocessor (рис. 6)

stm32 что это такое. Смотреть фото stm32 что это такое. Смотреть картинку stm32 что это такое. Картинка про stm32 что это такое. Фото stm32 что это такое

Рис. 6. Настройка проекта — настройка путей доступа к библиотеке

Над содержанием поля Additional include directories необходимо остановиться более подробно:

Также необходимо обратить внимание на поле Defined symbols:(one per line). В данном поле содержатся два макроопределения. Макроопределение USE_STDPERIPH_DRIVER необходимо указывать, если вы собираетесь пользоваться стандартной библиотекой периферии. Макроопределение STM32F10X_MD_VL указывает библиотеке, какой микроконтроллер используется в проекте. Он должен быть аналогичен файлу, добавленному в папку EWARMv5, но без префикса startup_. В данное поле можно добавлять пользовательские макроопределения, используемые в проекте.

stm32 что это такое. Смотреть фото stm32 что это такое. Смотреть картинку stm32 что это такое. Картинка про stm32 что это такое. Фото stm32 что это такое

Рис. 7. Настройка проекта — настройка линкера (часть 1)

Также линковщику необходимо указать объемы памяти, стека и кучи. Данная операция осуществляется в этом же окне, но необходимо нажать кнопку Edit… (рис. 8).

stm32 что это такое. Смотреть фото stm32 что это такое. Смотреть картинку stm32 что это такое. Картинка про stm32 что это такое. Фото stm32 что это такое

Рис. 8. Настройка проекта — настройка линкера (часть 2)

В первом окне рисунка 8 указывается адрес таблицы векторов прерывания. В нашем случае адрес равен 0х08000000, это начало внутренней flash-памяти. Во втором окне необходимо указать адреса flash- и SRAM-памяти. Начальные адреса начинаются с 0х08000000 и 0х02000000, это заложено при проектировании. А вот конечные адреса разные, т.к. микроконтроллеры имеют разные объемы памяти. В окнах необходимо указать правильные параметры, т.к. в случае выхода размера ПО за эти границы линкер должен выдать сообщение об ошибке во избежание непредсказуемых последствий. Для нашего микроконтроллера STM32F100RBT6 объем flash равен 128 Кбайт, а объем SRAM — 8 Кбайт. Соответственно, значение второго окна для поля ROM должно быть равно (128х1024) — 1 = 0х0801FFFF, и по такой же методике значение второго окна должно быть равно 0х02001FFF. На рисунке 8 отображены максимальные значения памяти для семейства STM32. Не менее важным является третье окно, отвечающее за размер стека и кучи. Стек необходим для сохранения контекста при вызове функций, передачи параметров функций и так далее. Куча необходима для функций работы с памятью С/С++. Оставим эти параметры такими же, как на рисунке. Добавим лишь, что память для стека и кучи выделяется из SRAM, и, например, в случае неиспользования функции работы с памятью поле HEAP можно сделать нулевым, таким образом сэкономив оперативную память для нужд приложения.

Следующим шагом является выбор программатора-отладчика. В поле Category выбираем пункт Debugger и далее в правом поле — вкладку Setup (рис. 9)

stm32 что это такое. Смотреть фото stm32 что это такое. Смотреть картинку stm32 что это такое. Картинка про stm32 что это такое. Фото stm32 что это такое

Рис. 9. Настройка проекта — выбор программатора

В нашем случае нам необходимо выбрать программатор-отладчик компании STMicroelectronics ST-Link. Для этого выбираем категорию Linker.

Следует обратить внимание на поле Run to main. Данный пункт указывает, с какого места будет начинаться отладка ПО. Если этот пункт активен, то процесс отладки начнется с функции main(), и первоначальная инициализация микроконтроллера пропускается (она будет выполнена автоматически). Если же данный пункт не активен, то процесс отладки начнется с самого начала, а именно — с вектора сброса Reset Handler файла startup_stm32f10x_md_vl.s. На первоначальном этапе для более подробного изучения инициализации микроконтроллера лучше сделать этот пункт неактивным и посмотреть по шагам всю инициализацию микроконтроллера.

И, наконец, последний пункт в настройках проекта — выбор интерфейса для отладки. В архитектуре ARM Cortex-M3 предусмотрено два альтернативных интерфейса для отладки микроконтроллера — двухпроводной интерфейс SWD и пятипроводной интерфейс JTAG. В STM32VLDiscovery реализован SWD, соответственно, убеждаемся в том, что выбран именно этот интерфейс — в поле Category выбираем пункт ST-Link и затем — SWD (рис. 10).

stm32 что это такое. Смотреть фото stm32 что это такое. Смотреть картинку stm32 что это такое. Картинка про stm32 что это такое. Фото stm32 что это такое

Рис. 10. Настройка проекта — выбор интерфейса программатора

После рассмотрения настроек проекта EXTI-EXTI переходим к более детальному рассмотрению самого проекта. Обычно точкой входа в программу является функция main.c, далее происходит инициализация периферии микроконтроллера. Но в случае использования стандартной библиотеки периферии при входе в функцию main.c уже произведена первоначальная инициализация микроконтроллера. Полную инициализацию микроконтроллера можно посмотреть по шагам в отладочном режиме, если снять пункт Run to main на рисунке 9. Старт работы ПО микроконтроллера после включения питания или сброса происходит с адреса сброса (Reset_Handler). Для начальной инициализации проекта мы уже добавили в проект файл начальной инициализации (в нашем случае это startup_stm32f10x_md_vl.s). При просмотре содержимого данного файла видно, что при первоначальном сбросе вызывается функция SystemInit(). Это, по сути, и является первоначальной инициализацией микроконтроллера. Далее управление передается этой функции, которая реализована в файле system_stm32f10x.c. Но отправной точкой работы любого микроконтроллера является его тактирование. В семействе STM32 доступны четыре источника тактирования:

Для тактирования ядра микроконтроллера могут использоваться только высокочастотные источники HSI и HSE. После подачи или сброса питания микроконтроллеры STM32F1x по умолчанию тактируются от внутреннего источника, и системная частота тактирования после сброса равняется 8 МГц (SYSCLK = 8 МГц). В файле system_stm32f10x.c в макроопределениях задается первоначальная частота тактирования микроконтроллера до входа в функцию main.c при помощи раскомментирования строк (рис. 11):

#if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL)

/* #define SYSCLK_FREQ_HSE HSE_Value */

#define SYSCLK_FREQ_24MHz 24000000

/* #define SYSCLK_FREQ_HSE HSE_Value */

/* #define SYSCLK_FREQ_24MHz 24000000 */

/* #define SYSCLK_FREQ_36MHz 36000000 */

/* #define SYSCLK_FREQ_48MHz 48000000 */

/* #define SYSCLK_FREQ_56MHz 56000000 */

#define SYSCLK_FREQ_72MHz 72000000

stm32 что это такое. Смотреть фото stm32 что это такое. Смотреть картинку stm32 что это такое. Картинка про stm32 что это такое. Фото stm32 что это такое

Рис. 11. Первоначальная инициализация в файле system_stm32f10x.c

Как видно из примера, после условной компиляции раскомментирована строчка #define SYSCLK_FREQ_24MHz 24000000 — соответственно, тактовая частота равна 24 МГц.

Теперь перейдем к основному файлу проекта main.c (рис. 12)

stm32 что это такое. Смотреть фото stm32 что это такое. Смотреть картинку stm32 что это такое. Картинка про stm32 что это такое. Фото stm32 что это такое

Рис. 12. Основной файл проекта main.c

Для использования стандартной библиотеки периферии необходимо прописать в основном файле проекта строку stm32f10x.h, раскомментировать используемые периферийные модули в файле stm32f10x_conf.h и включить их исполняемые файлы в проект в папку StdPeriph_Driver. В нашем проекте это файлы — misc.c — NVIC функции, stm32f10x_exti.c — функции внешних прерываний портов ввода-вывода, stm32f10x_gpio.c — функции настройки портов ввода-вывода и stm32f10x_rcc.c — функции настройки тактирования модулей периферии (рис. 13)

stm32 что это такое. Смотреть фото stm32 что это такое. Смотреть картинку stm32 что это такое. Картинка про stm32 что это такое. Фото stm32 что это такое

Рис. 13. Конфигурирование проекта

При просмотре содержимого функции main.c в проекте используются всего две функции — STM32vldiscovery_LEDInit(LED3) и STM32vldiscovery_PBInit(BUTTON_USER, BUTTON_MODE_EXTI), далее программа переходит на бесконечный цикл while(1) и ожидает событий источников прерывания. Из названия функций видно, что первая настраивает вывод микроконтроллера для управления светодиодом, а вторая настраивает вывод микроконтроллера для управления кнопкой. Рассмотрим более подробно данные функции, находящиеся в файле stm32vldiscovery.c.

Для быстрого перехода к реализации функции STM32vldiscovery_LEDInit(LED3) можно кликнуть правой кнопкой компьютерной мыши на имени функции и в выпадающем меню также кликнуть Go to definition of имя_функции:

void STM32vldiscovery_LEDInit(Led_TypeDef Led)

// Разрешение тактирования модуля(RCC_APB2Periph_GPIOC)

// Установка вывода для дальнейшего использования(GPIO_Pin_9)

// Настройка вывода на выход push-pull

// Настройка частоты переключения вывода

// Передача структуры — применение параметров

Итак, для настройки ножки ввода-вывода сначала объявляется структура данных типа GPIO_InitTypeDef, далее заполняются ее поля, и эта структура с помощью функции GPIO_Init() «накладывается» на регистры периферийного модуля GPIO и, соответственно, настраивает модуль.

Функция STM32vldiscovery_PBInit(BUTTON_USER, BUTTON_MODE_EXTI) имеет более сложную реализацию, так как в ней настраиваются ножка микроконтроллера и внешнее прерывание на этой же ножке:

void STM32vldiscovery_PBInit(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode)

// Объявление структуры модуля GPIO

// Объявление структуры модуля EXTI

// Объявление структуры модуля EXTI

// Разрешение тактирования модуля GPIOA(RCC_APB2Periph_GPIOA)

RCC_APB2PeriphClockCmd(BUTTON_CLK[Button] | RCC_APB2Periph_AFIO, ENABLE);

// Настройка вывода на вход

// Установка вывода для дальнейшего использования (GPIO_Pin_0)

// Передача структуры — применение параметров

if (Button_Mode == BUTTON_MODE_EXTI)

// Конфигурирование кнопки для внешнего прерывания

// Установка линии прерывания(EXTI_Line0)

// Конфигурирование внешнего прерывания по переднему фронту

// Установка приоритета группы

// Установка приоритета подгруппы

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

// Переключение состояния светодиода

// Сброс флага прерывания

Можно скомпилировать данный пример — Project ® Rebuilt all, загрузить ПО в память микроконтроллера Project ® Download and Debug (Ctrl+D) и проанализировать исполнение кода в режиме отладки. При нажатии на пользовательскую кнопку светодиод должен загораться или гаснуть. Но он будет вести себя не совсем предсказуемо, так как в данном примере не реализована функция устранения дребезга контактов кнопки.

Заключение

В статье на основе оценочной платы STM32VLDiscovery мы рассмотрели аспекты работы с семейством микроконтроллеров STM32, работу стандартной библиотеки периферийных устройств, а также разобрали небольшой пример. К сожалению, объем статьи ограничен форматом журнала и расписать все до мелочей нет возможностей. За дополнительной информацией следует обращаться на официальный сайт STMicroelectronics [1], где вы найдете большое количество разнообразных примеров, описаний и многое другое [8]. Автор искренне надеется, что данная статья поможет вам в первых шагах изучения семейства микроконтроллеров STM32.

Ссылки:

Нет механическим кнопкам!

STM8T141 — одноканальный, полностью интегрированный емкостной датчик, разработанный лидером европейской электронной индустрии — STMicroelectronics для замены электромеханических переключателей в чувствительных к цене приложениях. Во многих устройствах электромеханические переключатели уже полностью или почти вытеснены touch-sence-технологиями, и на это есть ряд объективных причин, прежде всего — невысокая надежность механических переключателей.

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *