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

38. Сводный каталог проектов

Всё, что в справочнике помечено значком 🔧, — одним списком. Каждый пункт — законченная вещь: её можно собрать на макетке, прошить и увидеть результат. Указано, что понадобится сверх платы, какие интерфейсы задействованы, насколько это сложно и что вы поймёте, сделав. Порядок — по разделам; рекомендуемая последовательность для новичка — в 38.2.

Обозначения

● базовый: один блок, один вечер
●● средний: два-три блока, понимание таймингов
●●● продвинутый: ядро или внешние микросхемы, отладка обязательна
B BluePill, STM32F103C8
D Discovery на STM32F407: светодиоды PD12…PD15, ЦАП есть; у Nucleo-F401 светодиод на PA5 и ЦАП нет
G Nucleo на STM32G474 — для аналоговых блоков и HRTIM

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

Оригинал Перевод
debug probe отладочный адаптер (ST-Link, J-Link)
logic analyzer логический анализатор
operational amplifier (op-amp, OPAMP) операционный усилитель, ОУ
shunt resistor шунт — резистор малого сопротивления в цепи тока
shift register сдвиговый регистр
multiplexer (mux) мультиплексор, «переключатель»
EEPROM электрически стираемая постоянная память
flyback / freewheeling diode гасящий (обратный) диод

38.1 Каталог

Ядро и системные механизмы

§ Проект Железо сверх платы Блоки Сложность Что поймёте
7.6 Кнопка по прерыванию кнопка, резистор EXTI, NVIC, GPIO ● цепочка «периферия → EXTI → NVIC», сброс флага, дребезг
8.4 Мигаем светодиодом ничего: PC13 на B, PD12 на D GPIO, RCC ● такт порта, регистры CRL/MODER, BSRR против ODR
8.5 Опрос кнопки кнопка GPIO ● подтяжка, активный уровень, подавление дребезга по времени
9.5 Передача по UART через DMA переходник USB–UART DMA, USART ●● буфер, DMAT, разница между «отправлено» и «ушло»
9.7 Светодиод дышит без процессора светодиод с резистором на B; на D не нужен — PD12 TIM, DMA ●● DMA пишет в регистр другого таймера, темп от второго таймера, циклический режим, работа во сне
11.5 Запись во встроенную Flash ничего FLASH, RCC ●● разблокировка, стирание страницы, запись полусловом, где хранить настройки
11.8 Настройки во Flash журналом ничего; кнопка «сохранить» по желанию FLASH ●● запись подряд без лишних стираний, номер и CRC-32, устойчивость к пропаданию питания, версия раскладки

Периферия

§ Проект Железо сверх платы Блоки Сложность Что поймёте
13.5 ШИМ светодиод или сервопривод TIM, GPIO ● PSC/ARR/CCR, удвоение на APB1, MOE у TIM1
13.10 Яркость светодиода от энкодера механический энкодер, светодиод с резистором TIM, GPIO ●● режим энкодера ×4, фильтр входа, разность показаний через ноль, шкала по гамме
14.4 Одиночное измерение АЦП потенциометр ADC ● время выборки, калибровка на F1, аналоговый режим вывода
14.6 Сканирование АЦП с DMA два-три датчика ADC, DMA ●● скан-режим, кольцевой буфер, volatile на данных DMA
14.9 Питание и температура без внешних деталей ничего ADC ● VREFINT, заводские коды F4, пересчёт в целых, самое длинное время выборки
15.4 Генератор сигнала на таблице D (у BluePill и F401 ЦАП нет); осциллограф или наушник с резистором DAC, DMA, TIM ●● таблица отсчётов, запуск по таймеру, частота = такт / (точки × период)
15.6 Электронная нагрузка D (у BluePill и F401 ЦАП нет); ОУ, MOSFET на радиаторе, шунт 1 Ом DAC ●●● ток задаёт ЦАП через петлю ОУ, буфер ЦАП выключен, мощность греет транзистор
16.3 Передача по UART переходник USB–UART USART ● TXE против TC, делитель скорости, терминал
16.5 Приём пакетов переменной длины переходник USB–UART USART, DMA ●● обнаружение паузы IDLE, кольцевой буфер, ORE
16.8 Ведомый Modbus RTU переходник USB–UART или приёмопередатчик RS-485; ведущий на компьютере USART, TIM, GPIO ●● символ из 11 бит, конец кадра по паузе 3,5 символа, исключения, передатчик по TC
17.4 Чтение регистра датчика по I²C любой датчик с I²C I²C ●● старт — адрес — регистр — рестарт — чтение; ADDR и оба SR
17.6 Оживление залипшей шины I²C датчик с I²C I²C, GPIO ●● девять тактов вручную, почему ведомый держит SDA
17.8 Внешняя EEPROM AT24C микросхема 24C04 или 24C08 I²C ●● запись по страницам, опрос готовности, старшие биты адреса ячейки в адресе устройства
18.5 Обмен блоком по SPI любая микросхема с SPI SPI ● CPOL/CPHA, BSY перед снятием CS, полный дуплекс
18.9 Идентификатор флеш-памяти JEDEC микросхема SPI Flash SPI ● команда 0x9F, пропуск первого ответа, 0xFF и 0x00 как признаки обрыва
18.11 Цепочка сдвиговых регистров 74HC595 две-три микросхемы 74HC595, светодиоды SPI, GPIO ● порядок байтов в цепочке, защёлка после BSY
20.7 Виртуальный COM-порт: приём команд кабель USB; на B — подтяжка D+ 1,5 кОм USB ●● пакет — не строка, кольцо между прерыванием и циклом, ввод по символу, USBD_BUSY при передаче
21.9 Замер времени: счётчик тактов и канал ITM отладчик с приёмом SWO DWT, ITM ● CYCCNT, отдельный канал для чисел, пакет 0x0B и слово
22.4 Адресные светодиоды WS2812B лента или несколько светодиодов, источник 5 В TIM, DMA ●● ШИМ + DMA как генератор кода, тайминг ±150 нс, порядок GRB
22.7 Индикатор и клавиатура в одном прерывании четырёхразрядный индикатор, два 74HC595, клавиатура 4×4, транзисторы разрядов TIM, SPI, GPIO ●● динамическая индикация 250 Гц на разряд, строки открытым стоком, антидребезг 20 мс

FreeRTOS

§ Проект Железо сверх платы Блоки Сложность Что поймёте
26.4 Периодическая задача: две версии светодиод ядро ●● vTaskDelay против xTaskDelayUntil, уплывание периода на числах
26.9 Кому достаётся процессор ничего ядро, учёт времени ●● квантование, голодание, ожидание отдаёт время младшим, урезание приоритета после configASSERT
27.7 Кнопка → очередь → светодиод кнопка, светодиод ядро, очередь ● тайм-аут очереди как таймер, дребезг, отправка без ожидания и счёт потерь
29.5 Один обработчик на группу таймеров три светодиода таймеры ядра ●● идентификатор таймера, демон, ноль ожидания в обратном вызове
29.6 Сторожевой таймер связи переходник USB–UART таймеры ядра, USART ●● однократный таймер с перезапуском из прерывания, FromISR
29.7 Сторож прибора на программном таймере ничего таймеры ядра, группа событий, IWDG ●● демон жив всегда, отметки задач в группе событий, чтение со сбросом одним вызовом
30.8 Задача-привратник переходник USB–UART ядро, очередь ●●● ресурс без мьютекса, запросы из прерываний, отсутствие тупиков
31.5 Входы и выходы по маске четыре кнопки, четыре светодиода ядро, группа событий ●● «все» и «любой», признак изменения вместо ожидания маски, правило меняется на ходу

Внешняя память и файлы

§ Проект Железо сверх платы Блоки Сложность Что поймёте
41.5 W25Q128FV: чтение и запись микросхема SPI Flash SPI ●● JEDEC ID, Write Enable, стирание перед записью, BUSY
41.6 AT45DB161E: нестандартная микросхема микросхема с буферной архитектурой SPI ●●● чем «другая» флеш отличается: буферы, размер страницы 528, чтение статуса
42.5 Работа с файлами через FatFS карта SD или SPI Flash SPI, FatFS ●●● слой диска, f_mount/f_open/f_write/f_sync, что ломается при выключении

Аналог, питание и управление

§ Проект Железо сверх платы Блоки Сложность Что поймёте
44.8 Защита по току внутри кристалла G; шунт 10 мОм, ключ, нагрузка до 10 А OPAMP, COMP, TIM, ADC ●●● шунт → усилитель ×16 → компаратор → аварийный вход таймера: ШИМ гаснет без участия программы
46.3 Понижающий преобразователь 12 → 5 В G или F334; полумост с драйвером, дроссель, конденсатор HRTIM ●●● 54 400 шагов на период 100 кГц, комплементарная пара с защитным интервалом, аварийный вход
47.6 Регулятор в коде RC-цепь 10 мс или нагреватель с датчиком TIM, ADC ●● постоянный период, свой предел накопителя, производная по измерению

Электроника на макетке

§ Проект Железо сверх платы Блоки Сложность Что поймёте
49.3 Резистор для светодиода светодиод, резистор GPIO ● бюджет напряжений: падение на выводе, резисторе и светодиоде
50.5 ШИМ плюс RC вместо ЦАП резистор 10 кОм, конденсатор 1 мкФ TIM ● среднее равно скважности, поверх — пила 82,5 мВ размахом при 1 кГц
51.5 Ключ на транзисторе для реле транзистор, реле 12 В, гасящий диод, резистор 510 Ом, источник 12 В GPIO ●● принудительный коэффициент 10…20, ток базы 5 мА, зачем диод на обмотке
60.6 Расширение выводов сдвиговым регистром сдвиговый регистр с защёлкой, восемь светодиодов GPIO или SPI ● три вывода на любое число выходов, защёлка, 4 мкс на 32 выхода при 8 МГц
60.7 Аналоговый мультиплексор перед АЦП аналоговый мультиплексор на 8 каналов ADC, GPIO ●● сопротивление канала складывается с источником: 4,2 мкс выборки для 100 кОм

Язык C на камне

§ Проект Железо сверх платы Блоки Сложность Что поймёте
76.3 Таблица калибровки датчик с нелинейной характеристикой ADC, Flash ● таблица const во Flash, двоичный поиск, интерполяция в целых

Связь

§ Проект Железо сверх платы Блоки Сложность Что поймёте
93.5 Радиомодуль LoRa SX1276 модуль на SX1276 с антенной; для связи — два SPI, GPIO, EXTI ●● регистры радиомодуля: бит LoRa во сне, частота в 64 битах, флаги сбрасываются единицами

Каталог 38.1 по группам: клетка — проект, цвет — сложность; 16 базовых, 26 средних и 6 продвинутых, подписаны шаги порядка 38.2 и три проекта не на BluePill

Матрица каталога 38.1: строка — проект, закрашенная клетка — блок из столбца «Блоки», слева сложность; внизу — сколько проектов отрабатывает каждый блок


38.2 Рекомендуемый порядок

Для того, кто начинает с нуля на BluePill, — шестнадцать шагов, каждый опирается на предыдущие:

Шаг § Зачем именно сейчас
1 8.4 первая прошивка; убедиться, что цепочка «сборка → загрузка → плата» работает
2 8.5 первый вход и первый дребезг
3 16.3 вывод текста в терминал — без него дальше отлаживать нечем
4 13.5 первый таймер, первое понимание частот
5 7.6 первое прерывание; сравнить с опросом из шага 2
6 14.4 первое измерение; вывести в терминал из шага 3
7 9.5 первый DMA на уже знакомом UART
8 14.6 DMA на АЦП: два знакомых блока вместе
9 16.5 приём — сложнее передачи; здесь появляются буферы и IDLE
10 18.5 SPI — проще I²C, с него легче начать шины
11 17.4 I²C с реальным датчиком
12 11.5 сохранить настройки, которые набрали за десять шагов
13 26.4 первая задача под ядром — на уже знакомом светодиоде
14 29.6 таймеры ядра на уже знакомом UART
15 30.8 привратник: ядро всерьёз
16 42.5 файлы на карте — венец: SPI, ядро, внешняя память вместе

Шестнадцать шагов 38.2 змейкой: номера подразделов по порядку; первые двенадцать — без ядра, 13–15 — FreeRTOS, шестнадцатый — файлы на карте

После шестнадцатого шага остальное из каталога делается в любом порядке.


38.3 Что нужно иметь

Минимальный набор, покрывающий весь каталог:

Для чего
BluePill или Nucleo/Discovery всё; 15.4 и 15.6 — только Discovery на F407 (ЦАП)
отладчик ST‑Link (не клон — если нужен SWO) загрузка, отладка, 21.9
переходник USB–UART 9.5, 16.x, 29.6, 30.8
приёмопередатчик RS-485 (по желанию) 16.8
макетка, провода, кнопки, светодиоды, резисторы 7.6, 8.5, 9.7, 13.5, 26.4, 27.7, 29.5, 49.3
потенциометр; для сканирования — два-три потенциометра или датчика 14.4, 14.6
механический энкодер 13.10
кабель USB; на BluePill — резистор 1,5 кОм на D+ 20.7
четыре кнопки и четыре светодиода 31.5
ОУ, MOSFET на радиаторе, шунт 1 Ом 15.6
любой датчик с I²C 17.x
микросхема EEPROM 24C04 или 24C08 17.8
микросхема SPI Flash 18.5, 18.9, 41.x
карта SD с переходником 42.5
лента WS2812B и источник 5 В 22.4
четырёхразрядный индикатор, клавиатура 4×4, два 74HC595, транзисторы разрядов 22.7
осциллограф или логический анализатор 15.4, 22.4, и вообще желательно
плата Nucleo на STM32G474 44.8, 46.3
шунт 10 мОм, ключ и нагрузка до 10 А; полумост с драйвером, дроссель, конденсатор 44.8, 46.3
транзистор, реле 12 В, гасящий диод, источник 12 В 51.5
сдвиговый регистр, аналоговый мультиплексор, резисторы и конденсаторы 18.11, 47.6, 50.5, 60.6, 60.7
датчик с нелинейной характеристикой 76.3
два модуля LoRa на SX1276 с антеннами 93.5

Осциллограф — единственная дорогая вещь в списке, и без него можно обойтись почти везде. Но раздел 36 не зря заканчивается словами «осциллограф на линию»: то, что на проводе, а не то, что должно быть, — это ответ на половину вопросов «работает иногда».


38.4 Итоги


Дальше: раздел 38а «Вопросы для собеседования: сто вопросов по справочнику с короткими ответами и ссылкой на раздел».

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