Что нужно для программирования stm32
Перейти к содержимому

Что нужно для программирования stm32

  • автор:

Урок 1. Введение. Общие сведения, скорее впечатления, об STM32.

Уроки STM32

Вводная статья курса уроков по программированию микроконтроллеров STM32.

Этой статьей начинаю цикл уроков, посвященных программированию микроконтроллеров STM32.

Тема очень интересная, по популярности может превзойти ”Уроки Ардуино”. В принципе, это в какой-то степени продолжение или расширение ”Уроков Ардуино”. По крайней мере, я собираюсь постоянно ссылаться на статьи из этой рубрики, проводить аналогию между ними и уроками STM32.

Я не призываю бросать программировать на Ардуино и переходить только на STM32. Но есть задачи, которые на Ардуино выполнить невозможно или намного сложнее. Да и разве плохо уметь создавать системы, устройства на обоих типах микроконтроллеров.

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

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

Контроллеры STM32 значительно превосходят по техническим характеристикам платы Ардуино на 8 разрядных микроконтроллерах ATmega328, ATmega2560 и т.п. У них более высокая производительность, больше объем памяти, периферийные устройства разнообразнее по функциям, номенклатуре, количеству. STM32 позволяют реализовывать значительно более сложные задачи, чем платы Ардуино.

Несмотря на вышесказанное я считаю, что программировать STM32 не сложнее, чем Ардуино. По крайней мере, я собираюсь так преподнести материал. Хотя объем информации будет больше.

Уроки рассчитаны как на опытных программистов, изучающих STM32, так и на людей, делающих первые шаги в программировании. Т.е. я собираюсь приводить строгую информацию и сопровождать ее подробными пояснениями. Для второй категории читателей я буду давать ссылки на аналогичные темы в ”Уроках Ардуино”. Не хочется одно и то же ”разжевывать” несколько раз.

Буду преподносить оптимальный с моей точки зрения подход к программированию STM32. Кто-то может с ним не согласиться.

Итак. Я ставлю цель:

  • научить вас практическому программированию микроконтроллеров STM32;
  • расширить ваши знания в области программирования на языке C++, конечно у кого их не хватает;
  • представить строгую техническую информацию о контроллерах STM32 на русском языке;
  • какая-то часть уроков будет посвящена аппаратной части, подключаемой к микроконтроллеру.

Общие сведения о микроконтроллерах семейства STM32.

Возможности контроллеров STM32 потрясают! По крайней мере, меня.

Плата с микроконтроллером STM32F103C8T6 по стоимости сопоставима с ценой плат Ардуино на базе ATmega328 и значительно дешевле плат типа Arduino Mega2560.

По моей партнерской ссылке она стоит всего 175 руб.

Отладочная плата STM32F103C8T6

Но по техническим характеристикам! Что стоит только сравнение разрядности обрабатываемых данных. 32 против 8!

У меня ощущение, что я сравниваю Ардуино не с маленькой дешевой платой, а с дорогим монстрообразным 32 разрядным контроллером. Судите сами.

Параметры STM32F103C8T6 Arduino Nano
Разрядность 32 бит 8 бит
Частота 72 мГц 16 мГц
Объем FLASH 64 кБайт 32 кБайт
Объем ОЗУ 20 кБайт 2 кБайт
Число выводов 37 22
Аппаратное умножение и деление Есть, 32 разряда Только умножение, 8 разрядов
АЦП 2 АЦП, 12 разрядов, 10 входов, 1 мкс время преобразования 10 разрядов, 8 входов, 100 мкс время преобразования
Контроллеры прямого доступа к памяти 7 каналов нет
Таймеры 7 3
UART 3 (выше скорость, больше режимов) 1
I2C 2 1
SPI 2 1
USB 1 нет
CAN 1 нет
Часы реального времени есть нет
Модуль аппаратного расчета CRC кода есть нет

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

И это еще далеко не самый мощный вариант STM32. У меня есть плата STM32F407VET6 с частотой 210 мГц и АЦП со скоростью преобразования до 7,2 миллионов выборок в секунду. Собираюсь на ней сделать динамическую подсветку телевизора, т.е. обрабатывать видеосигнал.

Плата STM32F407VET6

Техническая документация.

Я не буду пересказывать общую информацию о микроконтроллерах STM32. Советую вам просмотреть книжку “Мартин М. Инсайдерское руководство по STM32”, чтобы иметь общее представление о STM32. Я не стал давать ссылку. Не знаю, как обстоят дела с авторским правом на этот документ. Но найдете без труда. Подробно компоненты и узлы STM32 будем изучать в уроках.

Из строгой официальной документации надо иметь:

  • Общее описание микроконтроллера STM32F103C8. Периферия, электрические характеристики.
  • Справочное руководство. Описание регистров, работы периферии.
  • Описание ядра микроконтроллера, система команд.
  • Описание библиотеки HAL для STM32F1.

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

В следующем уроке рассмотрим нашу базовую плату STM32, добавим к ней узлы для загрузки программ из компьютера во FLASH-память микроконтроллера.

STM32 IDE

STm32 IDE

Программирование stm32 стоит начать с изучения программного обеспечения для написания программ под данный микроконтроллер. На сегодняшний день разработано достаточно большое количество программ для написания программного кода под микроконтроллер Stm32 ( STM32 IDE ) и связанно это с большой популярностью данных микроконтроллеров.

В данной статье мы поговорим о наиболее популярных STM32 IDE, что бы вы смогли выбрать ту среду, которая больше всего подходит для вас.

  1. STM32CUBEMX;
  2. STM32CUBEIDE;
  3. KEIL;
  4. IAR Embedded Workbench for ARM;
  5. CodeGrip.

STM32CUBEMX

CubeMx не случайно попал в нашу подборку. Данный программный продукт не позволяет разрабатывать приложения под контроллеры STM32. Но он является отличным генератором кода под все микроконтроллеры STM32.

С помощью CubeMX пользователю предоставляется возможность настроить и сгенерировать библиотеку для работы с периферией STM32. Т.е. нет необходимости писать с нуля код для работы с UART или SPI, не нужно писать функцию чтения ADC или функции работы PWM. За вас все это сделает CubeMX. Нужно только правильно настроить необходимые блоки в визуальном редакторе.

Большим плюсом является то, что эта программа абсолютно бесплатная и разрабатывается производителем STM32 – STMicroelectronics. Это означает, что обновление будет выходит на постоянной основе, а так же при появлении новых микроконтроллеров, в этой среде они будут появляется раньше остальных. Сгенерировать библиотеки можно под разработку в таких STM32 IDE, как STM32CUBEIDE и KEIL.

STM32CUBEIDE

CUBEIDE STM32, среда разработки под контроллеры STM32 от компании производителя чипов STMicroelectronics. Данный программный продукт поставляется совершенно бесплатно. Что является большим плюсом.

На время написания статьи программу можно скачать, зарегистрировав аккаунт и указав европейскую страну. Так же необходимо использовать ВПН. Интерфейс CUBEIDE интуитивно понятен и содержит всё, что нужно для комфортной разработки (дебагер с отладкой в real time, просмотр переменных и т.д.).

Так же стоит отметить, что CUBEIDE все время развивается и поддерживается разработчиком. К минусам отнесем отсутствие документации на русском языке.

KEIL

Keil — одна из самых мощных IDE для разработки программ под микроконтроллеры STM32. Keil имеет свой собственный компилятор, позволяющий комфортно отлаживать программный код. В IDE используется язык программирования С\С++. Так же Keil имеет в своем распоряжение симулятор, который позволяет эмулировать некоторое железо, например UART.

Минусом данной IDE является платная лицензия. А так же то, что программа работает только в ОС Windows. На просторах интернета можно скачать активатор для Keil, но в таком случае у пользователей наблюдаются вылеты и подвисания программы.

IAR Embedded Workbench for ARM (IAR-EWARM)

Еще один хороший редактор кода с компилятором C\C++ для микроконтроллеров STM32. Этот редактор кода имеет в своем распоряжении более 4000 примеров по работе с периферией STM32. Так же IDE IAR в автоматическом режиме проверяет ваш код на правила MISRA C (MISRA C: 2004). Это правила написания отказа устойчивого программного кода.

Редактор поддерживает все контроллеры STM32, библиотеки для работы с периферией, а так же плагин для работы с RTOC (операционная система реального времени).

Минусом использования IDE IAR это то, что она является платной.

CodeGrip

Еще один редактор кода для микроконтроллеров STM32 от компании MICROE. Одним из отличий данного редактора является то, что редактор имеет такие компиляторы как: microC, microPascal, microBasic. Компиляторы разработаны под экосистему Microe, оптимизированы под отладочные комплекты компании. Большим минусом является платная лицензия на компилятор.

Какую выбрать среду разработки для STM32?

В заключение необходимо сказать о выборе STM32 IDE. Каждый из редакторов имеет и плюсы и минусы, в частности я выбрал для себя CUBEIDE в связке с CUBEMX. Данная среда разработки удовлетворяет всем моим запросам, а так же что немало важно она является бесплатной.

Программирование микроконтроллеров STM32

Микроконтроллеры STM32 обратили на себя моё внимание двумя новостями. Первая новость была о выпуске платы STM32F4DISCOVERY, которая оснащена аудио-кодеком и микроконтроллером с ядром ARM Cortex-M4 с набором DSP-команд. Вторая новость была о выпуске платы Olimexino-STM32, представляющую из себя Arduino-совместимую плату на базе микроконтроллера STM32F103RB.

В ожидании появления обеих плат на рынке, я приобрёл себе плату Olimex-H103 и недорогой JTAG-отладчик ARM-USB-OCD, чтобы начать осваивать микроконтроллеры STM32 в операционной системе Linux.

Дело в том, что возможность программировать микроконтроллеры STM32 посредством интерфейса ST-Link/V2 в то время была доступна только в операционной системе Windows, к тому же отладчик OpenOCD можно использовать и для программирования других ARM-микроконтроллеров, например AT91SAM. К тому времени уже полгода у меня пылилась на полке плата Olimex-H64, так что для меня это был хороший повод приобрести JTAG-отладчик, чтобы не мучиться с попытками освоить SAM-BA и TCL.

Выбор отладочной платы

Успешно освоив 8-битные микроконтроллеры, спаяв несколько плат собственной разработки на их основе, я пришёл к выводу, что 32-битные микроконтроллеры удобнее осваивать, используя готовые отладочные платы, прежде чем пробовать разработать и спаять собственную плату.

В случае микроконтроллеров STM32 выбор платы в первую очередь основывается на выборе интерфейса программирования. Это либо IEEE 1149.1 JTAG, либо SWD-отладчик ST-Link. Лично я как пользователь Linux предпочитаю JTAG, поскольку программирование ARM-микроконтроллеров посредством JTAG в Linux поддерживается на базе открытых технологий, хотя по степени глючности оба варианта пока что не превосходят друг друга.

Платы STM32 серии DISCOVERY

В качестве стартовых отладочных плат для своих микроконтроллеров компания ST Microelectronics выпускает недорогие платы серии DISCOVERY, оснащные встроенным отладчиком ST-Link/V2.

Для разработки и программирования этих плат в Linux требуется скачать и настроить IDE-среду разработки Eclipse. В принципе, после успешной настройки программисту доступна даже возможность пошаговой отладки программы, но на практике при переходе из режима отладки обратно в режим программирования периодически происходит какой-то сбой, так что повторно войти в режим отладки у меня лично получалось через раз. Так что я предпочитаю программировать микроконтроллер из командной строки с помощью утилиты texane/stlink.

Платы STM32 с JTAG

Сторонние разработчики оснащают отладочные платы на базе микроконтроллеров STM32 интерфейсом IEEE 1149.1 JTAG для программирования и отладки. Эти платы стоят немножко дороже, но их можно программировать с помощью GDB-сервера OpenOCD.

Однако стоит учесть и то, что для программирования потребуется приобрести JTAG-программатор, в чём OpenOCD в силу своей универсальности как раз и имеет преимущественно перед встроенным ST-Link в платах серии DISCOVERY.

Программная поддержка периферийных устройств

В целом в программировании микроконтроллеров STM32 нет ничего принципиально сложного благодаря тому, что программирование периферийных устройств микроконтроллера осуществляется на основе стандартной библиотеки микроконтроллеров Cortex CMSIS (Cortex Microcontroller Software Interface Standard).

Скачав и установив Standard Peripheral Library для выбранной линейки микроконтроллеров STM32, можно попробовать скомпилировать примеры из папки StdPeriph_Examples, хотя для среды Eclipse и ARM-GCC скорее всего потребуется использовать один из базовых проектов, скопировав необходимые файлы из папки с примером в папку проекта.

STM32. Программирование микроконтроллеров STM32.

Рад всех снова приветствовать на сайте microtechnics! Итак, на данной странице для дополнительной и наглядной систематизации я собрал некоторые из статей по микроконтроллерам STM32 и разбил их на небольшие группы. Список этот я буду время от времени пополнять параллельно с выходом новых статей, а полный набор постов можно по-прежнему найти в одной из рубрик сайта, а именно — ссылка.

STM32, связь с внешним миром

  • Modbus RTU Master. Библиотека для микроконтроллеров STM32.
  • Modbus RTU Slave. Пример реализации на микроконтроллере STM32.
  • Ethernet. Часть 1. Подключение и настройка ENC28J60.
  • Ethernet. Часть 2. ENC28J60. Прием и передача кадров.
  • Ethernet. Часть 3. Канальный уровень. Протокол ARP.
  • Ethernet. Часть 4. Сетевой уровень. Протоколы IP и ICMP.
  • Библиотека для работы с шиной 1-Wire на STM32.
  • Протокол LIN. Настройка и обмен данными. STM32CubeMx.
  • Драйвер протокола LIN для микроконтроллеров на базе UART.

Разное

  • Манчестерский код. Часть 1. Кодирование данных.
  • Манчестерский код. Часть 2. Декодирование данных.
  • STM32 и C++. Мой вариант архитектуры, обработка прерываний.
  • Рисуем изображение на экране осциллографа.
  • Отладка, STM32 и IAR, или Поймай меня, если сможешь.
  • Простейшая организация микросекундной задержки.
  • Микроконтроллер и Bootloader. Описание и принцип работы.
  • Микроконтроллер и Bootloader. Пример реализации.
  • STM32CubeMx. Быстрый старт с FreeRTOS для STM32.

Алгоритмы

  • ПИД-регулятор. Пример ПИД-регулятора температуры на STM32.
  • Настройка ПИД-регулятора. Метод Циглера-Никольса.
  • Эмуляция EEPROM на базе Flash-памяти микроконтроллеров.
  • Измерение напряжения питания микроконтроллера.
  • Мониторинг напряжения аккумулятора на микроконтроллере STM32.
  • Фильтрация и избавление от шумов в данных АЦП.

STM32 периферия

  • I2C. Настройка и пример использования шины I2C.
  • SPI и DMA. Конфигурация и пример использования.
  • ADC (АЦП) и DMA. Обзор, настройка и пример проекта.
  • UART. Прием и передача данных по UART в STM32CubeMx.
  • Timer Input Capture. Режим захвата сигнала.
  • Протокол CAN. Настройка в STM32CubeMx.
  • Watchdog. STM32CubeMx. Настройка модуля WWDG.
  • STM32CubeMx и watchdog. Настройка и использование IWDG.
  • DAC. Пример использования и настройка в STM32CubeMx.
  • USB. Реализация USB Mass Storage Device.
  • USB. Реализация USB Virtual COM Port.
  • SD-карта. Настройка FatFs в STM32CubeMx.
  • RCC. Настройки тактирования в STM32CubeMx.
  • Таймеры. STM32CubeMx. Настройка и использование.
  • GPIO. Настройка портов ввода-вывода в STM32CubeMx.
  • Быстрый старт с STM32CubeMx.

STM32 LCD

  • Подключение дисплея на базе ST7735 к микроконтроллеру STM32.
  • Дисплей на базе ST7735. Вывод изображения.
  • Дисплей на базе контроллера SSD1306. Библиотека для STM32.
  • Семисегментный индикатор. Динамическая индикация.

Датчики

  • Подключение датчика температуры DS18B20. Модуль KY-001.
  • Аудио-плеер на STM32. Воспроизведение WAV-файла.
  • Подключение магнитного энкодера AS5048 к микроконтроллеру.

Ностальгия

  • STM32CubeMx. USB Custom HID. Прием и передача данных.
  • Создание USB дескрипторов для класса Custom HID.
  • Микроконтроллер и драйвер светодиодов DM164.
  • USB. Реализация USB Audio Device Class.
  • Mass Storage Device. Использование FLASH-памяти.
  • FatFs. Файловая система FAT на внешней SD-карте.
  • Передача данных по USB.
  • Audio. Воспроизведение звука на STM32F4Discovery.
  • FreeRTOS. Быстрый старт для микроконтроллера STM32F4.
  • USB. Использование интерфейса USB на примере STM32F3.
  • Гироскоп L3GD20. Часть 2. Определение положения платы.
  • Гироскоп L3GD20. Часть 1. Настройка и обмен данными.
  • STM32 и дисплей на базе HD44780 в 4-битном режиме.
  • Подключение и использование дисплея на базе HD44780.

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

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