- •Оглавление
- •Предисловие
- •Почему я написал книгу?
- •Для кого эта книга?
- •Как использовать эту книгу?
- •Как организована книга?
- •Об авторе
- •Ошибки и предложения
- •Поддержка книги
- •Как помочь автору
- •Отказ от авторского права
- •Благодарность за участие
- •Перевод
- •Благодарности
- •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
Пошаговое руководство по самой полной платформе ARM Cortex-M, использующей бесплатную и мощную среду разработки на основе Eclipse и GCC
Кармин Новиелло
Данная книга продается на http://leanpub.com/mastering-stm32
Данная версия была опубликована 17.08.2018
Книга переведена на русский язык Дмитрием Карасёвым. Перевод от 03.03.2021
Это книга Leanpub. Leanpub расширяет возможности авторов и издателей в процессе Lean Publishing. Lean Publishing – это процесс публикации находящейся в разработке электронной книги с использованием простых инструментов и множества итераций по получению обратной связи от читателя, осуществляющийся до тех пор, пока не появится готовая книга, и набор оборотов после ее написания.
© 2015 – 2018 Carmine Noviello
Напишите твит об этой книге!
Пожалуйста, помогите Кармину Новиелло, распространяя информацию об этой книге в
Twitter!
Предлагаемый хештег для данной книги #MasteringSTM32.
Чтобы узнать, что другие люди говорят о книге, нажмите на эту ссылку, чтобы найти представленный хештег в Twitter:
#MasteringSTM32
Оглавление
Предисловие ...................................................................................................................................... |
i |
Почему я написал книгу?................................................................................................ |
i |
Для кого эта книга?........................................................................................................... |
ii |
Как использовать эту книгу?........................................................................................ |
iv |
Как организована книга?............................................................................................... |
iv |
Об авторе ............................................................................................................................................ |
viii |
Ошибки и предложения ................................................................................................................ |
ix |
Поддержка книги.............................................................................................................................. |
ix |
Как помочь автору............................................................................................................................ |
ix |
Отказ от авторского права .............................................................................................................. |
x |
Благодарность за участие ............................................................................................................... |
x |
Перевод .................................................................................................................................................. |
x |
Благодарности ................................................................................................................................ |
xi |
I |
Введение ................................................................................................... |
|
1 |
|
1. Введение в ассортимент микроконтроллеров STM32............................................... |
2 |
|||
|
1.1. |
Введение в процессоры на базе ARM.......................................................................... |
2 |
|
|
|
1.1.1. Cortex и процессоры на базе Cortex-M ....................................................... |
4 |
|
|
|
1.1.1.1. |
Регистры ядра.................................................................................... |
5 |
|
|
1.1.1.2. |
Карта памяти ..................................................................................... |
6 |
|
|
1.1.1.3. |
Технология битовых лент (bit-banding) ................................... |
8 |
|
|
1.1.1.4. |
Thumb-2 и выравнивание памяти .......................................... |
11 |
|
|
1.1.1.5. |
Конвейер .......................................................................................... |
13 |
|
|
1.1.1.6. |
Обработка прерываний и исключений................................ |
15 |
|
|
1.1.1.7. |
Системный таймер SysTick........................................................ |
17 |
|
|
1.1.1.8. |
Режимы питания .......................................................................... |
17 |
|
|
1.1.1.9. |
CMSIS................................................................................................. |
19 |
|
|
1.1.1.10. |
Внедренные функции Cortex-M в ассортименте STM32 20 |
|
|
1.2. |
Введение в микроконтроллеры STM32.................................................................... |
21 |
1.2.1.Преимущества ассортимента STM32…. ................................................... 21
|
1.2.2. |
….И его недостатки.......................................................................................... |
22 |
1.3. |
Краткий обзор подсемейств STM32 .......................................................................... |
24 |
|
|
1.3.1. |
Серия F0............................................................................................................... |
27 |
|
1.3.2. |
Серия F1............................................................................................................... |
28 |
|
1.3.3. |
Серия F2............................................................................................................... |
29 |
|
1.3.4. |
Серия F3............................................................................................................... |
30 |
|
1.3.5. |
Серия F4............................................................................................................... |
32 |
|
1.3.6. |
Серия F7............................................................................................................... |
33 |
|
1.3.7. |
Серия H7.............................................................................................................. |
34 |
ОГЛАВЛЕНИЕ |
|
|
|
|
1.3.8. |
Серия L0 .............................................................................................................. |
35 |
|
1.3.9. |
Серия L1 .............................................................................................................. |
36 |
|
1.3.10. |
Серия L4 .............................................................................................................. |
37 |
|
1.3.11. |
Серия L4+............................................................................................................ |
38 |
|
1.3.12. |
Серия STM32WB............................................................................................... |
40 |
|
1.3.13. |
Как правильно выбрать для себя микроконтроллер? ........................ |
42 |
1.4. |
Отладочная плата Nucleo .............................................................................................. |
45 |
|
2. Установка инструментария ............................................................................................. |
50 |
||
2.1. |
Почему выбирают Eclipse/GCC в качестве инструментария для STM32..... |
51 |
|
|
2.1.1. |
Два слова о Eclipse…........................................................................................ |
52 |
|
2.1.2. |
… и о GCC ........................................................................................................... |
53 |
2.2. |
Windows – Установка инструментария ................................................................... |
54 |
|
|
2.2.1. |
Windows – Установка Eclipse ....................................................................... |
54 |
|
2.2.2. |
Windows – Установка плагинов Eclipse ................................................... |
56 |
|
2.2.3. |
Windows – Установка GCC ARM Embedded ............................................ |
59 |
|
2.2.4. |
Windows – Установка инструментов сборки......................................... |
61 |
|
2.2.5. |
Windows – Установка OpenOCD................................................................. |
61 |
|
2.2.6. |
Windows – Установка инструментов ST и драйверов........................ |
62 |
|
|
2.2.6.1. Windows – Обновление микропрограммного |
|
|
|
обеспечения ST-LINK................................................................... |
62 |
2.3. |
Linux – Установка инструментария .......................................................................... |
63 |
|
|
2.3.1. |
Linux – Установка библиотек среды выполнения i386 на 64- |
|
|
|
разрядную ОС Ubuntu .................................................................................... |
63 |
|
2.3.2. |
Linux – Установка Java.................................................................................... |
64 |
|
2.3.3. |
Linux – Установка Eclipse .............................................................................. |
64 |
|
2.3.4. |
Linux – Установка плагинов Eclipse .......................................................... |
65 |
|
2.3.5. |
Linux – Установка GCC ARM Embedded ................................................... |
70 |
|
2.3.6. |
Linux – Установка драйверов Nucleo......................................................... |
70 |
2.3.6.1.Linux – Обновление микропрограммного обеспечения
|
ST-LINK ............................................................................................. |
70 |
|
2.3.7. Linux – Установка OpenOCD ........................................................................ |
71 |
|
2.3.8. Linux – Установка инструментов ST......................................................... |
73 |
2.4. |
Mac – Установка инструментария ............................................................................. |
75 |
|
2.4.1. Mac – Установка Eclipse ................................................................................. |
75 |
|
2.4.2. Mac – Установка плагинов Eclipse ............................................................. |
77 |
|
2.4.3. Mac – Установка GCC ARM Embedded ...................................................... |
81 |
|
2.4.4. Mac – Установка драйверов Nucleo ........................................................... |
81 |
2.4.4.1.Mac – Обновление микропрограммного обеспечения ST-
|
LINK.................................................................................................... |
81 |
|
2.4.5. Mac – Установка OpenOCD........................................................................... |
82 |
|
2.4.6. Mac – Установка инструментов ST............................................................ |
84 |
3. Hello, Nucleo! ........................................................................................................................ |
86 |
|
3.1. |
Прикоснитесь к Eclipse IDE .......................................................................................... |
87 |
3.2. |
Создание проекта ............................................................................................................ |
90 |
3.3. |
Подключение Nucleo к ПК ............................................................................................ |
96 |
3.4.Перепрограммирование Nucleo с использованием STM32CubeProgrammer
|
................................................................................................................................................ |
97 |
3.5. |
Изучение сгенерированного кода............................................................................. |
98 |
ОГЛАВЛЕНИЕ |
|
|
|
|
4. Инструмент STM32CubeMX .......................................................................................... |
100 |
|||
4.1. |
Введение в инструмент CubeMX ............................................................................. |
100 |
||
|
4.1.1. |
Представление Pinout................................................................................... |
103 |
|
|
|
4.1.1.1. |
Представление Chip ................................................................... |
104 |
|
|
4.1.1.2. |
IP tree pane ..................................................................................... |
105 |
|
4.1.2. |
Представление Clock Configuration ......................................................... |
107 |
|
|
4.1.3. |
Представление Configuration..................................................................... |
108 |
|
|
4.1.4. Представление Power Consumption Calculator..................................... |
108 |
||
4.2. |
Генерация проекта......................................................................................................... |
109 |
||
|
4.2.1. Генерация проекта Си при помощи CubeMX..................................... |
109 |
||
|
|
4.2.1.1. |
Изучение сгенерированного кода ........................................ |
111 |
|
4.2.2. |
Создание проекта Eclipse............................................................................ |
113 |
4.2.3.Ручное импортирование сгенерированных файлов в проект
Eclipse ................................................................................................................. |
115 |
4.2.4.Автоматический импорт файлов, созданных с помощью CubeMX,
|
|
в проект Eclipse ............................................................................................... |
120 |
4.3. |
Изучение сгенерированного кода приложения ................................................ |
121 |
|
|
4.3.1. Добавим что-нибудь полезное в микропрограмму ......................... |
126 |
|
4.4. |
Загрузка исходного кода примеров книги.......................................................... |
127 |
|
5. Введение в отладку........................................................................................................... |
130 |
||
5.1. |
Начало работы с OpenOCD......................................................................................... |
130 |
|
|
5.1.1. |
Запуск OpenOCD............................................................................................ |
132 |
|
|
5.1.1.1. Запуск OpenOCD на Windows ................................................ |
132 |
|
|
5.1.1.2. Запуск OpenOCD на Linux и на MacOS X........................... |
133 |
|
5.1.2. Подключение к OpenOCD Telnet Console.............................................. |
135 |
|
|
5.1.3. |
Настройка Eclipse........................................................................................... |
136 |
|
5.1.4. |
Отладка в Eclipse ............................................................................................ |
142 |
5.2. |
Полухостинг ARM.......................................................................................................... |
146 |
|
|
5.2.1. Включение полухостинга в новом проекте......................................... |
147 |
|
|
|
5.2.1.1. Использование полухостинга со Стандартной |
|
|
|
библиотекой Си........................................................................... |
149 |
|
5.2.2. Включение полуохостинга в существующем проекте .................... |
152 |
|
|
5.2.3. |
Недостатки полухостинга .......................................................................... |
152 |
|
5.2.4. |
Как работает полухостинг .......................................................................... |
153 |
II |
Погружение в HAL ................................................................... |
157 |
||
6. |
Управление GPIO .............................................................................................................. |
158 |
||
|
6.1. |
Отображение периферийных устройств STM32 и дескрипторы HAL........ |
158 |
|
|
6.2. |
Конфигурация GPIO ..................................................................................................... |
163 |
|
|
|
6.2.1. |
Режимы работы GPIO................................................................................... |
165 |
|
|
6.2.2. Режим альтернативной функции GPIO ................................................ |
167 |
|
|
|
6.2.3. |
Понятие скорости GPIO ............................................................................... |
168 |
|
6.3. |
Управление GPIO ........................................................................................................... |
172 |
|
|
6.4. |
Деинициализация GPIO.............................................................................................. |
172 |
|
7. |
Обработка прерываний ................................................................................................... |
174 |
||
|
7.1. |
Контроллер NVIC ........................................................................................................... |
174 |
|
|
|
7.1.1. Таблица векторов в STM32 ......................................................................... |
175 |
ОГЛАВЛЕНИЕ |
|
|
|
7.2. |
Разрешение прерываний............................................................................................ |
179 |
|
|
7.2.1. Линии запроса внешних прерываний и контроллер NVIC.......... |
180 |
|
|
7.2.2. Разрешение прерываний в CubeMX....................................................... |
184 |
|
7.3. |
Жизненный цикл прерываний................................................................................ |
185 |
|
7.4. |
Уровни приоритета прерываний ............................................................................ |
189 |
|
|
7.4.1. |
Cortex-M0/0+ .................................................................................................... |
189 |
|
7.4.2. |
Cortex-M3/4/7................................................................................................... |
193 |
|
7.4.3. Установка уровня прерываний в CubeMX............................................ |
200 |
|
7.5. |
Реентерабельность прерываний............................................................................... |
201 |
7.6.Разовое маскирование всех прерываний или на приоритетной основе.. 202
8. Универсальные асинхронные последовательные средства связи .................... |
205 |
||
8.1. |
Введение в UART и USART......................................................................................... |
205 |
|
8.2. |
Инициализация UART................................................................................................. |
209 |
|
|
8.2.1. Конфигурация UART с использованием CubeMX............................. |
216 |
|
8.3. |
UART-связь в режиме опроса ...................................................................................... |
216 |
|
|
8.3.1. Установка консоли последовательного порта в Windows .............. |
220 |
|
|
8.3.2. Установка консоли последовательного порта в Linux и MacOS X222 |
||
8.4. |
UART-связь в режиме прерываний............................................................................ |
223 |
|
|
8.4.1. |
Прерывания, относящиеся к UART ......................................................... |
224 |
8.5. |
Обработка ошибок......................................................................................................... |
231 |
|
8.6. |
Перенаправление ввода-вывода............................................................................... |
232 |
|
9. Управление DMA............................................................................................................... |
236 |
||
9.1. |
Введение в DMA............................................................................................................. |
237 |
|
|
9.1.1. Необходимость DMA и роль внутренних шин .................................. |
237 |
|
|
9.1.2. |
Контроллер DMA ........................................................................................... |
240 |
|
|
9.1.2.1. Реализация DMA в микроконтроллерах F0/F1/F3/L1..... |
241 |
|
|
9.1.2.2. Реализация DMA в микроконтроллерах F2/F4/F7........... |
244 |
|
|
9.1.2.3. Реализация DMA в микроконтроллерах L0/L4 ................ |
247 |
9.2. |
Модуль HAL_DMA ............................................................................................................... |
248 |
|
|
9.2.1. DMA_HandleTypeDef в HAL для F0/F1/F3/L0/L1/L4................................... |
249 |
|
|
9.2.2. DMA_HandleTypeDef в HAL для F2/F4/F7..................................................... |
251 |
|
|
9.2.3. DMA_HandleTypeDef в HAL для L0/L4 .......................................................... |
255 |
|
|
9.2.4. Как выполнять передачи в режиме опроса ......................................... |
255 |
|
|
9.2.5. Как выполнять передачи в режиме прерываний.............................. |
257 |
|
|
9.2.6. Как выполнять передачи типа периферия-в-периферию................... |
259 |
|
|
9.2.7. Использование модуля HAL_UART для передачи в режиме DMA .. |
260 |
|
|
9.2.8. Разнообразные функции модулей HAL_DMA и HAL_DMA_Ex ................ |
263 |
|
9.3. |
Использование CubeMX для конфигурации запросов к DMA ..................... |
264 |
|
9.4. |
Правильное выделение памяти буферам DMA.................................................. |
264 |
9.5.Пример из практики: анализ производительности передачи типа
|
память-в-память модулем DMA............................................................................. |
265 |
10. Схема тактирования ........................................................................................................ |
271 |
|
10.1. |
Распределение тактового сигнала........................................................................... |
271 |
|
10.1.1. Обзор схемы тактирования STM32 ......................................................... |
273 |
|
10.1.1.1. Многочастотный внутренний RC-генератор в семействах |
|
|
STM32L ............................................................................................ |
276 |
|
10.1.2. Конфигурирование схемы тактирования с помощью CubeMX... |
278 |
ОГЛАВЛЕНИЕ |
|
|
|
|
10.1.3. Варианты источников тактового сигнала в платах Nucleo............ |
280 |
|
|
|
10.1.3.1. Подача тактового сигнала от высокочастотного |
|
|
|
генератора...................................................................................... |
280 |
|
|
10.1.3.2. Подача тактового сигнала от 32кГц генератора............... |
281 |
10.2. |
Обзор модуля HAL_RCC................................................................................................... |
282 |
|
|
10.2.1. Вычисление тактовой частоты во время выполнения .................... |
284 |
|
|
10.2.2. |
Разрешение Выхода синхронизации ......................................................... |
285 |
|
10.2.3. Разрешение Системы защиты тактирования................................... |
285 |
|
10.3. |
Калибровка HSI-генератора........................................................................................ |
286 |
|
11. Таймеры ............................................................................................................................... |
|
288 |
|
11.1. |
Введение в таймеры ..................................................................................................... |
288 |
|
|
11.1.1. Категории таймеров в микроконтроллере STM32 ............................ |
289 |
|
|
11.1.2. Доступность таймеров в ассортименте STM32................................... |
291 |
|
11.2. |
Базовые таймеры........................................................................................................... |
293 |
|
|
11.2.1. Использование таймеров в режиме прерываний ................................ |
296 |
|
|
|
11.2.1.1. Генерация временного отсчета в таймерах расширенного |
|
|
|
управления...................................................................................... |
299 |
|
11.2.2. Использование таймеров в режиме опроса........................................... |
299 |
|
|
11.2.3. Использование таймеров в режиме DMA.............................................. |
300 |
|
|
11.2.4. |
Остановка таймера........................................................................................ |
302 |
|
11.2.5. Использование CubeMX для конфигурации базового таймера .... |
302 |
|
11.3. |
Таймеры общего назначения.................................................................................... |
303 |
|
|
11.3.1. Генератор временного отсчета с внешними источниками |
|
|
|
|
тактового сигнала.......................................................................................... |
303 |
|
|
11.3.1.1. Режим внешнего тактирования 2......................................... |
305 |
|
|
11.3.1.2. Режим внешнего тактирования 1......................................... |
309 |
|
|
11.3.1.3. Использование CubeMX для конфигурации источника |
|
|
|
тактового сигнала таймера общего назначения ................ |
313 |
|
11.3.2. Режимы синхронизации ведущего/ведомого таймеров................ |
315 |
|
|
|
11.3.2.1. Разрешение прерываний, относящихся к триггерной |
|
|
|
цепи ................................................................................................. |
320 |
|
|
11.3.2.2. Использование CubeMX для конфигурации |
|
|
|
синхронизации ведущего/ведомого устройств.............. |
320 |
|
11.3.3. Программная генерация связанных с таймером событий ............ |
321 |
|
|
11.3.4. |
Режимы отсчета ............................................................................................. |
323 |
|
11.3.5. Режим захвата входного сигнала ............................................................ |
324 |
|
|
|
11.3.5.1. Использование CubeMX для конфигурации режима |
|
|
|
захвата входного сигнала ........................................................ |
330 |
|
11.3.6. Режим сравнения выходного сигнала................................................... |
331 |
|
|
|
11.3.6.1. Использование CubeMX для конфигурации режима |
|
|
|
сравнения выходного сигнала............................................... |
336 |
|
11.3.7. |
Генерация широтно-импульсного сигнала......................................... |
336 |
|
|
11.3.7.1. Генерация синусоидального сигнала при помощи ШИМ |
|
|
|
............................................................................................................ |
340 |
|
|
11.3.7.2. Использование CubeMX для конфигурации режима |
|
|
|
ШИМ................................................................................................ |
345 |
|
11.3.8. |
Одноимпульсный режим........................................................................... |
345 |
ОГЛАВЛЕНИЕ
|
11.3.8.1. |
Использование CubeMX для конфигурации |
|
|
|
одноимпульсного режима ...................................................... |
347 |
11.3.9. |
Режим энкодера ............................................................................................. |
348 |
|
|
11.3.9.1. |
Использование CubeMX для конфигурации режима |
|
|
|
энкодера........................................................................................... |
353 |
11.3.10. |
Другие функции, доступные в таймерах общего назначения и |
|
|
|
расширенного управления............................................................................. |
353 |
|
|
11.3.10.1. Режим датчика Холла ............................................................... |
354 |
|
|
11.3.10.2. Комбинированный режим трехфазной ШИМ и другие |
||
|
|
функции управления двигателем........................................ |
354 |
11.3.10.3.Вход сброса таймера и блокировка регистров таймера355
11.3.10.4.Предварительная загрузка регистра автоперезагрузки355
11.3.11. Отладка и таймеры ....................................................................................... |
356 |
11.4. Системный таймер SysTick ........................................................................................ |
357 |
11.4.1.Использование другого таймера в качестве источника системного
временного отсчета....................................................................................... |
358 |
11.5.Пример из практики: как точно измерить микросекунды с помощью
|
микроконтроллеров STM32........................................................................................ |
359 |
12. Аналого-цифровое преобразование............................................................................ |
365 |
|
12.1. |
Введение в АЦП последовательного приближения ......................................... |
365 |
12.2. |
Модуль HAL_ADC ............................................................................................................... |
370 |
|
12.2.1. Режимы преобразования............................................................................ |
372 |
12.2.1.1.Режим однократного преобразования одного канала.. 373
12.2.1.2.Режим сканирования с однократным преобразованием
|
|
............................................................................................................ |
373 |
|
12.2.1.3. Режим непрерывного преобразования одного канала. 374 |
||
|
12.2.1.4. |
Режим сканирования с непрерывным преобразованием |
|
|
|
............................................................................................................ |
374 |
|
12.2.1.5. Режим преобразования инжектированных каналов..... |
375 |
|
|
12.2.1.6. |
Парный режим............................................................................. |
375 |
12.2.2. |
Выбор канала................................................................................................... |
376 |
|
12.2.3. |
Разрядность АЦП и скорость преобразования.................................... |
377 |
|
12.2.4. |
Аналого-цифровые преобразования в режиме опроса ................... |
377 |
|
12.2.5. |
Аналого-цифровые преобразования в режиме прерываний ....... |
381 |
|
12.2.6. |
Аналого-цифровые преобразования в режиме DMA....................... |
382 |
|
|
12.2.6.1. |
Многократное преобразование одного канала в режиме |
|
|
|
DMA ................................................................................................. |
386 |
|
12.2.6.2. |
Многократные и не непрерывные преобразования в |
|
|
|
режиме DMA................................................................................. |
386 |
|
12.2.6.3. Непрерывные преобразования в режиме DMA .............. |
386 |
|
12.2.7. |
Обработка ошибок......................................................................................... |
386 |
|
12.2.8. |
Преобразования, управляемые таймером............................................ |
387 |
|
12.2.9. |
Преобразования, управляемые внешними событиями.................. |
390 |
|
12.2.10. Калибровка АЦП............................................................................................. |
390 |
||
12.3. Использование CubeMX для конфигурации АЦП............................................. |
391 |
||
13. Цифро-аналоговое преобразование ............................................................................ |
393 |
||
13.1. Введение в периферийное устройство ЦАП........................................................ |
393 |
||
13.2. Модуль HAL_DAC |
............................................................................................................... |
396 |
ОГЛАВЛЕНИЕ |
|
|
|
|
|
13.2.1. |
Управление ЦАП вручную ......................................................................... |
397 |
|
|
13.2.2. Управление ЦАП в режиме DMA с использованием таймера ..... |
399 |
||
|
13.2.3. |
Генерация треугольного сигнала............................................................. |
402 |
|
|
13.2.4. |
Генерация шумового сигнала................................................................... |
404 |
|
14. I2C ........................................................................................................................................... |
|
|
|
405 |
14.1. |
Введение в спецификацию I²C ................................................................................. |
405 |
||
|
14.1.1. |
Протокол I²C..................................................................................................... |
407 |
|
|
|
14.1.1.1. |
START- и STOP-условия ........................................................... |
408 |
|
|
14.1.1.2. |
Формат байта ................................................................................ |
408 |
|
|
14.1.1.3. |
Кадр адреса.................................................................................... |
409 |
|
|
14.1.1.4. Биты «Подтверждено» (ACK) и «Не подтверждено» |
|
|
|
|
|
(NACK)............................................................................................. |
409 |
|
|
14.1.1.5. |
Кадры данных.............................................................................. |
410 |
|
|
14.1.1.6. |
Комбинированные транзакции ............................................ |
411 |
|
|
14.1.1.7. |
Удержание синхросигнала...................................................... |
412 |
14.1.2.Наличие периферийных устройств I²C в микроконтроллерах
|
STM32 ................................................................................................................. |
|
412 |
14.2. |
Модуль HAL_I2C ............................................................................................................... |
|
413 |
|
14.2.1. Использование периферийного устройства I²C в режиме ведущего |
||
|
.............................................................................................................................. |
|
417 |
|
14.2.1.1. |
Операции I/O MEM..................................................................... |
425 |
|
14.2.1.2. |
Комбинированные транзакции ............................................ |
426 |
|
14.2.1.3. Замечание о конфигурации тактирования в семействах |
||
|
|
STM32F0/L0/L4 .............................................................................. |
428 |
14.2.2.Использование периферийного устройства I²C в режиме ведомого
.............................................................................................................................. 428
14.3.Использование CubeMX для конфигурации периферийного устройства
|
I²C......................................................................................................................................... |
434 |
15. SPI ........................................................................................................................................... |
|
436 |
15.1. |
Введение в спецификацию SPI................................................................................. |
436 |
|
15.1.1. Полярность и фаза тактового сигнала ................................................... |
438 |
|
15.1.2. Управление сигналом Slave Select........................................................... |
440 |
|
15.1.3. Режим TI периферийного устройства SPI ............................................. |
440 |
|
15.1.4. Наличие периферийных устройств SPI в микроконтроллерах |
|
|
STM32 ................................................................................................................. |
440 |
15.2. |
Модуль HAL_SPI ............................................................................................................... |
442 |
|
15.2.1. Обмен сообщениями с использованием периферийного |
|
|
устройства SPI ................................................................................................. |
444 |
|
15.2.2. Максимальная частота передачи, достижимая при использовании |
|
|
CubeHAL............................................................................................................ |
446 |
15.3.Использование CubeMX для конфигурации периферийного устройства
SPI ........................................................................................................................................ |
446 |
16. Циклический контроль избыточности ...................................................................... |
447 |
16.1. Введение в расчет CRC................................................................................................. |
448 |
16.1.1. Расчет CRC в микроконтроллерах STM32F1/F2/F4/L1....................... |
450 |
16.1.2. Периферийное устройство CRC в микроконтроллерах |
|
STM32F0/F3/F7/L0/L4...................................................................................... |
452 |
ОГЛАВЛЕНИЕ |
|
|
|
16.2. |
Модуль HAL_CRC ............................................................................................................... |
453 |
|
17. Независимый и оконный сторожевые таймеры .................................................... |
456 |
||
17.1. |
Независимый сторожевой таймер.......................................................................... |
456 |
|
|
17.1.1. |
Использование CubeHAL для программирования таймера IWDG |
|
|
|
.............................................................................................................................. |
457 |
17.2. Системный оконный сторожевой таймер ........................................................... |
458 |
||
|
17.2.1. |
Использование CubeHAL для программирования таймера WWDG |
|
|
|
.............................................................................................................................. |
460 |
17.3.Отслеживание системного сброса, вызванного сторожевым таймером .. 461
17.4. |
Заморозка сторожевых таймеров во время сеанса отладки .......................... |
462 |
||
17.5. |
Выбор сторожевого таймера, подходящего для вашего приложения ....... |
462 |
||
18. Часы реального времени ................................................................................................ |
463 |
|||
18.1. |
Введение в периферийное устройство RTC ........................................................ |
463 |
||
18.2. |
Модуль HAL_RTC |
............................................................................................................... |
465 |
|
|
18.2.1. |
Установка ...............................и получение текущей даты/времени |
466 |
|
|
18.2.1.1. |
Правильный .....................способ чтения значений даты/времени |
468 |
|
|
18.2.2. |
Конфигурирование ...........................................................будильников |
469 |
|
|
18.2.3. |
Блок периодического .......................................................пробуждения |
471 |
|
|
18.2.4. |
Генерация временной отметки и обнаружение |
|
|
|
|
несанкционированного ..............................................................доступа |
473 |
|
|
18.2.5. |
Калибровка .............................................................................................RTC |
474 |
|
|
|
18.2.5.1. ............................................................. |
Грубая калибровка RTC |
474 |
|
|
18.2.5.2. ............................................................ |
Тонкая калибровка RTC |
475 |
|
|
18.2.5.3. ......................Обнаружение опорного тактового сигнала |
476 |
|
18.3. |
Использование .............................................................................резервной SRAM |
477 |
III |
Дополнительные темы........................................................ |
478 |
||
19. |
Управление питанием |
.................................................................................................... |
479 |
|
|
19.1. Управление питанием в микроконтроллерах на базе Cortex-M.................. |
479 |
||
|
19.2. Как микроконтроллеры Cortex-M управляют рабочим и спящим режимами |
|||
|
.............................................................................................................................................. |
|
|
481 |
|
19.2.1. Переход ...................................................в/выход из спящих режимов |
483 |
||
|
|
19.2.1.1. .................................................«Спящий режим по выходу» |
486 |
|
|
19.2.2. Спящие .............режимы в микроконтроллерах на базе Cortex-M |
486 |
||
|
19.3. Управление питанием ....................................в микроконтроллерах STM32F |
487 |
||
|
19.3.1. |
Источники ......................................................................................питания |
487 |
|
|
19.3.2. |
Режимы ...........................................................................................питания |
488 |
|
|
|
19.3.2.1. ............................................................................ |
Рабочий режим |
489 |
|
|
|
19.3.2.1.1. Динамическое изменение напряжения в |
|
|
|
..................... |
микроконтроллерах STM32F4/F7 |
490 |
|
|
|
19.3.2.1.2. Режим высоко - / малоинтенсивной работы в |
|
|
|
..................... |
микроконтроллерах STM32F4/F7 |
490 |
|
|
19.3.2.2. ............................................................................ |
Спящий режим |
491 |
|
|
19.3.2.3. ........................................................................... |
Режим останова |
492 |
|
|
19.3.2.4. ........................................................................ |
Режим ожидания |
493 |
|
|
19.3.2.5. Пример работы в режимах пониженного |
|
|
|
|
..................................................................... |
энергопотребления |
493 |
ОГЛАВЛЕНИЕ |
|
|
|
19.3.3. Важное предупреждение о микроконтроллерах STM32F1............. |
497 |
||
19.4. Управление питанием в микроконтроллерах STM32L.................................... |
499 |
||
19.4.1. |
Источники питания...................................................................................... |
499 |
|
19.4.2. |
Режимы питания ........................................................................................... |
500 |
|
|
19.4.2.1. |
Рабочие режимы ......................................................................... |
501 |
|
19.4.2.2. |
Спящие режимы ......................................................................... |
503 |
|
|
19.4.2.2.1. Режим пакетного сбора данных ...................... |
504 |
|
19.4.2.3. |
Режимы останова........................................................................ |
504 |
|
19.4.2.4. |
Режимы ожидания ..................................................................... |
505 |
|
19.4.2.5. |
Режим выключенного состояния.......................................... |
506 |
19.4.3. |
Переходы между режимами питания ................................................... |
506 |
19.4.4.Периферийные устройства с пониженным энергопотреблением
|
.............................................................................................................................. |
|
507 |
|
19.4.4.1. |
LPUART ........................................................................................... |
507 |
|
19.4.4.2. |
LPTIM............................................................................................... |
508 |
19.5. |
Инспекторы источников питания........................................................................... |
508 |
|
19.6. |
Отладка в режимах пониженного энергопотребления................................... |
509 |
|
19.7. |
Использование калькулятора энергопотребления CubeMX.......................... |
510 |
19.8.Пример из практики: использование сторожевых таймеров в режимах
|
пониженного энергопотребления........................................................................... |
511 |
|
20. Организация памяти........................................................................................................ |
512 |
||
20.1. |
Модель организации памяти в STM32 .................................................................. |
512 |
|
|
20.1.1. Основы процессов компиляции и компоновки ................................ |
514 |
|
20.2. |
Действительно минимальное приложение STM32 .......................................... |
517 |
|
|
20.2.1. |
Исследование бинарного ELF-файла...................................................... |
521 |
|
20.2.2. Инициализация секций .data и .bss ..................................................... |
523 |
|
|
|
20.2.2.1. Пара слов о секции COMMON ....................................................... |
529 |
|
20.2.3. |
Секция .rodata ................................................................................................ |
530 |
|
20.2.4. Области Стека и Кучи.................................................................................. |
532 |
|
|
20.2.5. Проверка размера Кучи и Стека на этапе компиляции ................. |
535 |
|
|
20.2.6. Различия с файлами скриптов инструментария............................... |
536 |
|
20.3. |
Как использовать CCM-память................................................................................. |
537 |
|
|
20.3.1. |
Перемещение таблицы векторов в CCM-память............................... |
539 |
20.4.Как использовать модуль MPU в микроконтроллерах STM32 на базе
|
Cortex-M0+/3/4/7 ............................................................................................................. |
543 |
|
|
20.4.1. Программирование MPU с использованием CubeHAL................... |
546 |
|
21. Управление Flash-памятью............................................................................................ |
550 |
||
21.1. |
Введение во Flash-память STM32 ............................................................................. |
550 |
|
21.2. |
Модуль HAL_FLASH ........................................................................................................... |
554 |
|
|
21.2.1. |
Разблокировка Flash-памяти ..................................................................... |
554 |
|
21.2.2. |
Стирание Flash-памяти ............................................................................... |
554 |
|
21.2.3. |
Программирование Flash-памяти ........................................................... |
556 |
|
21.2.4. Доступ к чтению Flash-памяти во время программирования и |
|
|
|
|
стирания............................................................................................................ |
557 |
21.3. |
Байты конфигурации................................................................................................... |
558 |
|
|
21.3.1. Защита от чтения Flash-памяти ............................................................... |
560 |
|
21.4. |
Дополнительные памяти OTP и EEPROM ............................................................ |
561 |
|
21.5. |
Задержка чтения Flash-памяти и ускоритель ART™ Accelerator ................. |
563 |
ОГЛАВЛЕНИЕ
21.5.1. Роль TCM-памятей в микроконтроллерах STM32F7......................... |
565 |
21.5.1.1.Как обратиться к Flash-памяти через интерфейс TCM . 571
21.5.1.2.Использование CubeMX для конфигурации интерфейса
|
|
Flash-памяти ................................................................................. |
572 |
22. Процесс начальной загрузки......................................................................................... |
574 |
||
22.1. |
Единая система памяти Cortex-M и процесс начальной загрузки............. |
574 |
|
|
22.1.1. |
Программное физическое перераспределение памяти ....................... |
576 |
|
22.1.2. |
Перемещение таблицы векторов............................................................. |
576 |
22.1.3.Запуск микропрограммы из SRAM с помощью инструментария
GNU MCU Eclipse............................................................................................ |
578 |
22.2. Встроенный загрузчик ................................................................................................ |
579 |
22.2.1.Запуск загрузчика из встроенного программного обеспечения 582
22.2.2.Последовательность начальной загрузки в инструментарии GNU
|
|
MCU Eclipse ...................................................................................................... |
583 |
|
22.3. |
Разработка пользовательского загрузчика .......................................................... |
587 |
||
|
22.3.1. |
Перемещение таблицы векторов в микроконтроллерах STM32F0 |
||
|
|
.............................................................................................................................. |
|
597 |
|
22.3.2. Как использовать инструмент flasher.py ............................................ |
599 |
||
23. Запуск FreeRTOS................................................................................................................ |
|
601 |
||
23.1. |
Введение в концепции, лежащие в основе ОСРВ.............................................. |
602 |
||
23.2. |
Введение во FreeRTOS и в оболочку CMSIS-RTOS............................................ |
609 |
||
|
23.2.1. Структура файлов с исходным кодом FreeRTOS ............................... |
609 |
||
|
|
23.2.1.1. Как импортировать FreeRTOS вручную ............................. |
610 |
|
|
|
23.2.1.2. Как импортировать FreeRTOS с использованием CubeMX |
||
|
|
|
и CubeMXImporter....................................................................... |
612 |
|
|
23.2.1.3. Как разрешить поддержку FPU в ядрах Cortex-M4F и |
|
|
|
|
|
Cortex-M7 ....................................................................................... |
613 |
23.3. |
Управление потоками.................................................................................................. |
613 |
||
|
23.3.1. |
Состояния потоков........................................................................................ |
616 |
|
|
23.3.2. Приоритеты потоков и алгоритмы планирования .......................... |
617 |
||
|
23.3.3. Добровольное освобождение от управления ...................................... |
620 |
||
|
23.3.4. |
Холостой поток idle ....................................................................................... |
620 |
|
23.4. |
Выделение памяти и управление ею..................................................................... |
622 |
||
|
23.4.1. Модель динамического выделения памяти........................................ |
622 |
||
|
|
23.4.1.1. |
heap_1.c ........................................................................................... |
623 |
|
|
23.4.1.2. |
heap_2.c ........................................................................................... |
624 |
|
|
23.4.1.3. |
heap_3.c ........................................................................................... |
624 |
|
|
23.4.1.4. |
heap_4.c ........................................................................................... |
624 |
|
|
23.4.1.5. |
heap_5.c ........................................................................................... |
625 |
|
|
23.4.1.6. Как использовать malloc() и связанные с ней функции |
||
|
|
|
Си с FreeRTOS............................................................................... |
625 |
|
|
23.4.1.7. |
Определение кучи FreeRTOS.................................................. |
626 |
|
23.4.2. Модель статического выделения памяти ............................................. |
626 |
||
|
|
23.4.2.1. Выделение памяти потоку idle при использовании |
|
|
|
|
|
модели статического выделения памяти .......................... |
627 |
|
23.4.3. |
Пулы памяти ................................................................................................... |
627 |
|
|
23.4.4. |
Обнаружение переполнения стека ......................................................... |
629 |
|
23.5. |
Примитивы синхронизации..................................................................................... |
631 |
ОГЛАВЛЕНИЕ |
|
|
|
|
|
23.5.1. |
Очереди сообщений ..................................................................................... |
631 |
|
|
23.5.2. |
Cемафоры ......................................................................................................... |
635 |
|
|
23.5.3. |
Сигналы потоков ........................................................................................... |
638 |
|
23.6. |
Управление ресурсами и взаимное исключение .............................................. |
638 |
||
|
23.6.1. |
Мьютексы.......................................................................................................... |
639 |
|
|
|
23.6.1.1. |
Проблема инверсии приоритетов ........................................ |
640 |
|
|
23.6.1.2. |
Рекурсивные мьютексы............................................................ |
641 |
|
23.6.2. |
Критические секции..................................................................................... |
641 |
|
|
23.6.3. Обработка прерываний совместно с ОСРВ .......................................... |
642 |
||
|
|
23.6.3.1. Приоритеты прерываний и API-функций FreeRTOS .... |
643 |
|
23.7. |
Программные таймеры ............................................................................................... |
644 |
||
|
23.7.1. Как FreeRTOS управляет таймерами ...................................................... |
646 |
||
23.8. |
Пример из практики: Управление энергосбережением с ОСРВ.................. |
646 |
||
|
23.8.1. Перехват холостого потока idle ................................................................. |
647 |
||
|
23.8.2. Бестиковый режим во FreeRTOS .............................................................. |
648 |
||
|
|
23.8.2.1. Схема для бестикового режима.............................................. |
650 |
|
|
|
23.8.2.2. Пользовательский алгоритм бестикового режима ......... |
653 |
|
23.9. |
Возможности отладки.................................................................................................. |
661 |
||
|
23.9.1. |
Макрос configASSERT() ................................................................................. |
661 |
23.9.2.Статистика среды выполнения и информация о состоянии
|
|
потоков |
.............................................................................................................. |
662 |
|
23.10. |
Альтернативы Fre .............................................................................................eRTOS |
665 |
|||
|
23.10.1. ChibiOS |
............................................................................................................ |
|
665 |
|
|
23.10.2. ОС Contiki ......................................................................................................... |
666 |
|||
|
23.10.3. OpenRTOS ......................................................................................................... |
666 |
|||
24. Продвинутые методы .....................................................................................отладки |
667 |
||||
24.1. |
Введение в исключения ...........................................................отказов Cortex-M |
668 |
|||
|
24.1.1. |
Последовательность перехода в исключения Cortex-M и |
|
||
|
|
Соглашение ......................................................................ARM о вызовах |
669 |
||
|
|
24.1.1.1. |
Как инструментарий GNU MCU Eclipse обрабатывает |
|
|
|
|
|
.................................................................. |
исключения отказов |
674 |
|
|
24.1.1.2. |
Как интерпретировать содержимое регистра LR при |
|
|
|
|
|
............................................................ |
переходе в исключение |
675 |
|
24.1.2. |
Исключения ............................................................отказов и их анализ |
676 |
||
|
|
24.1.2.1. |
.......................................... |
Исключение Memory Management |
677 |
|
|
24.1.2.2. |
................................................................ |
Исключение Bus Fault |
678 |
|
|
24.1.2.3. |
............................................................ |
Исключение Usage Fault |
679 |
|
|
24.1.2.4. |
.............................................................. |
Исключение Hard Fault |
680 |
|
|
24.1.2.5. ...Разрешение дополнительных обработчиков отказов |
681 |
||
|
|
24.1.2.6. ....Анализ отказов в процессорах на базе Cortex-M0/0+ |
681 |
||
24.2. |
Продвинутые возможности ....................................................отладки в Eclipse |
681 |
|||
|
24.2.1. |
Представление .........................................................................Expressions |
681 |
||
|
24.2.1.1. |
Мониторы .........................................................................................памяти |
683 |
||
|
24.2.2. |
Точки наблюдения........................................................................................ |
683 |
||
|
24.2.3. |
Режим Instruction ..............................................................Stepping Mode |
684 |
||
|
24.2.4. |
Keil Packs ..................................и представление Peripheral Registers |
685 |
||
|
24.2.5. |
Представление ....................................................................Core Registers |
688 |
||
24.3. |
Средства отладки ..................................................................................от CubeHAL |
688 |
ОГЛАВЛЕНИЕ |
|
|
|
|
|
|
24.4. |
Внешние отладчики..................................................................................................... |
689 |
||
|
|
24.4.1. |
Использование SEGGER J-Link для отладчика ST-LINK .................. |
691 |
|
|
|
24.4.2. |
Использование интерфейса ITM и трассировка SWV...................... |
694 |
|
|
24.5. |
STM Studio......................................................................................................................... |
|
695 |
|
|
24.6. |
Одновременная отладка двух плат Nucleo........................................................... |
697 |
||
25. |
Файловая система FAT .................................................................................................... |
|
699 |
||
|
25.1. |
Введение в библиотеку FatFs..................................................................................... |
699 |
||
|
|
25.1.1. |
Использование CubeMX для включения в ваши проекты |
|
|
|
|
|
библиотеки FatFs............................................................................................ |
702 |
|
|
|
|
25.1.1.1. API-интерфейс Generic Disk Interface..................................... |
703 |
|
|
|
|
25.1.1.2. Реализация драйвера доступа к SD-картам по SPI......... |
704 |
|
|
|
25.1.2. |
Наиболее важные структуры и функции FatFs .................................. |
705 |
|
|
|
|
25.1.2.1. |
Монтирование файловой системы ...................................... |
705 |
|
|
|
25.1.2.2. |
Открытие файлов........................................................................ |
705 |
|
|
|
25.1.2.3. Чтение и запись файла............................................................. |
706 |
|
|
|
|
25.1.2.4. Создание и открытие каталога.............................................. |
707 |
|
|
|
25.1.3. |
Как сконфигурировать библиотеку FatFs ............................................. |
710 |
|
26. |
Разработка IoT-приложений ......................................................................................... |
712 |
|||
|
26.1. |
Решения, предлагаемые ST для разработки IoT-приложений..................... |
713 |
||
|
26.2. |
Ethernet контроллер W5500 ........................................................................................ |
716 |
||
|
|
26.2.1. |
Как использовать шилд W5500 и модуль ioLibrary_Driver .......... |
719 |
|
|
|
|
26.2.1.1. |
Конфигурирование интерфейса SPI .................................... |
720 |
|
|
|
26.2.1.2. Настройка буферов сокетов и сетевого интерфейса...... |
722 |
|
|
|
26.2.2. |
API-интерфейсы сокетов............................................................................. |
723 |
|
|
|
|
26.2.2.1. Управление сокетами в режиме TCP................................... |
725 |
|
|
|
|
26.2.2.2. Управление сокетами в режиме UDP.................................. |
726 |
|
|
|
26.2.3. |
Перенаправление ввода-вывода на сокет TCP/IP .............................. |
726 |
|
|
|
26.2.4. |
Настройка HTTP-сервера ............................................................................ |
728 |
|
|
|
|
26.2.4.1. |
Веб-осциллограф......................................................................... |
731 |
27. Начало работы над новым проектом......................................................................... |
743 |
||||
|
27.1. |
Проектирование оборудования................................................................................ |
743 |
||
|
|
27.1.1. |
Послойная разводка печатной платы .................................................... |
744 |
|
|
|
27.1.2. |
Корпус микроконтроллера......................................................................... |
745 |
|
|
|
27.1.3. |
Развязка выводов питания......................................................................... |
746 |
|
|
|
27.1.4. |
Тактирование.................................................................................................. |
747 |
|
|
|
27.1.5. |
Фильтрация вывода сброса RESET........................................................... |
749 |
|
|
|
27.1.6. |
Отладочный порт .......................................................................................... |
749 |
|
|
|
27.1.7. |
Режим начальной загрузки ....................................................................... |
751 |
|
|
|
27.1.8. |
Обратите внимание на совместимость с выводами… ..................... |
751 |
|
|
|
27.1.9. |
…и на выбор подходящей периферии .................................................. |
752 |
|
|
|
27.1.10. Роль CubeMX на этапе проектирования платы.................................. |
753 |
||
|
|
27.1.11. Стратегии разводки платы ........................................................................ |
755 |
||
|
27.2. |
Разработка программного обеспечения................................................................ |
756 |
||
|
27.2.1. |
Генерация бинарного образа для производства ................................................ |
757 |
Приложение ............................................................................................... |
760 |
ОГЛАВЛЕНИЕ |
|
A. Прочие функции HAL и особенности STM32.......................................................... |
761 |
Принудительный сброс микроконтроллера из микропрограммы ............................ |
761 |
96-битный уникальный идентификатор ЦПУ STM32...................................................... |
761 |
B. Руководство по поиску и устранению неисправностей ...................................... |
763 |
Проблемы с установкой GNU MCU Eclipse ........................................................................... |
763 |
Проблемы, связанные с Eclipse ................................................................................................. |
764 |
Eclipse не может найти компилятор....................................................................... |
764 |
Eclipse постоянно прерывается при выполнении каждой инструкции во |
|
время сеанса отладки ................................................................................... |
765 |
Пошаговая отладка очень медленная .................................................................... |
765 |
Микропрограмма работает только в режиме отладки .................................... |
766 |
Проблемы, связанные с STM32 ................................................................................................. |
766 |
Микроконтроллер не загружается корректно..................................................... |
766 |
Невозможно загрузить микропрограмму или отладить микроконтроллер |
|
.............................................................................................................................. |
768 |
C. Схема выводов Nucleo ..................................................................................................... |
769 |
Nucleo-F446RE .................................................................................................................................. |
770 |
Разъемы, совместимые с Arduino............................................................................ |
770 |
Morpho-разъемы ............................................................................................................ |
770 |
Nucleo-F411RE .................................................................................................................................. |
771 |
Разъемы, совместимые с Arduino............................................................................ |
771 |
Morpho-разъемы ............................................................................................................ |
771 |
Nucleo-F410RB .................................................................................................................................. |
772 |
Разъемы, совместимые с Arduino............................................................................ |
772 |
Morpho-разъемы ............................................................................................................ |
772 |
Nucleo-F401RE .................................................................................................................................. |
773 |
Разъемы, совместимые с Arduino............................................................................ |
773 |
Morpho-разъемы ............................................................................................................ |
773 |
Nucleo-F334R8................................................................................................................................... |
774 |
Разъемы, совместимые с Arduino............................................................................ |
774 |
Morpho-разъемы ............................................................................................................ |
774 |
Nucleo-F303RE .................................................................................................................................. |
775 |
Разъемы, совместимые с Arduino............................................................................ |
775 |
Morpho-разъемы ............................................................................................................ |
775 |
Nucleo-F302R8................................................................................................................................... |
776 |
Разъемы, совместимые с Arduino............................................................................ |
776 |
Morpho-разъемы ............................................................................................................ |
776 |
Nucleo-F103RB .................................................................................................................................. |
777 |
Разъемы, совместимые с Arduino............................................................................ |
777 |
Morpho-разъемы ............................................................................................................ |
777 |
Nucleo-F091RC.................................................................................................................................. |
778 |
Разъемы, совместимые с Arduino............................................................................ |
778 |
Morpho-разъемы ............................................................................................................ |
778 |
Nucleo-F072RB .................................................................................................................................. |
779 |
Разъемы, совместимые с Arduino............................................................................ |
779 |
Morpho-разъемы ............................................................................................................ |
779 |
Nucleo-F070RB .................................................................................................................................. |
780 |
Разъемы, совместимые с Arduino............................................................................ |
780 |
ОГЛАВЛЕНИЕ |
|
|
|
Morpho-разъемы ............................................................................................................ |
780 |
|
Nucleo-F030R8................................................................................................................................... |
781 |
|
Разъемы, совместимые с Arduino............................................................................ |
781 |
|
Morpho-разъемы ............................................................................................................ |
781 |
|
Nucleo-L476RG ................................................................................................................................. |
782 |
|
Разъемы, совместимые с Arduino............................................................................ |
782 |
|
Morpho-разъемы ............................................................................................................ |
782 |
|
Nucleo-L152RE .................................................................................................................................. |
783 |
|
Разъемы, совместимые с Arduino............................................................................ |
783 |
|
Morpho-разъемы ............................................................................................................ |
783 |
|
Nucleo-L073R8 .................................................................................................................................. |
784 |
|
Разъемы, совместимые с Arduino............................................................................ |
784 |
|
Morpho-разъемы ............................................................................................................ |
784 |
|
Nucleo-L053R8 .................................................................................................................................. |
785 |
|
Разъемы, совместимые с Arduino............................................................................ |
785 |
|
Morpho-разъемы ............................................................................................................ |
785 |
D. |
Корпусы STM32.................................................................................................................. |
786 |
|
LFBGA .............................................................................................................................................. |
786 |
|
LQFP .............................................................................................................................................. |
786 |
|
TFBGA .............................................................................................................................................. |
787 |
|
TSSOP .............................................................................................................................................. |
787 |
|
UFQFPN .............................................................................................................................................. |
787 |
|
UFBGA .............................................................................................................................................. |
787 |
|
VFQFP .............................................................................................................................................. |
787 |
|
WLCSP .............................................................................................................................................. |
787 |
E. |
Изменения книги .............................................................................................................. |
789 |
|
Выпуск 0.1 – Октябрь 2015 .......................................................................................................... |
789 |
|
Выпуск 0.2 – 28 октября 2015...................................................................................................... |
789 |
|
Выпуск 0.2.1 – 31 октября 2015................................................................................... |
789 |
|
Выпуск 0.2.2 – 1 ноября 2015 ...................................................................................... |
789 |
|
Выпуск 0.3 – 12 ноября 2015........................................................................................................ |
790 |
|
Выпуск 0.4 – 4 декабря 2015........................................................................................................ |
790 |
|
Выпуск 0.5 – 19 декабря 2015...................................................................................................... |
790 |
|
Выпуск 0.6 – 18 января 2016........................................................................................................ |
790 |
|
Выпуск 0.6.1 – 20 января 2016 .................................................................................... |
790 |
|
Выпуск 0.6.2 – 30 января 2016 .................................................................................... |
790 |
|
Выпуск 0.7 – 8 февраля 2016 ....................................................................................................... |
791 |
|
Выпуск 0.8 – 18 февраля 2016..................................................................................................... |
791 |
|
Выпуск 0.8.1 – 23 февраля 2016.................................................................................. |
791 |
|
Выпуск 0.9 – 27 марта 2016.......................................................................................................... |
791 |
|
Выпуск 0.9.1 – 28 марта 2016 ...................................................................................... |
792 |
|
Выпуск 0.10 – 26 апреля 2016 ..................................................................................................... |
792 |
|
Выпуск 0.11 – 27 мая 2016............................................................................................................ |
792 |
|
Выпуск 0.11.1 – 3 июня 2016 ....................................................................................... |
793 |
|
Выпуск 0.11.2 – 24 июня 2016..................................................................................... |
793 |
|
Выпуск 0.12 – 4 июля 2016........................................................................................................... |
793 |
|
Выпуск 0.13 – 18 июля 2016......................................................................................................... |
793 |
|
Выпуск 0.14 – 12 августа 2016..................................................................................................... |
793 |
ОГЛАВЛЕНИЕ |
|
|
|
|
Выпуск 0.15 – 13 |
сентября 2016.................................................................................................. |
793 |
||
Выпуск 0.16 – 3 |
октября 2016...................................................................................................... |
794 |
||
Выпуск 0.17 – 24 |
октября 2016.................................................................................................... |
794 |
||
Выпуск 0.18 – 15 |
ноября 2016 ..................................................................................................... |
794 |
||
Выпуск 0.19 – 29 |
ноября 2016 ..................................................................................................... |
795 |
||
Выпуск 0.20 – 28 |
декабря 2016.................................................................................................... |
795 |
||
Выпуск 0.21 – 29 |
января 2017...................................................................................................... |
795 |
||
Выпуск 0.22 – 2 |
мая 2017.............................................................................................................. |
795 |
||
Выпуск 0.23 – 20 |
июля 2017......................................................................................................... |
795 |
||
Выпуск 0.24 |
– 11 |
декабря 2017.................................................................................................... |
796 |
|
Выпуск 0.25 |
– 3 |
января 2018........................................................................................................ |
796 |
|
Выпуск 0.26 |
– 7 |
мая 2018.............................................................................................................. |
796 |