[Из песочницы] Простые эксперименты с микроконтроллером STM32F103 («Голубая таблетка»)

kx9h1synxem3k3qz1dixgibvyqu.jpeg

Многие приобрели «голубую таблетку» на попробовать. Но из-за сложности программирования данная вещь оказалась где то на полке, до лучших времен.

Будем считать, что «лучшие времена» — наступили.

Что необходимо для экспериментов:


  • Аппаратные средства
  • Программное обеспечение


Аппаратные средства


Все используемые детали / компоненты можно приобрести на aliexpress.com

  • Конечно, в первую очередь сам контроллер.«Голубая Таблетка»
  • адаптер USB-UART
  • Кабель Micro-USB
  • набор проводов для соединения компонент между собой


Для более быстрой, по сравнению с UART загрузкой «прошивки» и отладки программ рекомендуется использовать программатор ST-Link V2

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


Что такое модуль


Модуль это совокупность аппаратной и программной частей. Аппаратная часть — «таблетка» STM32F103C8T6, программная часть — «шаблон прошивки», созданный при помощи программы MIOC Данная программа — OpenSource.

Порты микроконтроллера


У микроконтроллера есть выводы или ножки. Часть из них это питание микроконтроллера, часть имеют специальное назначение (например Reset), часть — интерфейс ввода/вывода общего назначения (англ. general-purpose input/output, GPIO).

Порты объединены в группы ( A;  B;  C… ). Каждая группа содержит до 16 портов, пронумерованных от 0 до 15. В итоге нумерация портов выглядит как PA0, PA1, …

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

На плате «таблетки» нанесена маркировка портов.

GPIO — Интерфейс ввода/вывода общего назначения


В модуле IO основные типы портов представлены в таблице:

bacqjpfg63onfpm_e7mwbuxzjze.gif

В качестве датчиков, исполнительных механизмов будем использовать различные устройства от Arduino.

Программа MIOC ( Module Input-Output Configurator )


С помощью данной программы создаем / конфигурируем шаблон прошивки (проект для Embitz;  Keil) модуля IO. Программа установки не требует. Скачали, запустили. С помощью данной программы создаём глобальные переменные, которые будем использовать в своих прошивках. Переменные могут быть ассоциированы с портами.

Окно первого запуска:

5njnwxghrgvkrq9yjjxkouggsua.jpeg

Создадим проект:

lodrqvlrldvd9xihb8zaqwekjeq.jpeg

Выбрать папку для проекта. Папка, для проекта должна быть пуста!

eotr2seugfw0avhcxmcndtpee10.jpeg

qb1zt8kk5zjv8jc4yiyhimcz2qc.jpeg

smpnxb-emshy7udwbo2sbpmqums.jpeg

Первая программа — «hello word» для микроконтроллера


Поморгаем светодиодом, что имеется на «голубой таблетке». Данный светодиод подключен к порту PC13.

Добавить строку в таблицу переменных

m9lqtesqbqvk4o6kwyxod4ggdcy.jpeg

nwn-90xwcb4o5vmmptxcigg62t0.jpeg

Генерируем BSP код (кнопка F8)

xqg02b2-mticafa2p5rhrxqk6zk.jpeg

Далее, каждый раз после изменения проекта, обязательна генерация BSP!

Открыть созданный проект в среде разработки EmBitz или Keil. EmBitz пока как временное решение. Похоже автор забросил данный проект. По всей видимости в дальнейшем в проекте будет использоваться Code: Blocks.

В файле main.c напишем следующее:

xo8q8_n85hbj-4ykrjc7am3eq0e.jpeg
(Для увеличения размера картинки откройте её в новой вкладке)

В EmBitz нажать F2, после появления окна информации нажать F7. Должна выполниться компиляция.

Повторное нажатие F2 скроет информационные закладки.

khbaca7tie6wd77h8eblau1r_he.jpeg

Загружаем в микроконтроллер, смотрим, как работает.

Кнопка


Добавим кнопку, например такую:

4rkajoaqqvrg1axdbg7xbkuseo8.jpeg

Схема подключения:

r6dhnzxdasck_-f0jbdvdykdpow.jpeg

Добавим переменную в таблицу:

g5jbo7sxovbdjuttlxhugp5-q8m.jpeg

Генерируем BSP.

Изменим программу на следующую:

e-2yxmvestebzsnczhv4yplgl-i.jpeg

Создаём новую BSP (F8), компилируем, загружаем в микроконтроллер.

Нажимаем на кнопку — светодиод зажигается, отпускаем — тухнет.

Вместо светодиода на другой порт можно подключить реле, например:

n6vozderwmz30oa6poco81scyby.jpeg

И управлять какой либо полезной нагрузкой.

Вывод сообщений на консоль


Нужно определить, что будет консолью.

Возможны варианты:

  • адаптер USB-UART
  • виртуальный COM-порт (кабель Micro-USB)


Если в конфигурации выбраны одновременно UART1 и USB as Console, при этом USB VCP не выбран, то консоль будет назначена «в никуда». Т.е. ругаться на функцию print_str ( или макрос print ) не будет, но и вывода не будет никакого. Такое же поведение будет если не выбрать ни один интерфейс, или выбрать USB VCP, но не выбрать ни UART1 ни USB as Console.

Конфигурация консоли:

y9qgtsdjms0dvksn2oy0g6kjkbm.jpeg

Подключим TettaTerm к COM-порту (консоли). Если загрузку прошивки производим через UART1, то не забываем отключать/подключать COM-порт. В TerraTerm «горячие кнопки» Alt+I; Alt+N Для варианта загрузки через ST-Link этого делать не требуется.

Отредактируем программу:

jdvzdv3ysbtb_mw5ljqfhinoubq.jpeg

Теперь на консоли будет отображаться состояние кнопки:

ninijd5kgzqc5d7fepqkumdg4fs.jpeg

DS18B20


Подключим к «таблетке» температурный датчик DS18B20.

nx6gj0jicce7mzwi4tcq9gjh15s.jpeg

Поместим в таблицу переменную:

dih5unsvycncq2dlpeuyyzcedxm.jpeg

Изменим программу на следующую:

vf9xnvbxydmf9yjv9prbiu3fet0.jpeg

Создаём новую конфигурацию, компилируем, загружаем в микроконтроллер.

На консоли будет отображаться температура, измеряемая датчиком.

8qbpva-pp3sshfv601v3mhwgaao.jpeg

АЦП


В качестве примера работы с АЦП можно использовать потенциометр:

uiwv18tudkf-usapa7dnxugzblo.jpeg

Или датчик влажности почвы

ziyrb9if07uzocowtawvuh_piua.jpeg

Остановимся на последнем:

Конфигурируем порт:

ucuqrhsqpjsu3gc7uoed5igu3xq.jpeg

Редактируем программу:

dsqz6xdakkh6brl7fmus3jybjrq.jpeg

Компилируем, загружаем.

В консоли наблюдаем:

z5ch2dfitfph2j44d61tgfunwim.jpeg

adc — текущее показание АЦП. max и min — зафиксированные минимальное и максимальное показания датчика, совсем сухой (0%) и совсем мокрый (100%).

Совсем мокрый (100%) — опустим датчик в стакан с водой. Совсем сухой (0%) — лежит на открытом воздухе.

По сути мы сделали калибровку датчика влажности почвы от 0 до 100%. Максимальное и минимальное значения поместим в текст программы.

ieraw_hmrfqtonarnunsy1qm2a8.jpeg

Результат работы. Датчик помещен в землю цветочного горшка:

5wgylsgq8ilhkkderxlso_udjja.jpeg

Данный проект — шаблон решения для полива растений.

На этом пока всё. Программа MIOC будет пополняться дополнительными возможностями.

© Habrahabr.ru