Программирование микроконтроллеров STM32 для начинающих

Современный мир электроники уже неразрывно связан с цифровыми устройствами, наиболее яркими представителями которых являются микроконтроллеры (МК). И если пару-несколько десятилетий назад можно было быть вполне успешным электронщиком, особо не разбираясь ни в микроконтроллерах, ни в микропроцессорах, то сейчас любой уважающий себя электронщик должен иметь достаточный уровень знаний в области программирования микроконтроллеров.

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

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

Среди множества МК в последние годы наибольшее распространение и применение получили микроконтроллеры STM32, производства компании ST Microelectronics. Эти МК приобрели популярность как в среде любителей, так и в среде профессионалов. Если посмотреть вакансии электронщиков и разработчиков встраиваемых систем, то в более чем 90 % вакансий требуются специалисты со знанием и навыками программирования МК STM32.

О курсе

В качестве основной принята плата NucleoF446 на базе STM32F446RE. Однако для изучения преимущественного большинства занятий курса подойдет практический любой STM32. Все же желательно чтобы это была плата Nucleo или Discovery, поскольку эти платы кроме микроконтроллера содержат программатор, что очень удобно, особенно в процессе обучения. Если возникнут вопросы касательно выбора платы для обучения – пишите мне по контактам, приведенным ниже.

Для кого предназначен курс STM32

Курс полностью самодостаточный – это означает, что для его изучения не требуются какие-либо предварительные знания ни в программировании, ни в микроконтроллерах. Более того, в ходе изучения материалов курса не придется отклоняться на дополнительное изучение стороннего материала. Вся необходимая информация содержится в самом курсе, поэтому и объем его приличный.

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

Инструментарий курса

Язык программирования: С (с нуля).

Среда разработки – CubeIDE (официальная бесплатная среда).

Библиотеки: HAL, CMSIS.

Микроконтроллер: плата NucleoF446 (или другая, здесь не строго).

Начало и продолжительность курса по программированию МК STM32

Начало курсов: 1 октября 2024 года.

Длительность курсов: 6 месяцев.

Периодичность занятий: 2…3 занятия в неделю.

Средняя продолжительность занятия: 2 часа.

Вид занятий: ОФлайн.

Курсы будут проходить следующим образом: в определенные дни и часы буду отправлять всем участникам ссылки на скачивание материалов для текущего занятия, а также буду дублировать ссылки на закрытый плейлист ютуб-канала, чтобы была возможность и скачать материалы, и посмотреть на ютубе в удобном качестве. В закрытой группе телеграмм буду отвечать на вопросы по каждому занятию. Поэтому рекомендую всем желающим приступить к курсу 1-го октября, чтобы вся группа двигалась одновременно. Также можно присоединиться к курсу и позже, поскольку материалы пройденных занятий будут предоставлены в записи.

Содержание курса 

Занятие 1

  1. Область применения микроконтроллеров.
  2. Структура МК.
  3. Инструментарий для программирования МК.
  4. Установка и настройка CubeIDE.
  5. Работа с документацией на МК. Первая программа.

Занятие 2

  1. Порты ввода-вывода (GPIO). Настройки портов на выход.
  2. Электрические характеристики МК.
  3. Расчет токоограничивающих резисторов.
  4. Директива препроцессора #include, комментарии, функция int main (void).
  5. Знакомство с библиотекой HAL.

Занятие 3

  1. Настройки выводов МК на вход.
  2. Подключение и считывание состояния контактов кнопок. Подтягивающие резисторы.
  3. Оператор цикла while(). Оператор ветвления if, if-else. Логические операции И, ИЛИ.

Занятие 4

  1. Переменные и константы.
  2. Операции сравнения и отношения.
  3. Типы данных.
  4. Операция присваивания, инкрементирование и декрементирование.
  5. Оператор цикла for.

Занятие 5

  1. Функции.
  2. Локальные и глобальные переменные.
  3. Унарные, бинарные и тернарные операции. Определение среднего и максимального значений.
  4. Переполнение типа данных.

Занятие 6

  1. Устройство, принцип действия и подключение одноразрядного семисегментного индиктора.
  2. Директива препроцессора #define.
  3. Оператор switch.
  4. Дребезг контактов кнопки. Борьба с дребезгом.
  5. Булевский тип данных.

Занятие 7

  1. Прерывания. Внешние прерывания. Приоритеты прерываний.
  2. Статический класс хранения static. Квалификатор extern.
  3. Борьба с дребезгом контактов в обработчике прерываний.
  4. Функция HAL_GetTick().
  5. Функция обратного вызова по прерываниям (CallBack).

Занятие 8

  1. Таймеры. Принцип работы.
  2. Базовые таймеры.

Занятие 9

  1. Система тактирования МК STM32.
  2. Выводы MCO. Тактирование одно МК от другого.
  3. Одноимпульсный режим таймера.

Занятие 10

  1. Динамическая индикация.
  2. Прерывания от таймеров.
  3. Квалификатор volatile.

Занятие 11

  1. Отображение десятичных и отрицательных чисел на динамической индикации.
  2. Типы данных с плавающей запятой.
  3. Преобразование типов данных.
  4. lrint() – функция математического округления числа или переменной с плавающей запятой в целочисленный тип данных.

Занятие 12

  1. Разработка секундомера и таймера.
  2. Быстрый счет кнопкой.
  3. Приоритеты прерываний.

Занятие 13

  1. Таймеры общего назначения.
  2. Тактирование и управление таймерами по внешним выводам МК.

Занятие 14

  1. Управление работой одних таймеров посредством других таймеров.
  2. Генерирование программных событий программным способом.

Занятие 15

  1. Режим сравнения таймеров.
  2. Формирование сдвига фаз на разных каналах таймера.
  3. Формирование сигналов разной частоты на отдельных каналах таймера.

Занятие 16

  1. Режим захвата таймера.
  2. Знакомство с отладчик МК.
  3. Измерение частоты внешнего сигнала. Разработка частотомера.

Занятие 17

  1. Широтно-импульсная модуляция (ШИМ). Принцип действия. Основные параметры и настройки.
  2. Модулирование синусоидальной ШИМ посредством таймеров.

Занятие 18

  1. Инкрементальный энкодер. Назначение, принцип действия, подключение.
  2. Аппаратная борьба с дребезгом контактов. RC-цепь. Триггер Шмитта.
  3. Считывание сигналов с энкодера посредством применения внешних прерывания.
  4. Считывание сигналов с энкодера посредством штатного режим энкодера МК.
  5. Вычисление направления, частоты оборотов и скорости вращения вала энкодера.

Занятие 19

  1. Интерфейс UART. Принцип обмена данными.
  2. Передача данных по UART в режиме опроса.
  3. Массивы. Массивы символов и строк. Вычисление числа элементов массива. Функции sizeof(), strlen().

Занятие 20

  1. Передача и прием данных по UART в режиме опроса.
  2. Функция sprintf(). Спецификаторы типов данных.
  3. Передача целочисленных данных и данных с плавающей запятой по UART.
  4. Применение логического анализатора.

Занятие 21

  1. Прерывания по UART.
  2. Работа UART в режиме IDLE.
  3. Общие понятия о контроллере DMA.
  4. Обмен данными по UART в режиме DMA.

Занятие 22

  1. Указатели.
  2. Связь указателей и массивов.
  3. Вызов функции по значению и по ссылке.

Занятие 23

  1. Аналого-цифровой преобразователь (АЦП). Принцип действия, основные параметры, режимы работы.
  2. Режим однократного и непрерывного преобразования одного канала.
  3. Разработка вольтметра. Делитель напряжения.

Занятие 24

  1. Измерение температуры внутреннего датчика температуры МК посредством АЦП.
  2. Проверка работоспособности аналоговых датчиков.
  3. Измерение температуры от внешних аналоговых датчиков температуры (датчики TMP35, TMP36).
  4. Изучение работы АЦП в режиме прерываний и DMA в режиме однократного и непрерывного преобразования.
  5. Усреднение данных измерения напряжений в режиме DMA.
  6. Получение заданного объема данных (числа измерений) в режиме DMA.

Занятие 25

  1. Управление ШИМ посредством АЦП. Плавное регулирование частоты оборотов двигателя постоянного тока.
  2. Применение одного канала АЦП для опроса состояния контактов нескольких кнопок.
  3. Режим сканирования каналов АЦП.

Занятие 26

  1. Запуск преобразования регулярных каналов АЦП от внешней линии и от таймеров.
  2. Настройки режимов работы инжектированных каналов.
  3. Запуска преобразования инжектированных каналов АЦП от таймеров и от внешней линии.

Занятие 27

  1. Цифро-аналоговый преобразователь (ЦАП). Принцип работы и основные характеристики.
  2. Настройки и формирование постоянного напряжения посредством ЦАП.
  3. Формирование напряжения синусоидальной формы с помощью ЦАП. Основные характеристики функции синуса.
  4. Формирование напряжения треугольной формы и шума аппаратными средствами микроконтроллера посредством ЦАП.  

Занятие 28

  1. Организация памяти микроконтроллеров STM32.
  2. Работа с памятью МК посредством доступа только по адресам.
  3. Управление портами МК посредством обращения напрямую к ячейкам памяти по адресам.

Занятие 29

  1. Структуры языка Си.
  2. Ключевое слово typedef.
  3. Знакомство с библиотекой CMSIS.

Занятие 30

  1. Побитовые операции.
  2. Установка, сброс, переключение и проверка отдельных битов регистров МК.
  3. Отладка кода посредством обращения к регистрам МК.
  4. Изучение библиотеки CMSIS.
  5. Сравнение частоты переключения пинов МК при задействование библиотек CMSIS и HAL, и управлении битами регистров МК по адресам.  

Занятие 31

  1. Сдвиговый регистр 74HC595. Принцип работы, управление, расширение портов МК.
  2. Статическая индикация на семисегментных индикаторах с применением сдвиговых регистров.
  3. Динамическая индикация на базе сдвиговых регистров 74HC595.

и т.д.

Содержание остальной половины курса будет расписано также подробно несколько позже.

До встречи на курсе!

Стоимость курса 360 USD

По вопросам записи на курс пишите сюда:

e-mail: zabarylodo@gmail.com

WhatsApp: +380634467738

Telegram: +380955505711

 

Дмитрий Забарило  

Add a Comment

Ваш адрес email не будет опубликован.