Надо бы вначале задать сколько из 16 уровней будет вложенных, а сколько не вложенных (в пределах группы). Задается это дело через поле PRIGROUP регистра AIRCR который находится в SCB (System Control Block). Вот что получаеццо:
PRIGROUP группы (с вытеснением) подгруппы
0x3 16 0
0x4 8 2
0x5 4 4
0x6 2 8
0x7 0 16
После сброса значение PRIGROUP=0 что соответствует варианту когда подгрупп нет - прерывание с бОльшим приоритетом вытеснит с меньшим...
Я библиотекой не пользуюсь - какая-то мутная она. Есть макросы и инлайн функции которыми все делается очень просто и понятно, например:
//Задаем группирование приоритетов - 8 групп в каждой два уровня приоритета
NVIC_SetPriorityGrouping(0x04);
//Установка приоритета (самый низкий)
NVIC_SetPriority(PendSV_IRQn, 15);
//Установка приоритета SVC - выше PendSV, но без вытеснения
NVIC_SetPriority(SVCall_IRQn, 14);
//Установка приоритета прерывания которое вытеснит любое из тех что выше
NVIC_SetPriority(xxxxxx_IRQn, 13);