После RESET, насколько я помню, в STM32 все периферийные прерывания имеют одинаковый наивысший приоритет (нуль), поэтому приоритет можно только
понизить. Например, SysTick обычно конфигурируется на самом низком приоритете (15), чтобы не мешать остальным.
Полу-OFF: был в моей практике неприятный трудноотлавливаемый глюк, связанный с неправильной расстановкой приоритетов. В низкоприоритетном коде контроллер выполнял примерно такую конструкцию:
Код
if(NeedSleep)
{
Sleep();
NeedSleep = 0;
}
В функции Sleep() контроллер гасил PLL, и уходил в "спячку" WFI(). Выход оттуда - по прерыванию.
Так вот, очень редко, 1-2 раза в день при круглосуточной работе, контроллер "отваливался" и приходилось передергивать питание.
Причина оказалась в том, что если после проверки
Код
if(NeedSleep)
и до ухода в спячку возникало прерывание - оно оставалось необработанным, так как контроллер после него "засыпал".
Поймать такую багу оказалось возможно только с помощью
логического анализатора, который тут не раз справделиво советовали.
Вылечилось так
Код
__disable_irq();
if(NeedSleep)
{
Sleep();
NeedSleep = 0;
}
__enable_irq();
"... часами я мог наблюдать, как люди работают." (М. Горький)