
С моей точки зрения большинство разрабатываемых электронных плат работают под управлением микроконтроллеров STM32. Если обобщить их схемотехнику, то можно кое-что вынести за скобки. Вот об этом сейчас и поговорим. Что должно быть заложено в каждую электронную плату на основе МК STM32? Само собой надо добавить квадратные первые пины на вилках, шелкографию, тест пады, симметричные отверстия 3мм по краям для крепления платы, удобный USB для питания и т.п. Но есть кое-что еще. Некоторые особенности проектирования PCB применимы только для STM32. Но обо всём по порядку.
1) Вывести пины тактирования MCO1(PA8) и MCO2(PC9) на TestPADы. Это даст Вам возможность проверить осциллографом реальную установившуюся частоту ядра, кварцев или PLL. Это ничего на стоит. Всего-то вывести два пина на два test pad-a. Благодаря MCO пинам у вас не будет проблем с отладкой тактирования.
Function | GPIO |
MCO1 | PA8 |
MCO2 | PC9 |
Но даже если эти пины не разведены, вы можете купить прищепки SDK08 и подцепиться прямо к пинам.

2) Добавить кнопку на пин nRST. Это нужно для пересброса прошивки в режиме пошаговой отладки. Особенность дешевых ST-link программаторов в том, что он частенько подвисает. Это приводит к тому, что GDB отладчик зависает тоже и отваливается при программном сбросе из-под IDE. Новая сессия отладки включается минуты, а зачастую тоже обрывается. Знакома ситуация? Аппаратный reset без пересброса питания нужен как раз для пошаговой отладки кода прошивки.
3) Добавить для программирования по SWD разъем Tag-Connect. Площадь на PCB зачастую очень ценный ресурс. Технология Tag-Connect позволяют запрограммировать ��стройство просто прикосновением к PCB и отлаживать даже миниатюрные PCB размера фитнес браслетов. Благодаря Tag-Connect также можно исключить из BOM платы расходы на пластмассовый разъём для программатора, так как теперь вместо разъема просто 6...10 металлических точек на плате и три отверстия рядом. Плата станет дешевле. Это также упростит логистику закупки компонентов. Что особенно важно при массовом производстве. К Tag-Connect можно будет подцепиться также и китайскими прищепками с PogoPins (PCB Clip Clamp Fixture Probe Pogo Pin) коих разновидностей на aliexpress сотни и стоят они не дороже 200 руб. Разъем Tag-Connect делает Texas Instrumenst, Nordic Semiconductor и прочие вендоры в своих отладочных платах. Это уже стандарт индустрии.

Одно время на avito даже продавались многоразовые пластмассовые цанги-фиксаторы из резины для Tag-Connect.

4) Вывести отдельный свободный аппаратный UART на какой-нибудь PLD разъём. Желательно вилку. UART очень нужен для printf-отладки. Еще на UART можно запустить Shell. Shell нужна для отладки, управления, тестирования софта и железа, просмотра логов, диагностики и многого другого. Для UART подключения не нужно спец ПО. Достаточно бесплатных и доступных PuTTY, TeraTerm и прочего. UART есть везде. Во всех MK. Этот же код реализации Shell можно портировать на (или с) AVR, ESP32, 8051, RISC-V микроконтроллеров и так же отлаживаться в привычной CLI.
Если на плате нет свободного UART, то можно сразу позабыть про полноценную отладку, тестирование, DevOps, загрузчик, и контроль качества софта и железа. Если на плате нет выведенного UART, то изделие обречено.
SWD/JTAG хороши для отладки самого микроконтроллера и того, что у него внутри: регистры, RAM память, Flash. А как быть, если надо отлаживать внешние ASICи, которые подключены к MCU по SPI, I2C, MDIO и прочее? До них SWD уже не доберется. UART-Shell же позволит выгребать диагностику и из внешних устройств: акселерометры, GNSS приемники, LoRa трансиверы, модемы, SPI-flash и прочее.
5) GND для оссциллографа. GND всегда нужно для подключения мультиметра, для подключения осциллоскопа, для подключения логического анализатора. На плате не просто должны быть удобные пины для GND. Пинов с GND должно быть несколько (3+).
6) Светодиоды. Желательно, чтобы LEDов было как минимум три. LEDы это способ послать сигнал от прошивки к человеку. По мигающему HartBeat LED можно, например, судить, что программа не зависла. По красному LEDу можно символично сигнализировать об ошибках и авариях внутри программы. Status LED может, условно, мигать при принятых пакетах в RS485 и т.п.
Номер LED | Цвет | Назначение LED |
LED1 | Зеле��ый | HartBeat |
LED2 | Красный | Error |
LED3 | Желтый | Status |
LED4 | Синий | Показывающий питание на LDO или входе DC-DC |
7) Для LEDов надо стараться назначить такой пин на котором есть аппаратный PWM. Например в STM32 на PA4 просто нет каналов PWM. Почему это важно? Сейчас объясню почему.
Бывает так, что из-за проблем с логистикой на PCB в конце концов ставят не те LEDs или не те токо ограничивающие резисторы. В результате свечение LEDов оказывается запредельно ярким. Ослепительно ярким! Условно при обыкновенном GPIO=1 LED освещает пол комнаты. Самый простой выход - управлять LEDом через аппаратным PWMом. Если на GPIO пине нет PWM, а мы хотим на LED регулировать яркость, аппаратным ШИМ, то PWM придется дергать при помощи GPIO из прерываний по таймеру, что в результате замедлит исполнение основной прошивки и приложения. Прерывания всегда замедляют прошивку. В идеале PWM должен работать без прерываний. Сам по себе. Отсюда и получается, что LEDы должны быть на каналах аппаратного PWM. Другие МК ( TI, NRF ) позволяют назначать периферию на любой пин, но у STM32 это не так. Отсюда и такое пожелание.
8) Добавить фаски по углам PCB. Это чтобы не поцарапаться об углы PCB. Чтобы не порвать пакет при перевозке платы в рюкзаке и т п. Скругленные края даже выглядят приличнее нежели острые углы.
9) Еще надо выводить на TestPADы DAC (ЦАП) пины. В STM32 это обычно PA4 и PA5. DAC очень полезен при отладке RealTime процессов. По сути содержимое переменной можно осциллографом смотреть в реальном времени. Очень удобно, если прошивка делает какой-то ЦОС. Можно буквально выходы квадратурного смесителя (I; Q) разглядывать на осциллоскопе в режиме фигур Лиссажу (режим XY).
10) Добавить на свободный ADC уникальное константное напряжение для каждой новой версии платы. Значение напряжения можно задать резистивным делителем напряжения. Условно 0.25V или 2.7V, 1.5V, 2V, 2.5V и т. д. Это нужно не только для модульного теста ADC, но и чтобы прошивка, прочитав напряжение c ADC могла понять на какой плате её собственно запускают. В случае ошибочной загрузки не той прошивки не на ту плату выдать красным LEDом сигнал об аварии. Так сделано например на St-link программаторах версии V2. Если жалко ADC, то можно и четыремя-пятью GPIO бинарно задавать версию платы. Просто одни пины подтянуть резистором 40kOm к GND, а другие к VCC. Обычно свободные пины всегда остаются.
11) Если есть место, то можно еще джамперами задавать прошивке какой-то бинарный код. Условно NVRAM на джемперах. Так можно задать прошивке режим работы просто извне переставив положение джамперов. Это привет из 198х.
12) Если есть выбор ставить корпус BGA или LQFP, то лучше отдавать предпочтение корпусу LQFP. Так как в случае с QFP корпусом проще паяльником замкнуть соседние пины для каких-либо аппаратных ремонтов. Еще к LQFP пинам можно подцепляться прищипками SDK08.

Вот пожалуй и всё, что я могу отметить про дизайн PCB STM32. Остальное зависит уже от конкретного назначения устройства.
Резюме
Если вы заложите эти атрибуты в схемотехнику, то программисты однозначно будут вам благодарны и признательны. При этом плата окажется более удобна в работе с ней. Её будет проще сопровождать, отлаживать и модернизировать прошивку.
Если есть, что добавить про особенность разработки PCB на STM32, то можете поделиться своим опытом в комментариях
Источники
Исправление аппаратных ошибок на серийных изделиях
Как разработать плату, пригодную для массового производства? Подход Design for Manufacturing