Рекомендую ознакомиться с Practical UML Statecharts in C/C++, 2nd
Edition Event-Driven Programming for Embedded Systems https://www.state-machine.com/psicc2/С указанным камнем есть проблемка нехилая: генератор на часовом кварце разгоняется до 5 сек, возможны падения, а для сброса флага ошибки генератор надо выключить и запустить по новой, причем выключение отрабатывается довольно продолжительное время, цифр на которое в DS нет. Зато есть встроенный RC на 32 кГц. С USB ещё возникал вопрос - ему нужна тактовая 48 МГц, а побудка по появлению VBUS сделана не побудкой, а активизацией модуля. Подменял эту фичу на работу с GPIO, ну и организовывал эти 48 МГц только на время работы USB, а там у ядра частота тоже должна быть не меньше. А при переключении тактовой надо следить за реальными временами...
В общем случае так или иначе при многозадачности (когда одна задача может знать только требуемый для неё уровень энергопотребления, и это включает в себя уровень пониженного потребления, генераторы и частоты) необходим некий менеджер энергопотребления. Для случая, когда нужно принудительно остановить задачи, то им нужно передать сигнал/сообщение. Если нужно снять задачи, то это другой случай.