Embedded HandbookПриложения
Все разделы › 0. О справочнике
STM32F103, STM32F407 · уровень базовый · 12 мин чтения
Открыть в интерактивном справочнике

0. С чего начать и куда идти

Справочник — не роман: в нём 417 разделов в 27 частях и 25 приложений, и читать его подряд нельзя, да и не нужно. Этот раздел — карта. Здесь сказано, как устроены уровни сложности, какие две платы лежат в основе всех примеров и что купить в первый заход, а дальше — четыре маршрута: с нуля, на средний уровень, в электронику и в сеть. Выберите свой, остальное пусть подождёт. А если справочник открыт впервые и выбирать пока не из чего — сразу раздел 0а: одна дорога из двадцати разделов к первому прибору.

Как это называется в документации

Оригинал Перевод
getting started «с чего начать»: вводные документы и первые шаги
development board отладочная плата
firmware прошивка
bare metal «голое железо»: программа без операционной системы
RTOS операционная система реального времени
breadboard макетная плата, «макетка»
prerequisite что нужно знать заранее

0.1 Как устроен справочник: уровни и что пропустить

У каждого раздела в шапке стоит поле уровень — оно и решает, читать раздел сейчас или отложить:

Уровень Разделов Что это значит
базовый 64 читается без подготовки; с этих разделов начинаются маршруты
средний 296 опирается на базовые разделы своей части; основной объём справочника
продвинутый 52 внутренности: ассемблер, кадры исключений, загрузчики, ядро ОС
справочник 5 + 25 приложений не читают подряд, а открывают по мере надобности

Правило первого чтения простое: идти по маршруту своего уровня и пропускать всё, что уровнем выше. Продвинутый раздел никуда не денется — он станет понятным и нужным, когда упрётесь в то, ради чего он написан.

Второе правило — про буквенные разделы: 2а, 7б, 11а, 132г и им подобные. Это ответвления от родительского номера, углубления в одну тему. При первом чтении пропускаются все: раздел 7 обязателен, разделы 7а–7в ждут, пока прерывания станут привычными.

Внизу каждого раздела есть строка «Дальше:» — это сквозная цепочка через весь справочник, от этого раздела до последнего. Она — для второго прохода или для упрямых; первый проход быстрее и полезнее по маршрутам из 0.3–0.6.


0.2 Две опорные платы и что купить на старт

Все примеры справочника собираются на двух платформах — по их именам подписаны регистровые главы каждого раздела периферии:

BluePill Discovery на F407
камень STM32F103C8 STM32F407VG
ядро Cortex-M3, 72 МГц Cortex-M4 с FPU, 168 МГц
Flash 64 КБ 1 МБ
ОЗУ 20 КБ 192 КБ: 128 обычных + 64 CCM
роль дешёвая учебная: регистровый уровень плавающая точка, DSP, быстрый DMA
светодиод PC13, катодом к выводу PD12…PD15

Вместо Discovery годится Nucleo-F401RE: тот же Cortex-M4 с FPU, 84 МГц, 512 КБ Flash и 96 КБ ОЗУ, отладчик уже на плате — но нет ЦАП, а светодиод на PA5. Учебный вариант BluePill — NR Blue Kit с готовой обвязкой. Подробный разбор плат, ревизий и подделок — в 2.6 и 2а.

Ещё ближе к BluePill по цене и размеру — BlackPill от WeAct на STM32F411CE или F401CC: тот же Cortex-M4 с FPU, 100 или 84 МГц, 512 или 256 КБ Flash, прошивается по USB заводским загрузчиком без программатора. Нет ЦАП, CAN и Ethernet, светодиод на PC13, кварц 25 МГц. Плата и перенос примеров с Discovery — в 2ж.

Первая покупка — пять строк, всё остальное докупается по мере маршрута:

Зачем
плата: BluePill или Nucleo всё
ST-Link (у Nucleo и Discovery — на плате) загрузка и отладка
переходник USB–UART терминал: главный инструмент отладки
макетка, провода, кнопки, светодиоды, резисторы первые десять проектов
потенциометр всё про АЦП

Осциллограф в этот список не входит: он единственная дорогая вещь в хозяйстве и почти везде без него можно обойтись. Полный список железа под каждый проект — в 38.3.


0.3 Маршрут А: с нуля на BluePill

Уровень маршрута: базовый → средний. Двадцать один шаг; каждый — один раздел. У шага две пометки: что из раздела вынести обязательно и что при первом чтении пропустить. Пропущенное не пропадает — к нему возвращают более поздние разделы.

Четыре маршрута по справочнику: А — с нуля на BluePill, Б — средний уровень на F407, В — электроника и аналог, Г — прибор в сети; цвет блока — уровень самого сложного раздела в нём

Шаг Раздел Что вынести Что пока пропустить
1 1 ядро, память, периферия; карта памяти (1.4) bit-banding (1.5) и конвейер (1.7)
2 2 маркировка (2.2), выбор платы (2.6), ST-Link (2.7) замену камня (2.9); раздел 2б
3 3 stdint.h, volatile (3.4), указатель на регистр (3.3) продвижение типов (3.5) — глубже в 122
4 3а четыре действия над битом; чтение-изменение-запись (3а.6) порядок байтов (3а.8)
5 4 выбрать среду (4.2), поставить, прошить плату (4.9) сборку без IDE (4.8) — она развёрнута в 4в
6 4а слои программы, паки, Debug и Release сборку из командной строки (4а.10); если среда — CubeIDE, читайте 4б вместо 4а
7 5 когда регистры, а когда HAL; присваивание против дописки (5.4) проект из CubeMX (5.7) — до первой работы с ним
8 6 дерево тактов, 72 МГц (6.3); такт периферии включается руками подстройку HSI (6.8); F0 и G0 (6.7)
9 8 режимы вывода, BSRR; светодиод (8.4) и кнопка (8.5) альтернативные функции — вернутся в 13 и 16
10 16 кадр, скорость, передача в терминал (16.3), уровни (16.7) Modbus (16.8); приём (16.5) проще после DMA
11 13 PSC/ARR/CCR, теневые регистры, ШИМ (13.5) одноимпульсный режим (13.8) и синхронизацию (13.9)
12 7 цепочка EXTI → NVIC, кнопка по прерыванию (7.6) разделы 7а–7в: это продвинутый уровень
13 14 одиночное измерение (14.4), время выборки, калибровка сканирование (14.6) — через два шага, вместе с DMA
14 9 канал, приоритет, кольцевой буфер; проекты 9.5 и 14.6 FIFO у F4 (9.6) — у F1 его нет
15 18 CPOL/CPHA, обмен блоком (18.5) режим ведомого — раздел 17а
16 17 старт — адрес — рестарт, датчик (17.4), оживление шины (17.6) EEPROM (17.8) — когда встретится
17 11 где живут переменные, стек и куча; настройки во Flash (11.5) свой скрипт компоновщика (4в) и MPU (11а)
18 23 пределы суперцикла; когда ОС не нужна (23.6) кооперативный планировщик (23.7) — когда суперцикл перестанет читаться
19 24 из чего состоит ядро, что нужно для запуска (24.4) обёртку CMSIS-RTOS (24.6)
20 26 задача и её стек; vTaskDelay против xTaskDelayUntil (26.4) статическое создание (26.8)
21 27 очередь копирует (27.1); кнопка → очередь → светодиод (27.7) данные переменной длины (27.5)

С шага 9 читать без платы бессмысленно: параллельно собирайте проекты по порядку 38.2 — шаги маршрута идут с ним в одном порядке. Последние проекты того списка (30.8 и 42.5) остаются на потом: они опираются на разделы уровнем выше. Когда встанет — раздел 36 разбирает отказы по симптомам, от «не собирается» до «работает иногда».


0.4 Маршрут Б: средний уровень на F407

Уровень маршрута: средний → продвинутый. Для тех, кто прошёл маршрут А или пришёл с равным опытом — например, с уверенного Arduino с регистрами. Плата — Discovery на F407: здесь появляются FPU, DSP-библиотека и память, в которую FreeRTOS помещается не считая байтов.

Шаг Раздел Зачем
1 9 у F4 DMA другой: потоки вместо каналов (9.2), FIFO (9.6)
2 7а кадр стека и FPU: что ядро кладёт на стек и почём (7а.4)
3 81а КИХ и БИХ на CMSIS-DSP — FPU за работой
4 25 пять куч FreeRTOS: какую взять и сколько памяти дать
5 26 задачи, приоритеты, стек каждой задачи
6 27 очереди — главный канал между задачами
7 28 прерывания и ядро: FromISR и маска приоритетов
8 30 гонки, мьютексы, инверсия приоритетов
9 21 SWO и ITM: вывод без UART и замер времени тактами
10 35 отладчик всерьёз: разбор HardFault (35.2), стек (35.4)
11 11 компоновка и раскладка памяти — фундамент следующего шага
12 48 собственный загрузчик и обновление прошивки

После двенадцатого шага естественное продолжение — подпись прошивки (48а) и, если прибор смотрит в сеть, маршрут Г.


0.5 Маршрут В: электроника и аналог

Уровень маршрута: базовый → средний. Прошивка упирается в схему раньше, чем кажется: первый же датчик тянет за собой подтяжки, деление напряжения и шум. Маршрут проходится параллельно любому другому — этапами, каждый этап — несколько разделов подряд:

Этап Разделы Что вынести
1 49, 50 закон Ома, делитель, RC-цепи — арифметика всего остального
2 51, 52, 53, 55 диоды и транзисторы, ключи и реле, питание и стабилизаторы
3 59, 60, 61, 62 логика, обвязка микроконтроллера, защита выводов
4 54, 56, 57, 57а, 58 изоляция, ОУ, силовой ШИМ, двигатели, импульсные преобразователи
5 162, 163, 164, 165 тракт под АЦП: усиление, устойчивость, реальный ОУ, бюджет шума
6 166, 167, 168, 169, 170, 171, 172, 173, 174 элементы в деталях — от ТКС резистора до кварца
7 175, 176, 177, 178, 179, 180, 181 узлы: компараторы, ИУ, ИОН, фильтры, тракт АЦП, разводка

Первые три этапа стоит пройти не позже середины маршрута А — дальше разделы про датчики (95–104) и внешнюю обвязку будут опираться на них молча.


0.6 Маршрут Г: прибор в сети

Уровень маршрута: средний → продвинутый. Когда прибор работает, его хочется видеть издалека: телеметрия, обновление, приложение. Девять шагов — от устройства сети до своего прибора в ней и приложения к нему; многие шаги — пара разделов:

Шаг Раздел Зачем
1 37 картина целиком: способы подключения, почему MQTT, безопасность
2 105, 106 сеть снизу вверх: Ethernet и IP, TCP и UDP
3 106а, 106б Ethernet на F407: PHY и дескрипторы DMA; пакет по байтам глазами микроконтроллера
4 106в lwIP на STM32: буферы, три интерфейса и память
5 198ж, 198з первые приборы в сети: датчик по UDP, веб-страница и REST
6 107, 108 DNS, DHCP, HTTP и TLS; маршрутизация, VLAN, Wi-Fi и VPN
7 37а, 198и сколько стоит TLS на микроконтроллере; клиент MQTT с повторным подключением
8 110, 111, 112 сборка в контейнере, инфраструктура, логи и метрики
9 188 приложение говорит с прибором: HTTP, WebSocket, MQTT

Если Git ещё не в руках — перед восьмым шагом раздел 109. Фоновые знания о сетях и облаках без привязки к прибору — в 86–91, они базового уровня и читаются в любой момент.


0.7 Справочные разделы: когда что-то не работает

Пять разделов и приложения устроены иначе: их не читают, а открывают.

Куда Когда
36 прибор не работает: таблицы симптом → причина → лечение
38 что собрать и в каком порядке; какое железо понадобится
34 забыли имя или аргументы функции FreeRTOS
39, 39а как читать даташит и RM; какой документ ST где взять
40 английский термин из документации → где он разобран здесь
A–A18 карты регистров всех семейств
B, C, D шпаргалки CMSIS, HAL и FreeRTOS API
E, F, G распиновки плат, сокращения, указатель регистров и функций

Приём, который экономит время: встретили в чужом коде или в RM незнакомое слово — идите не в поиск по разделам, а в словарь 40: он собран из врезок «Как это называется в документации» всех разделов и ведёт прямо к нужному месту.


0.8 Обозначения и соглашения в примерах кода

Все примеры справочника подчиняются одним правилам — привыкнув к ним в части I, дальше вы читаете код без пояснений:

static volatile uint32_t g_ticks;                /* меняется в прерывании — volatile */

void SysTick_Handler(void)
{
    g_ticks++;
}

void led_init(void)
{
    RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;          /* такт порта — до обращения к нему */
    GPIOC->CRH = (GPIOC->CRH & ~(0xFu << 20))    /* PC13: очистить поле режима...    */
               | (0x2u << 20);                   /* ...и записать «выход 2 МГц»      */
}

Значки в тексте: ⚠️ — грабли по месту, 🔧 — законченный проект, который собирается на плате (все такие проекты сведены в 38.1). Ссылки вида «(раздел 14)» или «(14.6)» — переходы по справочнику. Врезка ✅ внизу раздела — отчёт, чем проверены его числа и листинги: сборкой, эмулятором, расчётом. Листинг выше, например, собран armclang под Cortex-M3 — см. врезку в конце этого раздела.


0.9 Грабли

Читать подряд, как книгу. На 226 разделах это верный способ бросить на втором десятке. Цепочка «Дальше» — для второго прохода; первый — по маршруту из 0.3–0.6 (0.1).

Сразу продвинутое. Разделы 7а–7в стоят рядом с 7, но написаны для другого читателя. Уровень в шапке раздела — это фильтр: не ваш уровень — смело мимо, дорога туда ещё приведёт (0.1).

Читать без платы. С шага 9 маршрута А текст без железа перестаёт запоминаться: проекты 38.2 — не приложение к чтению, а его половина (0.3).

Пропустить электронику. «Я же программист» кончается на первом датчике: подтяжка, делитель, шум. Первые три этапа маршрута В — не позже середины маршрута А (0.5).


0.10 Итоги


Дальше: раздел 0а «Маршрут новичка: двадцать разделов по порядку» — одна дорога от «ничего не знаю» до термостата на столе: что вынести из каждого раздела и что пока пропустить.

Открыть в интерактивном справочнике