Кармин Новиелло - Освоение STM32.pdf

Document Details

LuckiestToad

Uploaded by LuckiestToad

Луцький національний технічний університет

2018

Tags

STM32 microcontrollers development hardware

Full Transcript

Освоение STM32 Пошаговое руководство по самой полной платформе ARM Cortex-M, использующей бесплатную и мощную среду разработки на основе Eclipse и GCC Кармин Новиелло Данная книга продается на http://leanpub.com/mastering-stm32 Данная версия была опубликована 17.08.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 X 222 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. Альтернативы FreeRTOS............................................................................................. 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 Предисловие Насколько я знаю, эта книга является первой попыткой написать систематический текст о платформе STM32 и ее официальном HAL STM32Cube. Когда я начал работать с данной микроконтроллерной архитектурой, я повсюду искал книгу, способную познакомить меня с этой тематикой, но все было безуспешно. Данная книга разделена на три части: вводная часть, показывающая, как настроить пол- ноценную среду разработки и как с ней работать; часть, которая знакомит с основами программирования STM32 и основными аспектами официального HAL (Hardware Abstraction Layer – уровня аппаратной абстракции); а также более сложный раздел, охва- тывающий такие аспекты, как использование операционных систем реального времени, последовательность начальной загрузки и организацию памяти приложения STM32. Однако данная книга не ставит своей целью заменить официальные технические опи- сания (datasheets) от ST Microelectronics. Техническое описание по-прежнему является основным справочником по электронным устройствам, и невозможно (и не имеет осо- бого смысла) упорядочить содержимое десятков технических описаний в книге. Вы должны учитывать, что официальное техническое описание одного только микро- контроллера STM32F4 составляет почти тысячу страниц, а это больше, чем данная книга! Следовательно, представленный текст будет помощником для начала погружения в официальную документацию ST. Более того, данная книга не будет фокусироваться на низкоуровневых темах и вопросах, связанных с аппаратным обеспечением, оставляя эту тяжелую работу техническим описаниям. Наконец, данная книга не является «сборни- ком рецептов» с нестандартными и забавными проектами: в Интернете вы найдете не- сколько хороших руководств. Почему я написал книгу? Я начал освещать темы о программировании на STM32 в своем личном блоге в 2013 году. Сначала я начал писать посты только на итальянском, а затем переводил их на англий- ский. Я затронул несколько тем, начиная с того, как настроить полноценный бесплат- ный инструментарий, и заканчивая определенными аспектами, касающимися програм- мирования на STM32. С тех пор я получил много комментариев и запросов на самые разные темы. Благодаря взаимодействию с читателями моего блога, я понял, что не так просто подробно охватить сложные темы на личном веб-сайте. Блог – это отличное ме- сто, где можно освещать довольно специфичные и ограниченные по объему темы. Если вам нужно объяснить более широкие темы, касающиеся программных платформ или аппаратного обеспечения, книга по-прежнему является верным ответом. Книга вынуж- дает вас систематизировать темы и дает вам все необходимое пространство для расши- рения темы по мере необходимости (я один из тех людей, которые все еще считают, что чтение длинных текстов на мониторе – плохая идея). Предисловие ii По неизвестным мне причинам нет книг1, охватывающих представл

Use Quizgecko on...
Browser
Browser