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

0а. Маршрут новичка: двадцать разделов по порядку

Раздел 0 — карта: уровни, платы и четыре маршрута по частям справочника. Карта хороша, когда уже знаешь, куда идёшь. Тому, кто открыл справочник впервые, нужно другое — одна дорога, по которой можно просто идти. Здесь она и проложена: двадцать разделов по порядку, от «ничего не знаю» до прибора, который собран своими руками и работает на столе.

Взгляд, на котором стоит маршрут, простой: учиться на одном приборе, а не на всех блоках сразу. Прибор — термостат из раздела 196: терморезистор на АЦП, реле нагревателя, консоль по UART, настройки во Flash. Каждый шаг маршрута — деталь этого термостата, и в каждом шаге сказано, что из раздела вынести и что при первом чтении пропустить. Всё пропущенное не пропадает: к нему вернут развилки после маршрута.

Опоры: раздел 0 — как устроены уровни (0.1) и что купить на старт (0.2).

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

Оригинал Перевод
peripheral clock enable включение такта периферии
pull-up, pull-down подтяжка к питанию, к земле
voltage divider делитель напряжения
NTC thermistor терморезистор с отрицательным коэффициентом
relay driver ключ реле
debouncing подавление дребезга
superloop суперцикл: вся программа — один бесконечный цикл
state machine автомат: состояния и переходы между ними

0а.1 Как идти по маршруту

Правил три.

Один шаг — один раздел. Из раздела выносится то, что стоит в столбце «Что вынести»; подразделы из столбца «Что пока пропустить» при первом чтении пролистываются. Это не лень, а порядок: пропущенное понадобится позже, и тогда будет понятно зачем.

Первые пять шагов — чтение, дальше — только с платой. Плата нужна уже на шаге 4, чтобы залить пустой проект, а с шестого шага у каждого этапа есть проект 🔧, который собирается на столе: светодиод и кнопка (8.4, 8.5), передача в терминал (16.3), кнопка по прерыванию (7.6), одиночное измерение АЦП (14.4), запись во Flash (11.5) и в конце — термостат (196).

Этап не пройден, пока проект этапа не заработал. Застряли — таблица трудных мест в 0а.6, затем раздел 36.

Маршрут новичка: двадцать шагов змейкой в пять этапов, от раздела 1 до термостата 196, и пять развилок после него — приборы и датчики, сети и IoT, RTOS, электроника, изделие; цвет блока — уровень самого сложного раздела в нём

Чем этот маршрут отличается от маршрута А (0.3). Маршрут А идёт по блокам микроконтроллера и кончается очередями FreeRTOS — двадцать один шаг. Здесь двенадцать разделов те же, но восемь других — электроника, датчики и программа прибора: закон Ома, мультиметр, делитель, подключение датчиков, терморезистор, ключ реле, автоматы вместо ОС — и сам термостат. Маршрут кончается не ядром ОС, а прибором.


0а.2 Этап 1: что внутри и чем писать

Шаги 1–5 — в основном чтение; плата нужна один раз, на шаге 4. Цель этапа — понимать, что такое регистр, и уметь собрать и залить пустой проект.

Шаг Раздел Что вынести Что пока пропустить
1 1 «Микроконтроллер как таковой» ядро, память, периферия; регистр — это адрес в карте памяти (1.4) bit-banding (1.5), конвейер (1.7), отечественный Cortex-M3 (1.9)
2 3 «Язык C для встраиваемых систем» типы из stdint.h (3.1), указатель на регистр (3.3) и volatile (3.4): без них код термостата не читается целочисленное продвижение (3.5), стиль имён (3.7)
3 3а «Битовые операции» четыре действия над битом (3а.1), поле из нескольких бит (3а.2), чтение-изменение-запись регистра (3а.6) битовые поля C (3а.7), порядок байтов (3а.8)
4 4 «Инструментарий» выбрать одну среду (4.2), настроить ST-Link (4.5), понять, как прошивка попадает в плату (4.9) CubeMX (4.7) и сборку без среды (4.8)
5 5 «Три уровня абстракции: CMSIS, HAL и LL» маршрут идёт на регистрах через заголовки CMSIS, как платформа термостата (196.5); запись в регистр и дописка в него — разные вещи (5.4) во что превращается каждый уровень (5.5), проект из CubeMX (5.7)

Среда — одна, любая из 4.2. Keil разобран подробнее в 4а, CubeIDE — в 4б; оба раздела — справочные для своей среды, маршрут без них проходится.


0а.3 Этап 2: первые выводы

Шаги 6–11 — плата уже на столе. Цель этапа — светодиод, кнопка и консоль: прибор начинает отвечать.

Шаг Раздел Что вынести Что пока пропустить
6 6 «Тактирование (RCC)» дерево тактов (6.2) и главное правило: такт периферии включается руками (6.5) 72 МГц вручную (6.3): термостату хватает внутренних 8 МГц HSI (196.5); F4 (6.6), F0 и G0 (6.7), подстройку HSI (6.8)
7 49 «Напряжение, ток, мощность: закон Ома и первые расчёты» закон Ома и мощность (49.2), резистор для светодиода (49.3), что может вывод микроконтроллера (49.7) маркировку (49.5) и корпус по мощности (49.6)
8 36а «Приборы на столе: мультиметр, осциллограф, логический анализатор» мультиметр (36а.1) и источник с ограничением тока (36а.8) — первые два прибора на столе осциллограф и логический анализатор (36а.2–36а.7)
9 8 «Порты ввода-вывода (GPIO)» режимы вывода и регистры (8.2), светодиод (8.4), кнопка (8.5) HAL и CubeMX (8.3), F0 и G0 (8.6), тот же вывод на 1986ВЕ9х (8.7)
10 16 «UART / USART» расчёт скорости (16.2), передача (16.3), приём (16.4), уровни сигналов (16.7): консоль — главный инструмент отладки и интерфейс термостата пакеты переменной длины (16.5), Modbus (16.8), USART F0 и G0 (16.9)
11 7 «Прерывания и исключения» SysTick (7.4) — часы всего прибора; кнопка по прерыванию (7.6); каким должен быть обработчик (7.7) Cortex-M0 и M0+ (7.8); разделы 7а–7в

0а.4 Этап 3: измерение

Шаги 12–15. Цель этапа — число на консоли, которое меняется, если зажать терморезистор в пальцах.

Шаг Раздел Что вынести Что пока пропустить
12 50 «ВАХ, делитель напряжения, RC-цепи» делитель (50.2) — на нём стоит терморезистор; конденсатор перед АЦП (50.6); дребезг контакта (50.7) RC-цепь по частоте (50.4), ШИМ плюс RC вместо ЦАП (50.5)
13 14 «Аналого-цифровой преобразователь (АЦП)» время преобразования (14.2), калибровка F1 (14.3), одиночное измерение (14.4) — ровно то, что делает термостат очередь каналов и DMA (14.5, 14.6), аналоговый сторож (14.8), F0 и G0 (14.10)
14 95 «Как подключать датчики: питание, подтяжки, уровни, провода» питание 3,3 или 5 вольт (95.2), аналоговые датчики (95.7), развязка и земля (95.8) подтяжки I²C, длина провода, преобразователь уровней (95.3–95.6) — до первого датчика на шине
15 96 «Температура: NTC-термистор и DS18B20» терморезистор в делителе (96.2), код → градусы целыми числами (96.3) — датчик термостата DS18B20 (96.4–96.7)

0а.5 Этапы 4 и 5: нагрузка, память, прибор целиком

Шаги 16–20. Цель — прибор, который сам включает нагрев, помнит уставку после выключения и не зависает на ожидании.

Шаг Раздел Что вынести Что пока пропустить
16 52 «Управление нагрузками: ключи, реле, MOSFET, драйверы» три способа и их цена (52.1), когда уместно реле (52.6): термостат включает реле через транзистор затвор и его обвязка (52.2–52.4), верхний ключ (52.5)
17 11 «Память, компоновка, загрузка» где что лежит (11.1), стек и куча (11.4), запись во Flash (11.5) — так термостат помнит уставку скрипт компоновщика (11.3), байты конфигурации (11.6), журнал записей (11.8) — он в списке улучшений (196.6)
18 23 «Зачем нужна операционная система» пределы суперцикла (23.1) и когда ОС не нужна (23.6) устройство и цена ОС (23.2–23.5)
19 23а «Прибор без ОС: автоматы, очередь событий, неблокирующие драйверы» автомат: сначала таблица переходов (23а.1), кольцевая очередь (23а.3), программные таймеры на одном тике (23а.4) неблокирующий драйвер I²C (23а.5), сон между событиями (23а.6)
20 196 «Мини-проект: термостат на BluePill» логика отдельно от железа (196.2), прогон на модели комнаты (196.4), прошивка на регистрах (196.5) пропускать нечего; улучшения (196.6) — уже после маршрута

Финиш маршрута невелик: прошивка термостата занимает 1968 байт Flash и 64 байта ОЗУ (196.5). Логика у него — три состояния и переходы между ними (196.2), главный цикл без ОС, время от SysTick. Всё это — шаги 11, 18 и 19, собранные вместе.


0а.6 Трудные места маршрута

Места, где работа встаёт. Симптомы взяты дословно из подразделов «Грабли» тех самых разделов. Если вашего симптома нет — раздел 36: сначала пять вопросов по порядку (36.1), потом таблицы по симптомам (36.2–36.11).

Шаг Симптом из «Грабли» Что за ним Где
4 Плата «умерла»: отладчик не подключается. программа заняла выводы отладки или сразу уснула; BOOT0 = 1 и сброс запускают загрузчик 4.11, 4.9
6 Забытый такт периферии. запись в регистры блока без такта уходит в никуда молча; проверять регистр в отладчике, а не код 6.9, 36.1
9 Светодиод BluePill горит наоборот. светодиод включён катодом к PC13: сброс вывода зажигает, установка гасит 8.9, 8.4
10 Мусор вместо текста. скорости не совпали или делитель посчитан не для той шины 16.10, 16.2
10 Ничего не работает, линии перепутаны. TX одной стороны идёт на RX другой 16.10
11 Дребезг превращается в десяток прерываний. контакт кнопки даёт пачку импульсов; лечится выдержкой или RC-цепочкой 7.9, 50.7
13 Вывод не переведён в аналоговый режим. цифровая обвязка вывода остаётся подключённой и искажает измерение 14.11
13 Забыта калибровка на F1. погрешность заметно выше ожидаемой 14.11, 14.3
14 Аналоговый выход датчика на 5 В — прямо на вход АЦП. больше 3,3 В на вход АЦП нельзя, нужен делитель 95.9, 50.2
14 Нет общей земли. уровни не значат ничего, датчик «отвечает мусором» 95.9
15 Термистор показывает −40 или +125 и не меняется. код ушёл за край таблицы: обрыв или замыкание — это авария, а не температура 96.8, 196.1
16 Микроконтроллер перезагружается при коммутации. выброс от обмотки, общая земля с силовой цепью — силу и логику разводить раздельно 52.8, 49.8
17 Запись во Flash F1 поднимает PGERR. писали в нестёртую ячейку: сначала страницу стирают 11.10, 11.5
19 «Подождать 30 мс» внутри действия автомата. ожидание в действии останавливает весь прибор; оно оформляется состоянием и таймером 23а.8, 23а.5

0а.7 Куда дальше: пять развилок

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

Приборы и датчики — второй и третий прибор: - 13 «Таймеры (TIM)» — ШИМ, захват сигнала и энкодер: время и частота в железе; - 17 «Шина I²C» — шина цифровых датчиков; - 98 «Давление и высота: BMP280 и BME280» — первый датчик на шине после терморезистора; - 197 «Мини-проект: частотомер на таймере» — второй законченный прибор.

Сети и IoT — прибор, который видно издалека: - 37 «Приложения IoT» — картина целиком; - 150 «ESP32 как платформа: чип, модуль, память, выводы, загрузка» — второй микроконтроллер, с радио на кристалле; - 156 «Сеть на ESP32: esp_netif и lwIP, DHCP, SNTP, syslog, HTTP REST, MQTT» — прибор в сети; - 105 «Сеть снизу вверх: Ethernet, MAC, IP, подсети, ARP» — как устроена сеть; дальше — маршрут Г (0.6).

RTOS — когда суперцикл перестал читаться (23а.7): - 24 «Устройство FreeRTOS» — из чего состоит ядро; - 26 «Задачи» — задача и её стек; - 27 «Очереди» — главный канал между задачами; - 28 «Прерывания в RTOS» — обработчик и ядро; это уже продвинутый уровень.

Электроника — схема вокруг прибора: - 51 «Полупроводники: диоды, стабилитроны, биполярные транзисторы» — что стоит в ключе реле; - 55 «Линейные стабилизаторы» — откуда берутся 3,3 вольта; - 61 «Минимальная обвязка микроконтроллера: условия запуска» — что нужно камню без готовой платы; - 62 «Защита выводов» — чтобы вывод пережил провод; дальше — маршрут В (0.5).

Изделие — от макета к прибору, который не стыдно отдать: - 79 «Как рождается устройство: этапы разработки» — путь целиком; - 12 «Служебные блоки: сторожевые таймеры, CRC, RTC» — сторож: первое улучшение термостата (196.6); - 184 «Тестирование прошивки: уровни, покрытие, мутации, санитайзеры» — развитие приёма из 196.2: модуль проверяется без платы; - 200 «Первое включение новой платы» — когда макет станет платой.


0а.8 Грабли

Читать разделы маршрута целиком. Столбец «Что пока пропустить» — половина маршрута. Раздел, прочитанный от первой до последней строки на первом проходе, тормозит сильнее, чем пропущенный подраздел (0а.1).

Идти дальше пятого шага без платы. С шестого шага текст без железа не запоминается; проект этапа — не приложение к чтению, а его проверка (0а.1).

Перепрыгнуть электронику. Шаги 7, 8, 12, 14 и 16 — не отступление от программирования: без делителя нет датчика, без ключа нет нагрузки, без мультиметра не видно, что из этого не работает (0а.3–0а.5).

Взять ОС раньше прибора. Термостат работает без ОСРВ: главный цикл и SysTick (196.2). RTOS — развилка после маршрута, а не ступень перед прибором (0а.7).

Искать свой симптом поиском по разделам. Сначала таблица трудных мест (0а.6), потом пять вопросов 36.1 — они короче любого поиска.


0а.9 Итоги


Дальше: раздел 0б «Маршруты по темам: CAN и диагностика автомобиля» — для того, у кого задача уже есть: разделы одной темы по порядку. Если задачи пока нет — сразу раздел 1 «Микроконтроллер как таковой».

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