Непонятно зачем у вас локальная переменная volatile ?
volatile u08 cnt;
for(cnt=0; cnt != ST_QUANTITY+1; cnt++);
Чтобы работало медленнее?
в примерах из инета, не буду говорить, какие источники, примерщики по сравнению с вами сплошные дилетанты.
Не те примеры наверное смотрите. Посмотрите лучше что-нибудь типа реализации работы с SD-картами или USB с Ethernet или FreeRtos.