STM32: Po zavolání SysTick_Config se změní frekvence

Ahoj, mám takový kód:

#include "sys/types.h"
#include "stm32f10x.h"
#include "main.h"

int main(void){                         // Main function.  Called by the startup code.
  static uint8_t i = 0;
  SysTick_Config(SystemCoreClock/200);   //10-100ms,100-10ms,1000-1ms,10000-100us,100000-10us,
  init_mcu();
  for(;;){
    i = ~i;
    if(i == 0){GPIOC->BSRR = GPIO_BSRR_BS8;}
    else{GPIOC->BSRR = GPIO_BSRR_BR8;} 
    }
  }

__INLINE static void init_mcu(void){
  RCC->APB2ENR = 0                      // Most of the peripherals are connected to APB2. Turn on the clocks for the interesting peripherals 
  | RCC_APB2ENR_IOPCEN;                 // I/O port C clock enable   
  
  GPIOC->CRH = 0                        // SET GPIOC as Output
  | GPIO_CRH_MODE8_0                    // Max output speed 10MHz - LED0
  | GPIO_CRH_MODE9_0;                   // Max output speed 10MHz - LED1
  }

void SysTick_Handler(void){
  static uint8_t j = 0;
  j = ~j;
  if(j == 0){GPIOC->BSRR = GPIO_BSRR_BR9;}
  else{GPIOC->BSRR = GPIO_BSRR_BS9;} 
  }

Zjistil jsem, že pokud je funkce SysTick_Config(SystemCoreClock/200) zakomentována, tak mi pinožka osciloskopu na pinu GPIOC8 kmitá na frekvenci cca 1,5Mhz. Pokud jí ale zavolám tak se tato frekvence změní na 1,7Mhz.
Nemáte někdo vysvětlení pro toto chování? Mě to totiž hlava ani po poradě s datasheetem nebere. Dík.

:arrow_right: administrator: přejmenováno z "STM32 a SysTick"

Tak jako aktivoval/deaktivoval jsi periodicke preruseni od SYSTICKU s relativne vysokou kadenci , takze se nediv ze se tam spotrebuje/nespotrebuje nejakej strojovej cas procesoru a tim padem i rychlost jakym bezi kod v mainu.

pokud by se rychlost snížila tak se tomu divit nebudu…to že je ale o 13% větší mi nedá spát. Ten procesor si prostě žije vlastním životem…

Tak tu zatěž zvěč víc, jestli to bude mít nějakou progresi.
Možná by bylo zajímavý nepracovat v přerušení se stejným I/O portem , v tomto případě C. Zkus dělat v tom přerušení něco jinýho.