За минуту прерывание тикает примерно 24 раза, вместо ожидаемых 60. Что-то не так. Вроде кварц 12 МГц. PLL*=6; SYSCLK=72 МГц; APB1_Prescaler/=2; Т.е. PCLK1=36 МГц;
Поскольку APB1_Prescaler!=1, то TIMXCLK/=2; Итого TIMXCLK=SYSCLK/2/2=72/4=18 МГц;
PSC=18-1; ARR=1000-1; Итого delay(1000) должен выдавать задержку 1 мС.
С учётом цикла for(counter=0;counter<1000;counter++){delay(1000);} задержка должна бы быть равна 1 с.
Где-то закрался ещё один делитель на 2,5. Только вот где?