0

我刚买了一个 stm32l152RC,想知道延迟是如何工作的。系统时钟为 16Mhz。

代码:

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) {
        };
    }

当我Delay(1000);在这种情况下执行延迟为 1 秒时,有人可以解释为什么延迟为 1 秒吗?

4

1 回答 1

2

经过一番研究,这是我想出的答案。做SysTick_Config(RCC_Clocks.HCLK_Frequency / 1000);意味着你设置每秒 1000 个滴答声。当你这样做时Delay(100),延迟将是 100 毫秒。

于 2017-01-25T21:05:29.167 回答