Решение проблемы многофункциональных выводов современных микроконтроллеров STM

Проблема многофункциональных выводов

Современные микроконтроллеры становятся все более сложными и более интегрированными устройствами. Их функционал растет с каждым годом. При этом производители стараются сохранить корпуса микросхем с минимальным количеством выводов. Чтобы решить противоречие большого количества функций и малого количества выводов придумали систему назначения на один вывод нескольких функций. Конкретная функция в каждый момент времени определяется программой.

На практике, функция для каждого вывода назначается при проектировании и при работе обычно не изменяется. Этот факт отражен в подходе фирмы StMicroelectronics в их фирменном программном обеспечении. Речь про CubeIDE, где можно в графическом режиме назначить выводам определенные функции и задать настройки для периферийных устройств, связанных с этими выводами.

Выводы stm

Два подхода к схемному обозначению

Такая многофункциональность создает определенные неудобства для схемотехников. Имеются два основных подхода. Первый - сложный: для каждого вывода указывается основная функция, которая устанавливается после аппаратного сброса микроконтроллера, а рядом списком указываются все возможные альтернативные функции вывода. Минусы такого подхода в том, что список альтернативных функций может быть достаточно большим и захламляет схемное обозначение микроконтроллера. Кроме того, остается не понятным, а какая конкретно функция используется в данном проекте. Ну и самое главное: разработчики просто ленятся указывать полный список всех возможных функций для каждого вывода.

Все функции

Второй основной подход к схемному обозначению микроконтроллеров - это не указывать дополнительные функции вовсе. Указываются только основные. Именно этот подход является превалирующим на сегодняшний день. Создание схемных обозначений по такому принципу занимает существенно меньше времени, но основной минус полностью остается: по-прежнему не понятно, а какая конкретно альтернативная функция используется в данном проекте. Косвенно это можно определить по названию цепи, однако неудобство для разработчика-схемотехника очевидно: ему приходится постоянно переключаться между картой назначений выводов и проектируемой схемой.

Без функций

Оригинальное решение SalixEDA

Для SalixEDA я использую оригинальное решение: беру назначения альтернативных функций из конкретного программного проекта. Для реализации этой схемы задействован функционал параметров схемы. Суть в том, что схемное изображение микроконтроллера создается с основными функциями выводов, которые назначаются после аппаратного сброса микроконтроллера. Для каждого вывода также рядом указывается параметры альтернативных функций. Это по сути заглушки, которые заменятся реальными альтернативными функциями непосредственно в схеме.

Заготовка

Импорт из CubeIDE

Работает это следующим образом. Вставляем микроконтроллер в схему как обычно. Выделяем микроконтроллер, нажимаем на нем правую кнопку мыши. В открывшемся меню выбираем "Параметры выделения" и попадаем в такой диалог.

Выделение и параметры

Нажимаем кнопку импорта выводов и выбираем файл ioc нашего проекта. В этом файле система CubeIDE хранит назначения альтернативных функций выводам, а также настройки периферии. SalixEDA сканирует этот файл и выбирает записи, относящиеся к альтернативным функциям выводов. В результате получаем такую таблицу.

Таблица с альтернативными функциями

Результат на схеме

При нажатии кнопки OK этого диалога альтернативные функции выводов, а также назначенные имена этих выводов попадают в схемное изображение микроконтроллера. На следующем рисунке зеленым обведены альтернативные функции выводов микроконтроллера, а оранжевым - имена выводов, назначенные разработчиком ПО.

Микроконтроллер с альтернативными функциями

Итог

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

В результате схемотехник видит на схеме именно те альтернативные функции, которые реально используются в прошивке, и подписанные имена сигналов, согласованные с разработчиком ПО. Это полностью устраняет необходимость постоянно сверяться с картой назначения выводов и снижает риск ошибок при проектировании.

Итог: Единый источник правды (файл .ioc) теперь работает и для схемотехника, и для программиста. Изменяете назначение выводов в CubeIDE — обновляете параметры в SalixEDA одним нажатием. Никаких расхождений между схемой и прошивкой.

Попробуйте этот подход в вашем следующем проекте на STM32 — вы увидите, насколько проще становится совместная работа схемотехника и программиста.