степень использования диаграмм, определяется пониманием UML. В процессе проектирования на каждой итерации возникает необходимость в добавлении новой диаграммы.
Если вы используете модули или компоненты то можно использовать диаграмму классов - один модуль - один класс.
Тогда переменные модуля - это атрибуты класса, процедуры и функции - методы.
Для описания алгоритмов можно использовать диаграммы деятельности, диаграммы последовательности (отображая вызов процедур и функций разных модулей, передачу управления в модуль).
Стараюсь использовать диаграмму классов только по прямому назначению. Пишу на C потому, что для микроконтроллерах не всегда удаётся найти подходящий компилятор C++, да и производительность не всегда позволяет.
Для модулей стараюсь использовать диаграмму компонентов. Диаграмму классов просто пропускаю.
Логику описываю на диаграмме активности. Если она нарисована криво, то код программы воспринимается легче диаграммы.
Поскольку модули раскладываю по папкам изображаю структуру папок на диаграмме пакетов. Обычно для моих задач получается всего 3 пакета - drivers, libs_static(статические библиотеки написанные мной), tasks(для микроконтроллеров народ обычно разбивает программу на задачи, особенно актуально если прикручивается ОС).
Диаграмму развертывания ещё до конца не освоил, делаю лишь наброски.
Временную диаграмму в электронике обычно рисуют и не зная UML. Если не нарисовать то приходится держать её в голове.
UML скорее подходит для ООП, но для проектирования процедурных программ ничего лучше пока не нашёл.