Программирование микроконтроллеров STM32 для начинающих
Автор: Дмитрий Забарило
Современный мир электроники уже неразрывно связан с цифровыми устройствами, наиболее яркими представителями которых являются микроконтроллеры (МК). И если пару-несколько десятилетий назад можно было быть вполне успешным электронщиком, особо не разбираясь ни в микроконтроллерах, ни в микропроцессорах, то сейчас любой уважающий себя электронщик должен иметь достаточный уровень знаний в области программирования микроконтроллеров.
Сегодня микроконтроллеры внедрены во все электронные устройства: от самых элементарных, типа умных ручек или музыкальных открыток, до авиационной и космической техники. Причем в современных автомобилях, электровозах, самолетах, ракетах и т.п. могут содержаться по несколько десятков микроконтроллеров. И это не удивительно, применяя МК можно значительно сократить время на разработку электронного устройства, снизить его массу, размеры и стоимость, повысить функциональность, снизить энергопотребление.
Касательно любительской практики: с помощью МК можно разрабатывать и создавать собственные электронные устройства, которые будет гораздо интересней и функциональней по сравнению с устройствами, собранными лишь на дискретных элементах, таких как транзисторы, резисторы, конденсаторы, диоды и т.п.
Среди множества МК в последние годы наибольшее распространение и применение получили микроконтроллеры STM32, производства компании ST Microelectronics. Эти МК приобрели популярность как в среде любителей, так и в среде профессионалов. Если посмотреть вакансии электронщиков и разработчиков встраиваемых систем, то в более чем 90 % вакансий требуются специалисты со знанием и навыками программирования МК STM32.
О курсе
В качестве основной принята плата NucleoF446 на базе STM32F446RE. Однако для изучения преимущественного большинства занятий курса подойдет практический любой STM32. Все же желательно чтобы это была плата Nucleo или Discovery, поскольку эти платы кроме микроконтроллера содержат программатор, что очень удобно, особенно в процессе обучения. Если возникнут вопросы касательно выбора платы для обучения – пишите мне по контактам, приведенным ниже.
Для кого предназначен курс STM32
Курс полностью самодостаточный – это означает, что для его изучения не требуются какие-либо предварительные знания ни в программировании, ни в микроконтроллерах. Более того, в ходе изучения материалов курса не придется отклоняться на дополнительное изучение стороннего материала. Вся необходимая информация содержится в самом курсе, поэтому и объем его приличный.
Хотя название курса включает фразу «для начинающих», однако материал довольно объемный и углубленный, а вот изложение его выполнено понятным языком для самых начинающих.
Инструментарий курса
Язык программирования: С (с нуля).
Среда разработки – CubeIDE (официальная бесплатная среда).
Библиотеки: HAL, CMSIS.
Микроконтроллер: плата NucleoF446 (или другая, здесь не строго).
Спойлер: Содержание курса
Занятие 1
Цена: 360 USD
Скрытая ссылка
Автор: Дмитрий Забарило
Современный мир электроники уже неразрывно связан с цифровыми устройствами, наиболее яркими представителями которых являются микроконтроллеры (МК). И если пару-несколько десятилетий назад можно было быть вполне успешным электронщиком, особо не разбираясь ни в микроконтроллерах, ни в микропроцессорах, то сейчас любой уважающий себя электронщик должен иметь достаточный уровень знаний в области программирования микроконтроллеров.
Сегодня микроконтроллеры внедрены во все электронные устройства: от самых элементарных, типа умных ручек или музыкальных открыток, до авиационной и космической техники. Причем в современных автомобилях, электровозах, самолетах, ракетах и т.п. могут содержаться по несколько десятков микроконтроллеров. И это не удивительно, применяя МК можно значительно сократить время на разработку электронного устройства, снизить его массу, размеры и стоимость, повысить функциональность, снизить энергопотребление.
Касательно любительской практики: с помощью МК можно разрабатывать и создавать собственные электронные устройства, которые будет гораздо интересней и функциональней по сравнению с устройствами, собранными лишь на дискретных элементах, таких как транзисторы, резисторы, конденсаторы, диоды и т.п.
Среди множества МК в последние годы наибольшее распространение и применение получили микроконтроллеры STM32, производства компании ST Microelectronics. Эти МК приобрели популярность как в среде любителей, так и в среде профессионалов. Если посмотреть вакансии электронщиков и разработчиков встраиваемых систем, то в более чем 90 % вакансий требуются специалисты со знанием и навыками программирования МК STM32.
О курсе
В качестве основной принята плата NucleoF446 на базе STM32F446RE. Однако для изучения преимущественного большинства занятий курса подойдет практический любой STM32. Все же желательно чтобы это была плата Nucleo или Discovery, поскольку эти платы кроме микроконтроллера содержат программатор, что очень удобно, особенно в процессе обучения. Если возникнут вопросы касательно выбора платы для обучения – пишите мне по контактам, приведенным ниже.
Для кого предназначен курс STM32
Курс полностью самодостаточный – это означает, что для его изучения не требуются какие-либо предварительные знания ни в программировании, ни в микроконтроллерах. Более того, в ходе изучения материалов курса не придется отклоняться на дополнительное изучение стороннего материала. Вся необходимая информация содержится в самом курсе, поэтому и объем его приличный.
Хотя название курса включает фразу «для начинающих», однако материал довольно объемный и углубленный, а вот изложение его выполнено понятным языком для самых начинающих.
Инструментарий курса
Язык программирования: С (с нуля).
Среда разработки – CubeIDE (официальная бесплатная среда).
Библиотеки: HAL, CMSIS.
Микроконтроллер: плата NucleoF446 (или другая, здесь не строго).
Спойлер: Содержание курса
Занятие 1
- Область применения микроконтроллеров.
- Структура МК.
- Инструментарий для программирования МК.
- Установка и настройка CubeIDE.
- Работа с документацией на МК. Первая программа.
- Порты ввода-вывода (GPIO). Настройки портов на выход.
- Электрические характеристики МК.
- Расчет токоограничивающих резисторов.
- Директива препроцессора #include, комментарии, функция int main (void).
- Знакомство с библиотекой HAL.
- Настройки выводов МК на вход.
- Подключение и считывание состояния контактов кнопок. Подтягивающие резисторы.
- Оператор цикла while(). Оператор ветвления if, if-else. Логические операции И, ИЛИ.
- Переменные и константы.
- Операции сравнения и отношения.
- Типы данных.
- Операция присваивания, инкрементирование и декрементирование.
- Оператор цикла for.
- Функции.
- Локальные и глобальные переменные.
- Унарные, бинарные и тернарные операции. Определение среднего и максимального значений.
- Переполнение типа данных.
- Устройство, принцип действия и подключение одноразрядного семисегментного индиктора.
- Директива препроцессора #define.
- Оператор switch.
- Дребезг контактов кнопки. Борьба с дребезгом.
- Булевский тип данных.
- Прерывания. Внешние прерывания. Приоритеты прерываний.
- Статический класс хранения static. Квалификатор extern.
- Борьба с дребезгом контактов в обработчике прерываний.
- Функция HAL_GetTick().
- Функция обратного вызова по прерываниям (CallBack).
- Таймеры. Принцип работы.
- Базовые таймеры.
- Система тактирования МК STM32.
- Выводы MCO. Тактирование одно МК от другого.
- Одноимпульсный режим таймера.
- Динамическая индикация.
- Прерывания от таймеров.
- Квалификатор volatile.
- Отображение десятичных и отрицательных чисел на динамической индикации.
- Типы данных с плавающей запятой.
- Преобразование типов данных.
- lrint() – функция математического округления числа или переменной с плавающей запятой в целочисленный тип данных.
- Разработка секундомера и таймера.
- Быстрый счет кнопкой.
- Приоритеты прерываний.
- Таймеры общего назначения.
- Тактирование и управление таймерами по внешним выводам МК.
- Управление работой одних таймеров посредством других таймеров.
- Генерирование программных событий программным способом.
- Режим сравнения таймеров.
- Формирование сдвига фаз на разных каналах таймера.
- Формирование сигналов разной частоты на отдельных каналах таймера.
- Режим захвата таймера.
- Знакомство с отладчик МК.
- Измерение частоты внешнего сигнала. Разработка частотомера.
- Широтно-импульсная модуляция (ШИМ). Принцип действия. Основные параметры и настройки.
- Модулирование синусоидальной ШИМ посредством таймеров.
- Инкрементальный энкодер. Назначение, принцип действия, подключение.
- Аппаратная борьба с дребезгом контактов. RC-цепь. Триггер Шмитта.
- Считывание сигналов с энкодера посредством применения внешних прерывания.
- Считывание сигналов с энкодера посредством штатного режим энкодера МК.
- Вычисление направления, частоты оборотов и скорости вращения вала энкодера.
- Интерфейс UART. Принцип обмена данными.
- Передача данных по UART в режиме опроса.
- Массивы. Массивы символов и строк. Вычисление числа элементов массива. Функции sizeof(), strlen().
- Передача и прием данных по UART в режиме опроса.
- Функция sprintf(). Спецификаторы типов данных.
- Передача целочисленных данных и данных с плавающей запятой по UART.
- Применение логического анализатора.
- Прерывания по UART.
- Работа UART в режиме IDLE.
- Общие понятия о контроллере DMA.
- Обмен данными по UART в режиме DMA.
- Указатели.
- Связь указателей и массивов.
- Вызов функции по значению и по ссылке.
- Аналого-цифровой преобразователь (АЦП). Принцип действия, основные параметры, режимы работы.
- Режим однократного и непрерывного преобразования одного канала.
- Разработка вольтметра. Делитель напряжения.
- Измерение температуры внутреннего датчика температуры МК посредством АЦП.
- Проверка работоспособности аналоговых датчиков.
- Измерение температуры от внешних аналоговых датчиков температуры (датчики TMP35, TMP36).
- Изучение работы АЦП в режиме прерываний и DMA в режиме однократного и непрерывного преобразования.
- Усреднение данных измерения напряжений в режиме DMA.
- Получение заданного объема данных (числа измерений) в режиме DMA.
- Управление ШИМ посредством АЦП. Плавное регулирование частоты оборотов двигателя постоянного тока.
- Применение одного канала АЦП для опроса состояния контактов нескольких кнопок.
- Режим сканирования каналов АЦП.
- Запуск преобразования регулярных каналов АЦП от внешней линии и от таймеров.
- Настройки режимов работы инжектированных каналов.
- Запуска преобразования инжектированных каналов АЦП от таймеров и от внешней линии.
- Цифро-аналоговый преобразователь (ЦАП). Принцип работы и основные характеристики.
- Настройки и формирование постоянного напряжения посредством ЦАП.
- Формирование напряжения синусоидальной формы с помощью ЦАП. Основные характеристики функции синуса.
- Формирование напряжения треугольной формы и шума аппаратными средствами микроконтроллера посредством ЦАП.
- Организация памяти микроконтроллеров STM32.
- Работа с памятью МК посредством доступа только по адресам.
- Управление портами МК посредством обращения напрямую к ячейкам памяти по адресам.
- Структуры языка Си.
- Ключевое слово typedef.
- Знакомство с библиотекой CMSIS.
- Побитовые операции.
- Установка, сброс, переключение и проверка отдельных битов регистров МК.
- Отладка кода посредством обращения к регистрам МК.
- Изучение библиотеки CMSIS.
- Сравнение частоты переключения пинов МК при задействование библиотек CMSIS и HAL, и управлении битами регистров МК по адресам.
- Сдвиговый регистр 74HC595. Принцип работы, управление, расширение портов МК.
- Статическая индикация на семисегментных индикаторах с применением сдвиговых регистров.
- Динамическая индикация на базе сдвиговых регистров 74HC595.
- ЖК дисплей. Подключение. Инициализация.
- Отображение символов и строк на ЖК дисплее.
- Выбор позиции на дисплее для отображения информации.
- ЖК дисплей. Отображение на ЖК дисплее значений целочисленных переменных и переменных с плавающей запятой.
- Генерирование собсвенных любых символов на дисплее. CGRAM и DDRAM память дисплеев.
- Отображение текущих значений температуры и напряжения на ЖК дисплее.
- Матричная клавиатура. Принцип работы. Подключение. Отображение символов клавиатуры на LCD дисплее.
- Подключение нагрузки посредством ввода правильного пароля, вводимого из клавиатуры.
- Двумерные массивы.
- Расширенное пояснение директивы препроцессора #include.
- Подключаемые файлы с расширением .h и .c.
- Принцип создание собственной библиотеки.
- Интерфейс I2C. Принцип обмена данными. Основные параметры и настройки.
- Расширитель портов микроконтроллера на базе микросхемы PCF8574. Настройки для работы микросхемы PCF8574 на вход и выход.
- Подколючение LCD дисплея 2004 по интерфейсу I2C посредством PCF8574.
- Интерфейс I2C. Датчик температуры LM75B: принцип работы, подключение, измерение температуры, настройка гистерезиса температуры.
- Написание библиотеки для датчика LM75B.
- Интерфейс I2C. Подключение внешней энергонезависимой памяти EEPROM. Устройство EEPROM. Принцип записи и чтения данных из EEPROM памяти.
- Применение специальных функций HAL для работы с памятью.
- Функции atoi, atof, atol, atoll.
- Подключение EEPROM памяти разных производителей.
- Интерфейс I2C. Подключение датчика температуры и влажности SHT3x.
- Отображение значений температуры и влажности на LCD дисплее, подключенного к той же линии I2C.
- Интерфейс I2C. Устройство, принцип работы и подключение OLED дисплея.
- Отображение данных на дисплее без применения сторонних библиотек.
- Отображение данных, значений переменных, рисунков и анимаций на OLED дисплее с помощью сторонней библиотеки.
Цена: 360 USD
Скрытая ссылка
Для просмотра скрытого содержимого необходимо Войти или Зарегистрироваться.