- •Оглавление
- •Предисловие
- •Почему я написал книгу?
- •Для кого эта книга?
- •Как использовать эту книгу?
- •Как организована книга?
- •Об авторе
- •Ошибки и предложения
- •Поддержка книги
- •Как помочь автору
- •Отказ от авторского права
- •Благодарность за участие
- •Перевод
- •Благодарности
- •I Введение
- •1. Введение в ассортимент микроконтроллеров STM32
- •1.1. Введение в процессоры на базе ARM
- •1.1.1. Cortex и процессоры на базе Cortex-M
- •1.1.1.10. Внедренные функции Cortex-M в ассортименте STM32
- •1.2. Введение в микроконтроллеры STM32
- •1.2.1. Преимущества ассортимента STM32….
- •1.2.2. ….И его недостатки
- •1.3. Краткий обзор подсемейств STM32
- •1.3.1. Серия F0
- •1.3.2. Серия F1
- •1.3.3. Серия F2
- •1.3.4. Серия F3
- •1.3.5. Серия F4
- •1.3.6. Серия F7
- •1.3.7. Серия H7
- •1.3.8. Серия L0
- •1.3.9. Серия L1
- •1.3.10. Серия L4
- •1.3.11. Серия L4+
- •1.3.12. Серия STM32WB
- •1.3.13. Как правильно выбрать для себя микроконтроллер?
- •1.4. Отладочная плата Nucleo
- •2. Установка инструментария
- •2.1. Почему выбирают Eclipse/GCC в качестве инструментария для STM32
- •2.1.1. Два слова о Eclipse…
- •2.2. Windows – Установка инструментария
- •2.2.1. Windows – Установка Eclipse
- •2.2.2. Windows – Установка плагинов Eclipse
- •2.2.3. Windows – Установка GCC ARM Embedded
- •2.2.4. Windows – Установка инструментов сборки
- •2.2.5. Windows – Установка OpenOCD
- •2.2.6. Windows – Установка инструментов ST и драйверов
- •2.3. Linux – Установка инструментария
- •2.3.2. Linux – Установка Java
- •2.3.3. Linux – Установка Eclipse
- •2.3.4. Linux – Установка плагинов Eclipse
- •2.3.5. Linux – Установка GCC ARM Embedded
- •2.3.6. Linux – Установка драйверов Nucleo
- •2.3.7. Linux – Установка OpenOCD
- •2.3.8. Linux – Установка инструментов ST
- •2.4. Mac – Установка инструментария
- •2.4.1. Mac – Установка Eclipse
- •2.4.2. Mac – Установка плагинов Eclipse
- •2.4.3. Mac – Установка GCC ARM Embedded
- •2.4.4. Mac – Установка драйверов Nucleo
- •2.4.5. Mac – Установка OpenOCD
- •2.4.6. Mac – Установка инструментов ST
- •3. Hello, Nucleo!
- •3.1. Прикоснитесь к Eclipse IDE
- •3.2. Создание проекта
- •3.3. Подключение Nucleo к ПК
- •3.5. Изучение сгенерированного кода
- •4. Инструмент STM32CubeMX
- •4.1. Введение в инструмент CubeMX
- •4.1.1. Представление Pinout
- •4.1.2. Представление Clock Configuration
- •4.1.3. Представление Configuration
- •4.1.4. Представление Power Consumption Calculator
- •4.2. Генерация проекта
- •4.2.1. Генерация проекта Си при помощи CubeMX
- •4.2.2. Создание проекта Eclipse
- •4.2.3. Ручное импортирование сгенерированных файлов в проект Eclipse
- •4.3. Изучение сгенерированного кода приложения
- •4.3.1. Добавим что-нибудь полезное в микропрограмму
- •4.4. Загрузка исходного кода примеров книги
- •5. Введение в отладку
- •5.1. Начало работы с OpenOCD
- •5.1.1. Запуск OpenOCD
- •5.1.2. Подключение к OpenOCD Telnet Console
- •5.1.3. Настройка Eclipse
- •5.1.4. Отладка в Eclipse
- •5.2. Полухостинг ARM
- •5.2.1. Включение полухостинга в новом проекте
- •5.2.2. Включение полуохостинга в существующем проекте
- •5.2.3. Недостатки полухостинга
- •5.2.4. Как работает полухостинг
- •II Погружение в HAL
- •6. Управление GPIO
- •6.2. Конфигурация GPIO
- •6.2.1. Режимы работы GPIO
- •6.2.2. Режим альтернативной функции GPIO
- •6.2.3. Понятие скорости GPIO
- •6.3. Управление GPIO
- •6.4. Деинициализация GPIO
- •7. Обработка прерываний
- •7.1. Контроллер NVIC
- •7.1.1. Таблица векторов в STM32
- •7.2. Разрешение прерываний
- •7.2.1. Линии запроса внешних прерываний и контроллер NVIC
- •7.2.2. Разрешение прерываний в CubeMX
- •7.3. Жизненный цикл прерываний
- •7.4. Уровни приоритета прерываний
- •7.4.1. Cortex-M0/0+
- •7.4.2. Cortex-M3/4/7
- •7.4.3. Установка уровня прерываний в CubeMX
- •7.5. Реентерабельность прерываний
- •8. Универсальные асинхронные последовательные средства связи
- •8.1. Введение в UART и USART
- •8.2. Инициализация UART
- •8.3. UART-связь в режиме опроса
- •8.3.1. Установка консоли последовательного порта в Windows
- •8.3.2. Установка консоли последовательного порта в Linux и MacOS X
- •8.4. UART-связь в режиме прерываний
- •8.5. Обработка ошибок
- •8.6. Перенаправление ввода-вывода
- •9. Управление DMA
- •9.1. Введение в DMA
- •9.1.1. Необходимость DMA и роль внутренних шин
- •9.1.2. Контроллер DMA
- •9.2. Модуль HAL_DMA
- •9.2.1. DMA_HandleTypeDef в HAL для F0/F1/F3/L0/L1/L4
- •9.2.2. DMA_HandleTypeDef в HAL для F2/F4/F7
- •9.2.3. DMA_HandleTypeDef в HAL для L0/L4
- •9.2.4. Как выполнять передачи в режиме опроса
- •9.2.5. Как выполнять передачи в режиме прерываний
- •9.2.8. Разнообразные функции модулей HAL_DMA и HAL_DMA_Ex
- •9.3. Использование CubeMX для конфигурации запросов к DMA
- •10. Схема тактирования
- •10.1. Распределение тактового сигнала
- •10.1.1. Обзор схемы тактирования STM32
- •10.1.1.1. Многочастотный внутренний RC-генератор в семействах STM32L
- •10.1.3.1. Подача тактового сигнала от высокочастотного генератора
- •10.1.3.2. Подача тактового сигнала от 32кГц генератора
- •10.2. Обзор модуля HAL_RCC
- •10.2.1. Вычисление тактовой частоты во время выполнения
- •10.2.2. Разрешение Выхода синхронизации
- •10.2.3. Разрешение Системы защиты тактирования
- •10.3. Калибровка HSI-генератора
- •11. Таймеры
- •11.1. Введение в таймеры
- •11.1.1. Категории таймеров в микроконтроллере STM32
- •11.1.2. Доступность таймеров в ассортименте STM32
- •11.2. Базовые таймеры
- •11.2.1. Использование таймеров в режиме прерываний
- •11.2.2. Использование таймеров в режиме опроса
- •11.2.3. Использование таймеров в режиме DMA
- •11.2.4. Остановка таймера
- •11.3. Таймеры общего назначения
- •11.3.1.1. Режим внешнего тактирования 2
- •11.3.1.2. Режим внешнего тактирования 1
- •11.3.2. Режимы синхронизации ведущего/ведомого таймеров
- •11.3.2.1. Разрешение прерываний, относящихся к триггерной цепи
- •11.3.2.2. Использование CubeMX для конфигурации синхронизации ведущего/ведомого устройств
- •11.3.3. Программная генерация связанных с таймером событий
- •11.3.4. Режимы отсчета
- •11.3.5. Режим захвата входного сигнала
- •11.3.5.1. Использование CubeMX для конфигурации режима захвата входного сигнала
- •11.3.6. Режим сравнения выходного сигнала
- •11.3.6.1. Использование CubeMX для конфигурации режима сравнения выходного сигнала
- •11.3.7. Генерация широтно-импульсного сигнала
- •11.3.7.1. Генерация синусоидального сигнала при помощи ШИМ
- •11.3.7.2. Использование CubeMX для конфигурации режима ШИМ
- •11.3.8. Одноимпульсный режим
- •11.3.8.1. Использование CubeMX для конфигурации одноимпульсного режима
- •11.3.9. Режим энкодера
- •11.3.9.1. Использование CubeMX для конфигурации режима энкодера
- •11.3.10.1. Режим датчика Холла
- •11.3.10.2. Комбинированный режим трехфазной ШИМ и другие функции управления двигателем
- •11.3.10.3. Вход сброса таймера и блокировка регистров таймера
- •11.3.10.4. Предварительная загрузка регистра автоперезагрузки
- •11.3.11. Отладка и таймеры
- •11.4. Системный таймер SysTick
- •12. Аналого-цифровое преобразование
- •12.1. Введение в АЦП последовательного приближения
- •12.2. Модуль HAL_ADC
- •12.2.1. Режимы преобразования
- •12.2.1.1. Режим однократного преобразования одного канала
- •12.2.1.2. Режим сканирования с однократным преобразованием
- •12.2.1.3. Режим непрерывного преобразования одного канала
- •12.2.1.4. Режим сканирования с непрерывным преобразованием
- •12.2.1.5. Режим преобразования инжектированных каналов
- •12.2.1.6. Парный режим
- •12.2.2. Выбор канала
- •12.2.3. Разрядность АЦП и скорость преобразования
- •12.2.4. Аналого-цифровые преобразования в режиме опроса
- •12.2.6. Аналого-цифровые преобразования в режиме DMA
- •12.2.6.1. Многократное преобразование одного канала в режиме DMA
- •12.2.6.3. Непрерывные преобразования в режиме DMA
- •12.2.7. Обработка ошибок
- •12.2.8. Преобразования, управляемые таймером
- •12.2.9. Преобразования, управляемые внешними событиями
- •12.2.10. Калибровка АЦП
- •12.3. Использование CubeMX для конфигурации АЦП
- •13.1. Введение в периферийное устройство ЦАП
- •13.2. Модуль HAL_DAC
- •13.2.1. Управление ЦАП вручную
- •13.2.2. Управление ЦАП в режиме DMA с использованием таймера
- •13.2.3. Генерация треугольного сигнала
- •13.2.4. Генерация шумового сигнала
- •14.1. Введение в спецификацию I²C
- •14.1.1. Протокол I²C
- •14.1.1.1. START- и STOP-условия
- •14.1.1.2. Формат байта
- •14.1.1.3. Кадр адреса
- •14.1.1.4. Биты «Подтверждено» (ACK) и «Не подтверждено» (NACK)
- •14.1.1.5. Кадры данных
- •14.1.1.6. Комбинированные транзакции
- •14.1.1.7. Удержание синхросигнала
- •14.1.2. Наличие периферийных устройств I²C в микроконтроллерах STM32
- •14.2. Модуль HAL_I2C
- •14.2.1.1. Операции I/O MEM
- •14.2.1.2. Комбинированные транзакции
- •14.3. Использование CubeMX для конфигурации периферийного устройства I²C
- •15.1. Введение в спецификацию SPI
- •15.1.1. Полярность и фаза тактового сигнала
- •15.1.2. Управление сигналом Slave Select
- •15.1.3. Режим TI периферийного устройства SPI
- •15.1.4. Наличие периферийных устройств SPI в микроконтроллерах STM32
- •15.2. Модуль HAL_SPI
- •15.2.1. Обмен сообщениями с использованием периферийного устройства SPI
- •15.2.2. Максимальная частота передачи, достижимая при использовании CubeHAL
- •15.3. Использование CubeMX для конфигурации периферийного устройства SPI
- •16. Циклический контроль избыточности
- •16.1. Введение в расчет CRC
- •16.1.1. Расчет CRC в микроконтроллерах STM32F1/F2/F4/L1
- •16.2. Модуль HAL_CRC
- •17. Независимый и оконный сторожевые таймеры
- •17.1. Независимый сторожевой таймер
- •17.1.1. Использование CubeHAL для программирования таймера IWDG
- •17.2. Системный оконный сторожевой таймер
- •17.2.1. Использование CubeHAL для программирования таймера WWDG
- •17.3. Отслеживание системного сброса, вызванного сторожевым таймером
- •17.4. Заморозка сторожевых таймеров во время сеанса отладки
- •17.5. Выбор сторожевого таймера, подходящего для вашего приложения
- •18. Часы реального времени
- •18.1. Введение в периферийное устройство RTC
- •18.2. Модуль HAL_RTC
- •18.2.1. Установка и получение текущей даты/времени
- •18.2.1.1. Правильный способ чтения значений даты/времени
- •18.2.2. Конфигурирование будильников
- •18.2.3. Блок периодического пробуждения
- •18.2.5. Калибровка RTC
- •18.2.5.1. Грубая калибровка RTC
- •18.2.5.2. Тонкая калибровка RTC
- •18.2.5.3. Обнаружение опорного тактового сигнала
- •18.3. Использование резервной SRAM
- •III Дополнительные темы
- •19. Управление питанием
- •19.1. Управление питанием в микроконтроллерах на базе Cortex-M
- •19.2. Как микроконтроллеры Cortex-M управляют рабочим и спящим режимами
- •19.2.1. Переход в/выход из спящих режимов
- •19.2.1.1. «Спящий режим по выходу»
- •19.3. Управление питанием в микроконтроллерах STM32F
- •19.3.1. Источники питания
- •19.3.2. Режимы питания
- •19.3.2.1. Рабочий режим
- •19.3.2.2. Спящий режим
- •19.3.2.3. Режим останова
- •19.3.2.4. Режим ожидания
- •19.3.2.5. Пример работы в режимах пониженного энергопотребления
- •19.4. Управление питанием в микроконтроллерах STM32L
- •19.4.1. Источники питания
- •19.4.2. Режимы питания
- •19.4.2.1. Рабочие режимы
- •19.4.2.2. Спящие режимы
- •19.4.2.2.1. Режим пакетного сбора данных
- •19.4.2.3. Режимы останова
- •19.4.2.4. Режимы ожидания
- •19.4.2.5. Режим выключенного состояния
- •19.4.3. Переходы между режимами питания
- •19.4.4. Периферийные устройства с пониженным энергопотреблением
- •19.4.4.1. LPUART
- •19.4.4.2. LPTIM
- •19.5. Инспекторы источников питания
- •19.6. Отладка в режимах пониженного энергопотребления
- •19.7. Использование калькулятора энергопотребления CubeMX
- •20. Организация памяти
- •20.1. Модель организации памяти в STM32
- •20.1.1. Основы процессов компиляции и компоновки
- •20.2.1. Исследование бинарного ELF-файла
- •20.2.2. Инициализация секций .data и .bss
- •20.2.2.1. Пара слов о секции COMMON
- •20.2.3. Секция .rodata
- •20.2.4. Области Стека и Кучи
- •20.2.5. Проверка размера Кучи и Стека на этапе компиляции
- •20.2.6. Различия с файлами скриптов инструментария
- •20.3. Как использовать CCM-память
- •20.3.1. Перемещение таблицы векторов в CCM-память
- •20.4.1. Программирование MPU с использованием CubeHAL
- •21. Управление Flash-памятью
- •21.1. Введение во Flash-память STM32
- •21.2. Модуль HAL_FLASH
- •21.2.1. Разблокировка Flash-памяти
- •21.2.2. Стирание Flash-памяти
- •21.2.3. Программирование Flash-памяти
- •21.3. Байты конфигурации
- •21.3.1. Защита от чтения Flash-памяти
- •21.4. Дополнительные памяти OTP и EEPROM
- •21.5. Задержка чтения Flash-памяти и ускоритель ART™ Accelerator
- •21.5.1. Роль TCM-памятей в микроконтроллерах STM32F7
- •22. Процесс начальной загрузки
- •22.1.1. Программное физическое перераспределение памяти
- •22.1.2. Перемещение таблицы векторов
- •22.1.3. Запуск микропрограммы из SRAM с помощью инструментария GNU MCU Eclipse
- •22.2. Встроенный загрузчик
- •22.2.1. Запуск загрузчика из встроенного программного обеспечения
- •22.2.2. Последовательность начальной загрузки в инструментарии GNU MCU Eclipse
- •22.3. Разработка пользовательского загрузчика
- •22.3.2. Как использовать инструмент flasher.py
- •23. Запуск FreeRTOS
- •23.1. Введение в концепции, лежащие в основе ОСРВ
- •23.2.1. Структура файлов с исходным кодом FreeRTOS
- •23.2.1.2. Как импортировать FreeRTOS с использованием CubeMX и CubeMXImporter
- •23.3. Управление потоками
- •23.3.1. Состояния потоков
- •23.3.2. Приоритеты потоков и алгоритмы планирования
- •23.3.3. Добровольное освобождение от управления
- •23.3.4. Холостой поток idle
- •23.4. Выделение памяти и управление ею
- •23.4.1. Модель динамического выделения памяти
- •23.4.1.1. heap_1.c
- •23.4.1.2. heap_2.c
- •23.4.1.3. heap_3.c
- •23.4.1.4. heap_4.c
- •23.4.1.5. heap_5.c
- •23.4.2. Модель статического выделения памяти
- •23.4.3. Пулы памяти
- •23.4.4. Обнаружение переполнения стека
- •23.5. Примитивы синхронизации
- •23.5.1. Очереди сообщений
- •23.5.2. Cемафоры
- •23.5.3. Сигналы потоков
- •23.6. Управление ресурсами и взаимное исключение
- •23.6.1. Мьютексы
- •23.6.2. Критические секции
- •23.6.3. Обработка прерываний совместно с ОСРВ
- •23.7. Программные таймеры
- •23.7.1. Как FreeRTOS управляет таймерами
- •23.8. Пример из практики: Управление энергосбережением с ОСРВ
- •23.8.1. Перехват холостого потока idle
- •23.8.2. Бестиковый режим во FreeRTOS
- •23.9. Возможности отладки
- •23.9.1. Макрос configASSERT()
- •23.9.2. Статистика среды выполнения и информация о состоянии потоков
- •23.10. Альтернативы FreeRTOS
- •23.10.1. ChibiOS
- •23.10.2. ОС Contiki
- •23.10.3. OpenRTOS
- •24. Продвинутые методы отладки
- •24.1. Введение в исключения отказов Cortex-M
- •24.1.1.1. Как инструментарий GNU MCU Eclipse обрабатывает исключения отказов
- •24.1.1.2. Как интерпретировать содержимое регистра LR при переходе в исключение
- •24.1.2. Исключения отказов и их анализ
- •24.2.1. Представление Expressions
- •24.2.1.1. Мониторы памяти
- •24.2.2. Точки наблюдения
- •24.2.3. Режим Instruction Stepping Mode
- •24.2.4. Keil Packs и представление Peripheral Registers
- •24.2.5. Представление Core Registers
- •24.3. Средства отладки от CubeHAL
- •24.4. Внешние отладчики
- •24.4.1. Использование SEGGER J-Link для отладчика ST-LINK
- •24.4.2. Использование интерфейса ITM и трассировка SWV
- •24.5. STM Studio
- •24.6. Одновременная отладка двух плат Nucleo
- •25. Файловая система FAT
- •25.1. Введение в библиотеку FatFs
- •25.1.1. Использование CubeMX для включения в ваши проекты библиотеки FatFs
- •25.1.2. Наиболее важные структуры и функции FatFs
- •25.1.2.1. Монтирование файловой системы
- •25.1.2.2. Открытие файлов
- •25.1.2.3. Чтение и запись файла
- •25.1.2.4. Создание и открытие каталога
- •25.1.3. Как сконфигурировать библиотеку FatFs
- •26. Разработка IoT-приложений
- •26.2. Ethernet контроллер W5500
- •26.2.1. Как использовать шилд W5500 и модуль ioLibrary_Driver
- •26.2.1.1. Конфигурирование интерфейса SPI
- •26.2.1.2. Настройка буферов сокетов и сетевого интерфейса
- •26.2.2. API-интерфейсы сокетов
- •26.2.2.1. Управление сокетами в режиме TCP
- •26.2.2.2. Управление сокетами в режиме UDP
- •26.2.3. Перенаправление ввода-вывода на сокет TCP/IP
- •26.2.4. Настройка HTTP-сервера
- •26.2.4.1. Веб-осциллограф
- •27. Начало работы над новым проектом
- •27.1. Проектирование оборудования
- •27.1.1. Послойная разводка печатной платы
- •27.1.2. Корпус микроконтроллера
- •27.1.3. Развязка выводов питания
- •27.1.4. Тактирование
- •27.1.5. Фильтрация вывода сброса RESET
- •27.1.6. Отладочный порт
- •27.1.7. Режим начальной загрузки
- •27.1.8. Обратите внимание на совместимость с выводами…
- •27.1.9. …и на выбор подходящей периферии
- •27.1.10. Роль CubeMX на этапе проектирования платы
- •27.1.11. Стратегии разводки платы
- •27.2. Разработка программного обеспечения
- •27.2.1. Генерация бинарного образа для производства
- •Приложение
- •Принудительный сброс микроконтроллера из микропрограммы
- •B. Руководство по поиску и устранению неисправностей
- •Проблемы с установкой GNU MCU Eclipse
- •Проблемы, связанные с Eclipse
- •Eclipse не может найти компилятор
- •Eclipse постоянно прерывается при выполнении каждой инструкции во время сеанса отладки
- •Пошаговая отладка очень медленная
- •Микропрограмма работает только в режиме отладки
- •Проблемы, связанные с STM32
- •Микроконтроллер не загружается корректно
- •Невозможно загрузить микропрограмму или отладить микроконтроллер
- •C. Схема выводов Nucleo
- •Nucleo-F446RE
- •Разъемы, совместимые с Arduino
- •Morpho-разъемы
- •Nucleo-F411RE
- •Разъемы, совместимые с Arduino
- •Morpho-разъемы
- •Nucleo-F410RB
- •Разъемы, совместимые с Arduino
- •Morpho-разъемы
- •Nucleo-F401RE
- •Разъемы, совместимые с Arduino
- •Morpho-разъемы
- •Nucleo-F334R8
- •Разъемы, совместимые с Arduino
- •Morpho-разъемы
- •Nucleo-F303RE
- •Разъемы, совместимые с Arduino
- •Morpho-разъемы
- •Nucleo-F302R8
- •Разъемы, совместимые с Arduino
- •Morpho-разъемы
- •Nucleo-F103RB
- •Разъемы, совместимые с Arduino
- •Morpho-разъемы
- •Nucleo-F091RC
- •Разъемы, совместимые с Arduino
- •Morpho-разъемы
- •Nucleo-F072RB
- •Разъемы, совместимые с Arduino
- •Morpho-разъемы
- •Nucleo-F070RB
- •Разъемы, совместимые с Arduino
- •Morpho-разъемы
- •Nucleo-F030R8
- •Разъемы, совместимые с Arduino
- •Morpho-разъемы
- •Nucleo-L476RG
- •Разъемы, совместимые с Arduino
- •Morpho-разъемы
- •Nucleo-L152RE
- •Разъемы, совместимые с Arduino
- •Morpho-разъемы
- •Nucleo-L073R8
- •Разъемы, совместимые с Arduino
- •Morpho-разъемы
- •Nucleo-L053R8
- •Разъемы, совместимые с Arduino
- •Morpho-разъемы
- •D. Корпусы STM32
- •LFBGA
- •LQFP
- •TFBGA
- •TSSOP
- •UFQFPN
- •UFBGA
- •VFQFP
- •WLCSP
- •E. Изменения книги
- •Выпуск 0.1 – Октябрь 2015
- •Выпуск 0.2 – 28 октября 2015
- •Выпуск 0.2.1 – 31 октября 2015
- •Выпуск 0.2.2 – 1 ноября 2015
- •Выпуск 0.3 – 12 ноября 2015
- •Выпуск 0.4 – 4 декабря 2015
- •Выпуск 0.5 – 19 декабря 2015
- •Выпуск 0.6 – 18 января 2016
- •Выпуск 0.6.1 – 20 января 2016
- •Выпуск 0.6.2 – 30 января 2016
- •Выпуск 0.7 – 8 февраля 2016
- •Выпуск 0.8 – 18 февраля 2016
- •Выпуск 0.8.1 – 23 февраля 2016
- •Выпуск 0.9 – 27 марта 2016
- •Выпуск 0.9.1 – 28 марта 2016
- •Выпуск 0.10 – 26 апреля 2016
- •Выпуск 0.11 – 27 мая 2016
- •Выпуск 0.11.1 – 3 июня 2016
- •Выпуск 0.11.2 – 24 июня 2016
- •Выпуск 0.12 – 4 июля 2016
- •Выпуск 0.13 – 18 июля 2016
- •Выпуск 0.14 – 12 августа 2016
- •Выпуск 0.15 – 13 сентября 2016
- •Выпуск 0.16 – 3 октября 2016
- •Выпуск 0.17 – 24 октября 2016
- •Выпуск 0.18 – 15 ноября 2016
- •Выпуск 0.19 – 29 ноября 2016
- •Выпуск 0.20 – 28 декабря 2016
- •Выпуск 0.21 – 29 января 2017
- •Выпуск 0.22 – 2 мая 2017
- •Выпуск 0.23 – 20 июля 2017
- •Выпуск 0.24 – 11 декабря 2017
- •Выпуск 0.25 – 3 января 2018
- •Выпуск 0.26 – 7 мая 2018
Введение в ассортимент микроконтроллеров STM32 |
40 |
–Каждый чип имеет запрограммированный на заводе 96-разрядный уникальный идентификационный номер устройства.
•Периферийные устройства:
–Каждое устройство серии L4+ имеет ряд периферийных устройств, которые разнятся от одной линейки к другой (краткий обзор см. в таблице 14).
•Генераторы состоят из внутреннего RC (16 МГц, 37 кГц), дополнительного внеш-
него HSE (от 1 до 24 МГц), LSE (32,768 кГц).
•Корпусы ИС: LQFP, UFBGA, WLCSP (подробнее см. в таблице 14).
•Диапазон рабочего напряжения от 1,7В до 3,6 В.
1.3.12. Серия STM32WB
Таблица 15: Возможности STM32WB
Серия STM32WB, представленная на рынке в начале 2018 года, является новой серией микроконтроллеров в сегменте Wireless. STM32WB – это линейка двухъядерных микроконтроллеров STM32 со встроенным радиомодулем 2,4 ГГц, подходящих для беспроводных приложений и приложений с Bluetooth 5.0. Данные микроконтроллеры имеют ядро Cortex-M0+, работающее на частоте 32 МГц (называемое Сетевым процессором, англ. Network Processor), предназначенное для управления радиосвязью (сопутствующий стек BLE 5.0 также предоставляется ST), и программируемое пользователем ядро Cortex-M4, работающее на частоте 64 МГц (названное Прикладным процессором, англ. Application Processor) для основного встроенного приложения.
Платформа STM32WB является эволюцией серии Ultra Low Power микроконтроллеров STM32L4. Она предоставляет те же цифровые и аналоговые периферийные устройства, подходящие для приложений, требующих увеличения срока службы батареи и сложных функций. STM32WB объединяет несколько периферийных устройств связи, удобный бескварцевый (crystal-less) интерфейс USB 2.0 FS, поддержку звука, драйвер ЖК-дисплея, до 72 GPIO, интегрированный SMPS для оптимизации энергопотребления и несколько режимов пониженного энергопотребления для увеличения срока службы батареи.
Помимо беспроводных функций и функций с пониженным энергопотреблением, особое внимание было уделено внедрению аппаратных функций безопасности, таких как 256разрядный AES, PCROP, JTAG Fuse, PKA (механизм шифрования эллиптических кривых) и Root Secure Services (RSS). RSS позволяет аутентифицировать связь OTA, независимо от стека радиосвязи или приложения.
Введение в ассортимент микроконтроллеров STM32 |
41 |
STM32WB55 является устройством, сертифицированным Bluetooth 5.0, и предлагает поддержку программного обеспечения Mesh 1.0, несколько профилей и гибкость для интеграции фирменных стеков BLE. Также доступен пакет программного обеспечения, сертифицированный OpenThread. Радиомодуль также может запускать протоколы BLE/OpenThread одновременно. Встроенный универсальный MAC позволяет использовать другие собственные стеки IEEE 802.15.4, такие как ZigBee®, или собственные протоколы, предоставляя еще больше возможностей для подключения устройств к Интернету вещей (IoT).
Наиболее важные особенности данной серии:
•Ядра:
–Ядро ARM Cortex-M4F с FPU на максимальной тактовой частоте 64 МГц
(Прикладной процессор, англ. Application Processor).
–Ядро ARM Cortex-M0+ с максимальной тактовой частотой 32 МГц (Сетевой процессор, англ. Network Processor).
•Память:
–Статическое ОЗУ до 256 КБ.
–Flash-память до 1024 КБ.
–Поддержка интерфейса Quad-SPI.
–Каждый чип имеет запрограммированный на заводе 96-разрядный уникальный идентификационный номер устройства.
•Радиомодуль:
–BLE 5.0-совместимый верхний уровень (front-end) и стек радио.
–IEEE 802.15.4-совместимый верхний уровень (front-end) радио.
–Возможность обновления микропрограммы по воздуху.
–Поддержка внешнего усилителя мощности.
•Периферийные устройства:
–Каждое устройство серии WB имеет ряд периферийных устройств, которые разнятся от одной линейки к другой (краткий обзор см. в таблице 15).
•Генераторы состоят из нескольких внутренних RC (16 МГц, 32 кГц), дополнительного внешнего HSE (от 1 до 24 МГц), LSE (32,768 кГц).
•Корпусы ИС: WLCSP, UFQFPN, VFQFPN (подробнее см. в таблице 15).
•Диапазон рабочего напряжения от 1,7В до 3,6 В.
На момент написания данной главы (май 2018 года) ST еще не выпустила отдельный CubeHAL для семейства STM32WB. Более того, ожидается, что в июне 2018 года будет выпущена специальная плата Nucleo.
Введение в ассортимент микроконтроллеров STM32 |
42 |
1.3.13. Как правильно выбрать для себя микроконтроллер?
Выбор микроконтроллера для нового проекта никогда не бывает тривиальной задачей, если только вы не используете предыдущую разработку. Прежде всего, на рынке присутствуют десятки производителей микроконтроллеров, каждый со своей долей рынка и аудиторией: ST, Microchip, TI, Atmel, Renesas, NXP и т. д.23 В нашем случае нам очень повезло: мы уже выбрали бренд.
Как мы видели в предыдущих параграфах, STM32 – достаточно обширный ассортимент. Мы можем выбрать микроконтроллер из более чем 500 устройств (если мы также рассматриваем варианты корпусов). Так с чего же начать?
В идеальном мире первый шаг процесса выбора включает понимание необходимой вычислительной мощности. Если мы собираемся разработать приложение с большим объемом вычислений, ориентированное на мультимедиа и графические приложения, то мы должны переключить наше внимание на группу High-Performance микроконтроллеров STM32. Если, напротив, вычислительная мощность не является основным требованием для нашего электронного устройства, мы можем сосредоточиться на сегменте Mainstream, внимательно изучив серию STM32F1, которая предлагает самый широкий выбор.
Следующий шаг касается требований к обмену данными. Если нам нужно взаимодействовать с внешним миром через Ethernet-соединение или другие промышленные протоколы, такие как шина CAN, и наше приложение должно быть отзывчивым и иметь возможность работать с несколькими интернет-протоколами, тогда ассортимент STM32F4, вероятно, является вашим лучшим вариантом; в противном случае лучшим выбором является линейка Connectivity STM32F105/7.
Если мы спроектировать разработать устройство с батарейным питанием (возможно, новый бестселлер на рынке переносных устройств), то нам нужно взглянуть на серию STM32L, выбирая среди различных подсемейств в зависимости от необходимой вычислительной мощности.
Как указывалось в начале данного параграфа, это процесс отбора, как он происходит в идеальном мире. Но как насчет реального мира? В процессе повседневной разработки нам, вероятно, придется ответить на следующие вопросы, прежде чем мы начнем выбирать подходящий микроконтроллер для нашего проекта:
•Это устройство предназначено для массового рынка или для ниши?
Если вы разрабатываете устройство, которое будет производиться в небольших количествах, то разница в цене между микроконтроллерами STM32 не сильно повлияет на ваш проект. Вы также можете рассмотреть новый STM32F7 и уделить мало внимания оптимизации программного обеспечения (при работе с низкопроизводительными микроконтроллерами вы должны приложить все усилия, чтобы оптимизировать код. Имейте в виду, что это также увеличивает стоимость конечного продукта). С другой стороны, если вы собираетесь создать устройство для массового рынка, то цена одной микросхемы действительно важна: то,
23 Хороший список производителей микроконтроллеров можно найти здесь
(https://en.wikipedia.org/wiki/List_of_common_microcontrollers). Пожалуйста, обратите внимание, что в по-
следние годы несколько из упомянутых компаний объединились, чтобы попытаться выжить на рынке, ставшем очень многолюдным.
Введение в ассортимент микроконтроллеров STM32 |
43 |
сколько вы сэкономите во время производства, часто перевешивает первоначальные инвестиции.
•Каков допустимый бюджет для всей спецификации компонентов?
Это следствие из предыдущего пункта. Если у вас уже есть целевая цена вашей платы, то вы должны тщательно выбрать подходящий микроконтроллер на ранних стадиях.
•Как насчет пространственных ограничений?
Должна ли ваша плата соответствовать последним переносным устройствам, или достаточно ли у вас места для использования корпуса ИС, который вы предпочитаете? Ответ на данный вопрос сильно влияет на процесс выбора микроконтроллера и на то, что мы можем от него требовать с точки зрения производительности и возможностей периферийных устройств.
•Какие технологии производства может позволить моя компания?
Это еще один нетривиальный вопрос. Корпусы LQFP по-прежнему очень популярны на рынке микроконтроллеров благодаря тому, что они не требуют сложных производственных затрат и могут быть легко собраны даже на старых производственных линиях. Корпусы BGA и WLCSP требуют рентгеновского контрольного оборудования и могут повлиять на процесс вашего выбора.
•Является ли время выхода на рынок критичным для вас?
Время выхода на рынок всегда является ключевым фактором для любого, кто занимается бизнесом, но иногда вам необходимо подготовить микропрограмму за день до начала процесса разработки. Это может привести к неоптимизированному встраиваемому ПО, по крайней мере, на ранней стадии. Это означает, что, вероятно, микроконтроллер с большей вычислительной мощностью является лучшим выбором для вас.
•Можете ли вы повторно использовать макеты платы или код?
Каждый встраиваемый разработчик имеет портфолио библиотек и хорошо известных микросхем. Разработка программного обеспечения – это сложная задача, которая состоит из нескольких этапов, прежде чем мы сможем считать нашу микропрограмму стабильной и готовой к производству. Иногда (это происходит очень часто в настоящее время), вам приходится иметь дело с недокументированными аппаратными ошибками или, по крайней мере, с их непредсказуемым поведением. Это подразумевает, что вы должны быть очень осторожны при принятии решения о переключении на другую архитектуру или даже на другой микроконтроллер из той же серии.
Одна из ключевых особенностей платформы STM32 может сильно помочь в процессе выбора: совместимость с выводами. Она позволяет вам выбирать более мощный (или более дешевый) микроконтроллер во время процесса отбора, предоставляя возможность изменить его на более продвинутой стадии разработки. Например, для недавно спроектированной мной платы я выбрал микроконтроллер STM32F1, но понизил его до более дешевого STM32F0, когда пришел к выводу, что он будет удовлетворять моим требованиям. Однако имейте в виду, что данный процесс всегда включает в себя адаптацию кода для разных подсемейств.
Введение в ассортимент микроконтроллеров STM32 |
44 |
Рисунок 17: Инструмент выбора STM32, доступный на веб-сайте ST
ST предлагает два удобных инструмента, которые помогут вам в процессе выбора микроконтроллера. Первый доступен на веб-сайте ST24, в разделе STM32: инструмент параметрического поиска, который позволяет вам выбирать интересующие вас функции. Инструмент автоматически фильтрует результаты для отображения микроконтроллеров, соответствующих вашим требованиям.
Второй инструмент – это полезное мобильное приложение, доступное для iOS25, Android26 и Windows Mobile27.
Рисунок 18: Приложение MCU Finder для ОС Android
24http://www.st.com/web/en/catalog/mmc/FM141/SC1169
25http://apple.co/Uf20WR
26https://play.google.com/store/apps/details?id=fr.appsolute.st&hl=en
27https://www.microsoft.com/en-us/p/st-mcu-finder/9wzdncrdm0rh?activetab=pivot:overviewtab