2017-01-25 6 views
0

Ich habe gerade eine stm32l152RC gekauft und habe mich gefragt, wie die Verzögerung funktioniert. Die Systemuhr ist 16Mhz.Wie funktioniert die Verzögerung auf dem stm32l152RC?

Code:

static volatile uint32_t TimingDelay; 
void Delay(__IO uint32_t nCount); 


int main(void) { 
    Config_Systick(); 
    char *RCCp = (char*) 0x40023800; 
    int *PBp = (int *) 0x40020400; 
    // RCC Config 
    *((int*) (RCCp + 28)) |= 0x3f; 
    *((int*) (RCCp + 32)) |= 1; 
    *PBp = 0x5000; 

    while (1) { 
     GPIO_TOGGLE(GPIOB, LD_GREEN); //toggle green led 
     Delay(1000); // 1 second? 
    } 
} // end of main 

    RCC_ClocksTypeDef RCC_Clocks; 
    void Config_Systick() { 
     RCC_GetClocksFreq(&RCC_Clocks); 
     SysTick_Config(RCC_Clocks.HCLK_Frequency/1000); // setting changed to/1000 
    } 

    void TimingDelay_Decrement(void) { 
     if (TimingDelay != 0x00) { 
      TimingDelay--; 
     } 
    } 

    void Delay(uint32_t nTime) { 
     TimingDelay = nTime; 
     while (TimingDelay != 0) { 
     }; 
    } 

Als ich Delay(1000); in diesem Fall führen Sie die Verzögerung 1 Sekunde ist, könnte jemand bitte erklären, warum die Verzögerung ist 1 Sekunde?

+0

@Olaf Danke für deine Antwort, ich habe es tatsächlich gelesen. –

Antwort

2

Nach einigen Recherchen ist dies die Antwort, die ich kam. doing SysTick_Config(RCC_Clocks.HCLK_Frequency/1000); bedeutet, dass Sie 1000 Ticks pro Sekunde einstellen. Wenn Sie Delay(100) tun, beträgt die Verzögerung 100 ms.

Verwandte Themen