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

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

Каталог 38 собрал то, что можно сделать руками. Здесь — то, что стоит уметь объяснить словами: сто вопросов, какие задают инженеру прошивки на собеседовании или на разборе чужого кода, с ответом в две-четыре строки и ссылкой на раздел, где тема разобрана подробно.

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

Опоры: разделы справочника, на которые ведут ссылки (их 42). Проверка — _verify/iview38b_check.py.

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

Оригинал Перевод
job interview собеседование
technical screening первое техническое собеседование, отбор
follow-up question уточняющий вопрос
junior / middle / senior начальный / средний / старший уровень
whiteboard coding код на доске, без компилятора
take-home assignment задание на дом
code review разбор чужого кода
cheat sheet шпаргалка

38а.1 Как устроен список

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

Карта вопросов: двенадцать тем, у каждой число вопросов и номера разделов с ответами; цвет — подраздел 38а.2…38а.6, от ядра и прерываний до производства

Тема Вопросы Сколько Разделы
Ядро и прерывания 1–10 10 7, 7а
Память и компоновка 11–19 9 1, 11, 11а, 11б, 35в
Тактирование 20–27 8 6, 10, 13, 20, 61
GPIO, таймеры и АЦП 28–37 10 8, 13, 14
Шины 38–48 11 16, 17, 18, 19, 20
DMA 49–54 6 9
RTOS 55–64 10 23, 24, 25, 26, 27, 28, 30
Отладка 65–72 8 12, 21, 35, 35в
Низкое потребление 73–79 7 10, 33
Электроника 80–87 8 49, 52, 55, 61, 62, 95
Безопасность 88–93 6 11, 43, 48
Производство 94–100 7 199, 200, 201, 202, 207

Уровни: начальный — 33, средний — 43, старший — 24. Отвечать вслух, не подглядывая, а потом сверяться с разделом: так видно не только «знаю — не знаю», но и где ответ держится на слове, а не на понимании.


38а.2 Ядро, прерывания, память и компоновка

Ядро и прерывания

1. Чем прерывание отличается от исключения в терминах ARM? начальный
Прерывание приходит от железа, исключение порождается самим процессором — например, обращением по несуществующему адресу. В ARM прерывание считается частным случаем исключения.
→ раздел 7 «Прерывания и исключения»

2. Сколько тактов занимает вход в обработчик прерывания? начальный
У Cortex-M3 и M4 — 12 тактов (плюс ожидание Flash), у M0 — 16, у M0+ — 15. Контекст сохраняет само железо, ни одной команды программы за это время не выполняется.
→ раздел 7 «Прерывания и исключения»

3. Что ядро само кладёт на стек при входе в исключение? средний
8 слов: R0–R3, R12, LR, PC, xPSR, плюс слово-заполнитель, если стек не делился на 8 (бит 9 xPSR). Кадр с FPU — 26 слов.
→ раздел 7а «Вход в исключение изнутри: кадр стека, EXC_RETURN и FPU»

4. Что лежит в LR внутри обработчика исключения? старший
EXC_RETURN: 0xFFFFFFF9 — возврат в основной код на MSP, 0xFFFFFFFD — на PSP, 0xFFFFFFE9 — с кадром FPU.
→ раздел 7а «Вход в исключение изнутри: кадр стека, EXC_RETURN и FPU»

5. Сколько уровней приоритета у STM32 и какой из них срочнее? начальный
У STM32 16 уровней приоритета, меньшее число — срочнее; у F0 и G0 — 4 уровня приоритета. Раздавать их по требуемой скорости реакции, а не по важности задачи.
→ раздел 7 «Прерывания и исключения»

6. Что означает NVIC_SetPriorityGrouping(3)? старший
Функция CMSIS принимает номер поля PRIGROUP, а не число бит вытеснения: 3 — четыре бита вытеснения, 4 — три бита вытеснения и один бит подприоритета.
→ раздел 7 «Прерывания и исключения»

7. Почему опечатка в имени обработчика не даёт ошибки сборки? начальный
Обработчик связывается по имени функции: опечатка не вызывает ошибки компиляции, прерывание просто уходит в пустую заглушку.
→ раздел 7 «Прерывания и исключения»

8. Почему обработчик EXTI вызывается снова и снова? начальный
Не сброшен флаг: EXTI->PR сбрасывается записью единицы. Иначе обработчик зациклится.
→ раздел 7 «Прерывания и исключения»

9. Можно ли повесить прерывания на PA3 и PB3 одновременно? средний
Нет: линий EXTI шестнадцать, и линия с номером n обслуживает вывод n только одного порта. Линии 5…9 и 10…15 делят общий вектор.
→ раздел 7 «Прерывания и исключения»

10. Что дают сцепление и опоздавшие исключения? старший
Сцепление: обработчик закончился, а другое исключение уже ждёт — ядро не снимает кадр со стека и сразу переходит к следующему обработчику. Сцепление и опоздавшие исключения экономят сохранение и восстановление кадра.
→ раздел 7а «Вход в исключение изнутри: кадр стека, EXC_RETURN и FPU»

Память и компоновка

11. Почему переменная с начальным значением занимает место дважды? начальный
Во Flash под образ и в ОЗУ под себя. const для больших таблиц оставляет их только во Flash.
→ раздел 11 «Память, компоновка, загрузка»

12. Чем опасно переполнение стека? начальный
Стек и куча растут навстречу; переполнение стека не даёт ошибки, а тихо портит соседние данные. Большие буферы делают статическими, а не локальными.
→ раздел 11 «Память, компоновка, загрузка»

13. С какого адреса начинается Flash у STM32? начальный
Flash у STM32 начинается с 0x0800 0000 и дублируется с 0x0000 0000, если загрузка из Flash (BOOT0 = 0). Адресное пространство 4 ГБ одинаково у всех Cortex-M.
→ раздел 1 «Микроконтроллер как таковой»

14. Чем стирание Flash у F1 отличается от F4? средний
Единица стирания: у F1 страница 1 КБ, у F4 сектор от 16 до 128 КБ (у старших F1 страница — 2 КБ). У F1 Flash программируется только полусловами по чётным адресам.
→ раздел 11 «Память, компоновка, загрузка»

15. Как хранить настройки во Flash, чтобы пропадание питания ничего не портило? старший
Журналом на двух страницах: записи подряд, стирается только страница с устаревшими записями, у записи номер и CRC. Ресурс вырастает в 64 раза.
→ раздел 11 «Память, компоновка, загрузка»

16. Что обязано сделать приложение, которое запускается за загрузчиком? средний
Сдвинуть SCB->VTOR на свою таблицу векторов, иначе прерывания уйдут в чужие обработчики.
→ раздел 11 «Память, компоновка, загрузка»

17. Сколько областей у MPU Cortex-M4 и зачем он нужен? старший
8 областей, размер 2^(SIZE+1) от 32 байт, база выровнена по размеру. Главные применения: ловушка нулевого указателя, сторож стека, запрет исполнения данных.
→ раздел 11а «MPU: защита памяти от своих же ошибок»

18. Почему на F7 и H7 DMA приносит в буфер не то, что пришло? старший
Мешает кэш данных: передача без очистки и приём без сброса — 64 неверных байта из 64 в модели. Выравнивание по 32 и длина, кратная 32, снимают проблему с соседями по строке кэша.
→ раздел 11б «Кэш, TCM и домены памяти у F7 и H7»

19. Что из ОЗУ переживает перезапуск? старший
Системный сброс (кнопка, сторожа, программный) ОЗУ не трогает, снятие питания — стирает. Область NOINIT стартовый код не обнуляет.
→ раздел 35в «Отказ в поле: слепок состояния, переживающий сброс, и разбор после перезагрузки»


38а.3 Тактирование, GPIO, таймеры и АЦП

Тактирование

20. От чего работает STM32 сразу после сброса? начальный
От внутреннего RC-генератора: 8 МГц у F1, 16 МГц у F4. Всё остальное надо настраивать.
→ раздел 6 «Тактирование (RCC)»

21. В каком порядке переводить камень на PLL? средний
Кварц → задержки Flash → делители шин → PLL → переключение. Задержки Flash — до повышения частоты, иначе HardFault.
→ раздел 6 «Тактирование (RCC)»

22. Какой предел частоты APB1 у F1 и F4? начальный
У F1 APB1 не выше 36 МГц, у F4 — не выше 42. Отсюда делители шин.
→ раздел 6 «Тактирование (RCC)»

23. От какой частоты считают таймеры на шине с делителем? средний
Таймеры на шине APB с делителем больше 1 получают её удвоенную частоту; у F4 это касается и APB2: TIM1 и TIM8 при 168 МГц считают от 168 МГц.
→ раздел 13 «Таймеры (TIM)»

24. Почему для USB нужен кварц, а не HSI? средний
USB требует ровно 48 МГц с точностью ±0,25 %; HSI с его ±1 % не подходит. У F4 за 48 МГц отвечает делитель Q в PLL.
→ раздел 20 «USB»

25. Как правильно ждать переключения на PLL? средний
Ждать готовности всегда с таймаутом, а подтверждение переключения читать из SWS, а не из SW.
→ раздел 6 «Тактирование (RCC)»

26. Как посчитать конденсаторы кварца и чем грозит ошибка? старший
По формуле 2 × (CL − Cмонтажа); ошибка в 5 пФ для часового кварца — 39 минут в год.
→ раздел 61 «Минимальная обвязка микроконтроллера: условия запуска»

27. Что происходит с тактированием после выхода из Stop? средний
После Stop тактирование сброшено на HSI — настройку кварца и PLL нужно применить заново.
→ раздел 10 «Питание и энергосбережение»

GPIO, таймеры и АЦП

28. Через какой регистр менять состояние выхода? начальный
Через BSRR/BRR — атомарная установка и сброс бита, а не через ODR.
→ раздел 8 «Порты ввода-вывода (GPIO)»

29. В каком состоянии выводы после сброса? начальный
Все выводы, кроме выводов отладчика, — плавающие входы, у F1 CRL/CRH = 0x44444444. Порт не работает, пока не включён его такт в RCC.
→ раздел 8 «Порты ввода-вывода (GPIO)»

30. Зачем выбирать скорость вывода? средний
Скорость вывода — про электромагнитную совместимость, а не про производительность: это скорость фронта (OSPEEDR у F4).
→ раздел 8 «Порты ввода-вывода (GPIO)»

31. Чем опасно занять PA13 и PA14? начальный
Они заняты SWD; освобождая их, вы теряете отладку.
→ раздел 8 «Порты ввода-вывода (GPIO)»

32. Как посчитать частоту событий таймера? начальный
Частота = f / ((PSC + 1) × (ARR + 1)); предделитель берут минимальным, чтобы ARR был больше — это разрешение ШИМ.
→ раздел 13 «Таймеры (TIM)»

33. Почему новое значение ARR вступает в силу посреди периода? средний
PSC буферизован всегда, ARR и CCR — только с предзагрузкой (ARPE, OCxPE; после сброса она выключена). С ней новые значения вступают в силу по событию обновления.
→ раздел 13 «Таймеры (TIM)»

34. ШИМ на TIM1 настроен, а вывод молчит. Почему? средний
У TIM1 и TIM8 выходы включаются битом MOE; без него всё настроено, но вывод молчит.
→ раздел 13 «Таймеры (TIM)»

35. Какой шаг у 12-битного АЦП при опоре 3,3 В? начальный
Около 0,8 мВ; точность не лучше точности опоры.
→ раздел 14 «Аналого-цифровой преобразователь (АЦП)»

36. Почему АЦП даёт заниженные, но правдоподобные показания? средний
Мало времени выборки для такого источника: у F1 1,5 такта допускают источник до 0,4 кОм, 55,5 — до 50 кОм.
→ раздел 14 «Аналого-цифровой преобразователь (АЦП)»

37. Как измерить собственное питание без внешних деталей? старший
По VREFINT: у F4 VDDA = 3300 × VREFINT_CAL / код по заводскому коду, у F1 — по номиналу 1,2 В. Время выборки для внутренних каналов — самое длинное.
→ раздел 14 «Аналого-цифровой преобразователь (АЦП)»


38а.4 Шины и DMA

Шины

38. Чем флаг TXE отличается от TC у UART? начальный
TXE — можно класть следующий байт, TC — всё физически ушло. Путать нельзя.
→ раздел 16 «UART / USART»

39. Как принимать по UART пакеты переменной длины? средний
По паузе в линии; лучшая схема — DMA плюс прерывание IDLE.
→ раздел 16 «UART / USART»

40. Почему прерывание UART крутится бесконечно? средний
Висит переполнение ORE: на F1 и F4 его снимают чтением SR, затем DR; оставшийся флаг зацикливает прерывание.
→ раздел 16 «UART / USART»

41. Какие подтяжки нужны шине I²C? начальный
Оба вывода — с открытым стоком, подтягивающие резисторы обязательны: 4,7 кОм для 100 кГц, 2,2 кОм для 400 кГц.
→ раздел 17 «Шина I²C»

42. Как оживить залипшую шину I²C? старший
Девятью тактами SCL вручную и программным сбросом блока. Все ожидания флагов в рабочем коде — только с таймаутами.
→ раздел 17 «Шина I²C»

43. Что задаёт поле CR2.FREQ у I²C F1 и F4? средний
Это частота шины APB1, а не скорость I²C; скорость задаёт CCR.
→ раздел 17 «Шина I²C»

44. Почему в SPI, чтобы прочитать байт, надо что-то передать? начальный
Обмен всегда двусторонний: чтобы принять байт, надо передать любой.
→ раздел 18 «Шина SPI»

45. Что будет при неверном режиме SPI? средний
Режим задают CPOL и CPHA, ходовые — 0 и 3. Неверный режим не даёт ошибки: в модели 0x9F читается как 0x4F, а иногда и верно — до поры.
→ раздел 18 «Шина SPI»

46. Сколько терминаторов ставят на шину CAN? начальный
Ровно два по 120 Ом, на концах линии; трансивер обязателен.
→ раздел 19 «Шина CAN»

47. Какой кадр CAN выигрывает арбитраж? средний
Адресуется сообщение, а не получатель; меньший идентификатор имеет более высокий приоритет. В кадр помещается максимум 8 байт.
→ раздел 19 «Шина CAN»

48. Почему BluePill не определяется по USB? начальный
Подтяжка 1,5 кОм на D+ обязательна; на клонах BluePill номинал часто неверный, и это главная причина «не определяется».
→ раздел 20 «USB»

DMA

49. Что даёт DMA? начальный
Освобождает ядро: прерывание приходит один раз на весь буфер, а не на каждый байт.
→ раздел 9 «Прямой доступ к памяти (DMA)»

50. Чем DMA у F1 отличается от F4? средний
У F1 каналы с жёсткой привязкой периферии, у F4 — потоки с выбором канала, FIFO, пакетной и двойной буферизацией. Код между ними не переносится.
→ раздел 9 «Прямой доступ к памяти (DMA)»

51. Сколько элементов DMA передаёт за одну настройку? начальный
Счётчик 16-битный: максимум 65535 элементов за настройку.
→ раздел 9 «Прямой доступ к памяти (DMA)»

52. Как получить непрерывный поток через DMA без потерь? средний
Циклический режим плюс прерывания по половине и по концу буфера: пока DMA заполняет вторую половину, вы обрабатываете первую, и наоборот.
→ раздел 9 «Прямой доступ к памяти (DMA)»

53. Где размещать буферы DMA на F4? средний
Статические, в обычной SRAM (не в CCM), выровненные, volatile; у F7 и H7 — ещё и работа с кэшем.
→ раздел 9 «Прямой доступ к памяти (DMA)»

54. Как получить ШИМ из таблицы без участия процессора? старший
DMA пишет в любой регистр периферии: таблица → CCR таймера по запросу другого таймера (UDE), в том числе во сне.
→ раздел 9 «Прямой доступ к памяти (DMA)»


38а.5 RTOS и отладка

RTOS

55. Какое правило у планировщика и что значит «реальное время»? начальный
Выполняется готовая задача с наибольшим приоритетом. «Реальное время» означает предсказуемость срока, а не быстроту.
→ раздел 23 «Зачем нужна операционная система»

56. Сколько стоит переключение контекста на Cortex-M? средний
Девятнадцать инструкций: половину регистров процессор сохраняет сам.
→ раздел 23 «Зачем нужна операционная система»

57. В чём задаётся глубина стека задачи FreeRTOS? начальный
В словах: 128 — это 512 байт. Результат xTaskCreate проверять обязательно.
→ раздел 24 «Устройство FreeRTOS»

58. Чем vTaskDelay отличается от xTaskDelayUntil? средний
vTaskDelay даёт период, равный задержке плюс времени работы; для точного периода нужен xTaskDelayUntil.
→ раздел 26 «Задачи»

59. Какую схему кучи FreeRTOS выбрать? средний
heap_4 — выбор по умолчанию; heap_1 — без освобождения, heap_3 — обёртка над malloc, heap_5 — для нескольких областей памяти.
→ раздел 25 «Управление памятью»

60. Какие функции FreeRTOS можно вызывать из прерывания? начальный
Только двойники с окончанием FromISR; времени ожидания у них нет, зато есть признак пробуждения.
→ раздел 27 «Очереди»

61. Что будет, если забыть portYIELD_FROM_ISR? старший
Реакция отложится до ближайшего тика — на три порядка дольше самого переключения: FromISR только выставляют признак.
→ раздел 28 «Прерывания в RTOS»

62. Какой приоритет можно дать прерыванию, которое вызывает FromISR? старший
Не срочнее порога: ядро маскирует до порога через BASEPRI, порог 5 на STM32 — это 0x50. Приоритет по умолчанию — нулевой, то есть запрещённый.
→ раздел 28 «Прерывания в RTOS»

63. Что такое инверсия приоритетов и помогает ли мьютекс? старший
Высокая задача ждёт низкую, которую вытеснила средняя. Мьютекс наследует приоритет: наследование ограничивает ожидание, но не убирает его — мьютекс держат коротко.
→ раздел 30 «Синхронизация и потокобезопасность»

64. Защищает ли volatile счётчик от гонки? средний
Нет: counter++ — три инструкции, переключение между ними теряет приращение. volatile от гонки не защищает.
→ раздел 30 «Синхронизация и потокобезопасность»

Отладка

65. Как найти команду, на которой случился HardFault? средний
Седьмое слово кадра — PC отказа; под RTOS стек (MSP или PSP) выбирают по биту 2 в LR.
→ раздел 35 «Отладка»

66. IMPRECISERR показывает не ту инструкцию. Что делать? старший
CFSR — байт, байт и полуслово под три отказа; IMPRECISERR показывает не ту инструкцию и лечится DISDEFWBUF; FORCED в HFSR — эскалация.
→ раздел 35 «Отладка»

67. Как узнать, сколько стека осталось у задачи? средний
Стек заполнен 0xA5; остаток считается по нетронутым байтам, в словах, и это минимум за всё время.
→ раздел 35 «Отладка»

68. Как часто читать DWT->CYCCNT для статистики загрузки? старший
Счётчик тактов при 72 МГц переполняется за 59 секунд, у F4 при 168 МГц — ещё быстрее: читать чаще.
→ раздел 35 «Отладка»

69. Чем SWO лучше отладочного вывода в UART? начальный
Не занимает UART: кроме SWD нужен только вывод SWO (PB3); на порядок быстрее UART, но работает только при подключённом отладчике. 2 МГц — 100 000 символов в секунду, UART 115 200 — 11 520.
→ раздел 21 «Отладочный вывод SWO и ITM»

70. Почему пошаговая отладка системы с RTOS обманывает? средний
Пошаговое выполнение под RTOS обманывает: время стоит. Для вопроса «кто записал» есть точка наблюдения.
→ раздел 35 «Отладка»

71. Как сохранить сведения об отказе в поле? старший
Обработчик пишет запись о сбое — 88 байт, CRC — последним, в область NOINIT в конце ОЗУ и сбрасывает камень через SYSRESETREQ; разбор — после перезагрузки.
→ раздел 35в «Отказ в поле: слепок состояния, переживающий сброс, и разбор после перезагрузки»

72. Почему плата перезагружается на точке останова? средний
При отладке сторожа останавливают битами DBGMCU->CR (у F4 — DBGMCU->APB1FZ), иначе плата перезагружается на точках останова.
→ раздел 12 «Служебные блоки: сторожевые таймеры, CRC, RTC»


38а.6 Питание, электроника, безопасность и производство

Низкое потребление

73. Какие режимы сна есть у STM32? начальный
Sleep (спит ядро), Stop (спят такты, память цела), Standby (выключено всё, кроме резервного домена).
→ раздел 10 «Питание и энергосбережение»

74. Как отличить пробуждение из Standby от холодного старта? средний
Выход из Standby — это сброс; отличить его от холодного старта можно по флагу SBF.
→ раздел 10 «Питание и энергосбережение»

75. Почему камень не уходит в Stop? средний
Stop наступает, только если сброшены ожидающие флаги EXTI, периферии и будильника RTC; иначе программа идёт дальше после WFI.
→ раздел 10 «Питание и энергосбережение»

76. Почему камень сразу просыпается из Standby? старший
Не сброшен CWUF: его сбрасывают перед входом — последним, после EWUP.
→ раздел 10 «Питание и энергосбережение»

77. Что решает срок батареи при пробуждении раз в секунду? средний
Прежде всего длина всплеска; одна забытая подтяжка к прижатому выводу сокращает его вдвое.
→ раздел 10 «Питание и энергосбережение»

78. Как FreeRTOS спит в простое и сколько можно проспать? старший
Режим без тика останавливает SysTick, перепрограммирует его на весь простой и засыпает по WFI. Предел одного сна на SysTick при 72 МГц — 233 мс.
→ раздел 33 «Конфигурирование и энергосбережение»

79. Что сделать перед замером тока сна? начальный
Неиспользуемые выводы перевести в аналоговый режим (кроме SWD) и снять биты отладки в DBGMCU->CR — кнопка сброса их не снимает.
→ раздел 10 «Питание и энергосбережение»

Электроника

80. Сколько тока можно брать с вывода микроконтроллера? начальный
Один вывод — до 20 мА, все вместе — до 100 мА; проектировать на 8–10.
→ раздел 49 «Напряжение, ток, мощность: закон Ома и первые расчёты»

81. Какая развязка нужна по питанию микроконтроллера? начальный
У каждого вывода питания 100 нФ вплотную, плюс общий 4,7 мкФ и отдельный фильтр на аналоговое питание; у F4 — по 2,2 мкФ керамики на VCAP_1 и VCAP_2.
→ раздел 61 «Минимальная обвязка микроконтроллера: условия запуска»

82. Нужен ли внешний резистор на NRST? средний
Нет: на выводе сброса уже есть подтяжка 25…55 кОм. Конденсатор 100 нФ даёт 4,8 мс сброса.
→ раздел 61 «Минимальная обвязка микроконтроллера: условия запуска»

83. Как защитить обычный вход от 24 В? старший
Ограничить ток инжекции через уже имеющийся диод: 5 мА на вывод и 25 мА суммарно. Резистор — превышение над 4,0 В, делённое на 5 мА: 4,7 кОм для 24 В; для толерантного вывода так нельзя.
→ раздел 62 «Защита выводов»

84. Что значит «толерантный к 5 В» вывод? средний
Толерантный терпит 5,5 В, но только пока подано питание; рабочий диапазон обычного — от −0,3 В до питания плюс 0,3 В.
→ раздел 62 «Защита выводов»

85. Почему полевой транзистор не открывается от вывода 3,3 В? средний
Обычный полевой транзистор при 3,3 В на затворе почти закрыт: брать тот, у которого сопротивление канала нормировано при 2,5–2,7 В; порог Vgs(th) для выбора не годится.
→ раздел 52 «Управление нагрузками: ключи, реле, MOSFET, драйверы»

86. Почему стабилизатор после замены конденсатора возбудился? старший
Выходной конденсатор — часть контура: керамика вместо электролита превращает стабилизатор в генератор.
→ раздел 55 «Линейные стабилизаторы»

87. Как подобрать подтяжку I²C по фронту? средний
Фронт I²C растёт за 0,8473·R·C и должен уложиться в 1000 нс на 100 кГц и 300 нс на 400 кГц.
→ раздел 95 «Как подключать датчики: питание, подтяжки, уровни, провода»

Безопасность

88. Как снять защиту от чтения прошивки? начальный
Только полным стиранием; второй уровень у некоторых семейств необратим. У F4 значение 0xCC отключает отладку навсегда.
→ раздел 11 «Память, компоновка, загрузка»

89. Защищает ли CRC образа от подмены прошивки? средний
Нет: CRC ловит порчу, но не подмену — от подмены подпись.
→ раздел 48 «Собственный загрузчик и обновление прошивки»

90. Какой режим AES выбрать? средний
AES в режиме GCM — шифрование с проверкой подлинности; ECB не использовать; IV в CTR и GCM с одним ключом не повторяется никогда.
→ раздел 43 «Аппаратная криптография: CRC, RNG, HASH, CRYP»

91. Что проверить, читая аппаратный генератор случайных чисел? старший
Флаги SECS и CECS читают до данных, иначе получают неслучайные «случайные» числа. Слово готово за ~40 тактов 48 МГц.
→ раздел 43 «Аппаратная криптография: CRC, RNG, HASH, CRYP»

92. Почему обновление прошивки без отката опасно? средний
Подтверждение работоспособности и откат — обязательная часть, иначе одна неудачная прошивка стоит выезда к устройству.
→ раздел 48 «Собственный загрузчик и обновление прошивки»

93. Где хранить ключи шифрования и зачем тогда аппаратный блок? средний
Ключи не хранят в исходниках. Аппаратный блок — ускоритель для библиотеки, а не её замена.
→ раздел 43 «Аппаратная криптография: CRC, RNG, HASH, CRYP»

Производство

94. Что отдают на завод для сборки платы? начальный
Четыре файла: Gerber со сверловкой, перечень, файл установки, сборочный чертёж; один архив, версия в имени.
→ раздел 199 «Сборка платы на заводе: перечень, файл установки и гербер»

95. С чего начинать первое включение новой платы? начальный
Осмотр → прозвонка → питание под ограничением → контрольные точки → SWD → тестовая прошивка. Питание — 3,3 В с пределом 20 мА.
→ раздел 200 «Первое включение новой платы»

96. Какой код порта SW-DP у F1 и F4? средний
0x1BA01477 у F1, 0x2BA01477 у F4. Нет ответа — проверять адаптер, питание камня, NRST, линии SWD, BOOT0.
→ раздел 200 «Первое включение новой платы»

97. На какой вопрос отвечает тест на производственной линии? средний
Не «правилен ли код», а «собрана ли плата»; вердикт — годен/брак плюс строка в журнале. Такт при 200 платах в смену — 144 с на всё.
→ раздел 201 «Тест в производстве и прошивка на линии»

98. Когда на линии ставят байты конфигурации и защиту? старший
Последним шагом: WDG_SW=0, BOR_LEV по питанию, RDP уровень 1 в самом конце; уровень 2 необратим.
→ раздел 201 «Тест в производстве и прошивка на линии»

99. Что калибрует завод ST, а что остаётся вам? старший
Завод калибрует только кристалл: у F407 в системной памяти VREFINT_CAL и TS_CAL1/TS_CAL2. Остальное — на линии: одна точка убирает сдвиг, две точки — сдвиг и наклон.
→ раздел 202 «Калибровка на линии»

100. Какую стойкость к разряду даёт паспорт F103 и F407? средний
2000 В по модели человеческого тела (класс 2) и 500 В по модели заряженного корпуса, а разряд ощущается примерно с 3 кВ.
→ раздел 207 «Рабочее место сборки: статика, пайка SMD, отмывка»


38а.7 Грабли

«volatile делает счётчик потокобезопасным». Нет: volatile — «читай память каждый раз», а counter++ — три инструкции, и переключение между ними теряет приращение (разделы 30 и 124).

«Приоритет 0 — самый слабый». Наоборот: у STM32 меньшее число — срочнее. А для FreeRTOS приоритет прерывания по умолчанию — нулевой, то есть запрещённый (разделы 7 и 28).

«Реальное время — значит быстро». «Реальное время» означает предсказуемость срока, а не быстроту (раздел 23).

«CRC защищает прошивку». CRC ловит порчу, но не подмену — от подмены подпись (раздел 48).

«Stop и Standby — почти одно и то же». Их различает один бит PDDS, а последствия разные: продолжение программы против сброса (раздел 10).

«Подтяжки на I²C — по желанию». Оба вывода — с открытым стоком, подтягивающие резисторы обязательны (раздел 17).

Число без камня. У F1 APB1 не выше 36 МГц, у F4 — не выше 42; после сброса камень идёт от RC-генератора — 8 МГц у F1, 16 МГц у F4. Называть семейство вместе с числом (раздел 6).


38а.8 Итоги

Дальше: раздел 41 «Внешняя память: SPI Flash, NAND, SD».

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