0

我已经使用我的 nucleo-g070 板上的一个基本计时器(不是 systick)编写了一个延迟函数。默认时钟为 16MHz(如果我查询 APB1 频率,我得到 16000000)。但是,LED 闪烁的速度太快(几乎看不到),所以确实出了点问题。

这是代码:

void delay_setup(void) {
    rcc_periph_clock_enable(RCC_TIM6);
    timer_set_prescaler(TIM6, rcc_apb1_frequency / 1000000 - 1);
    timer_set_period(TIM6, 0xffff);
    timer_one_shot_mode(TIM6);
}

void delay_us(uint32_t us) {
    TIM_ARR(TIM6) = us;
    TIM_EGR(TIM6) = TIM_EGR_UG;
    TIM_CR1(TIM6) |= TIM_CR1_CEN;
    while (TIM_CR1(TIM6) & TIM_CR1_CEN);
}

我也尝试过其他计时器,结果相同。然而,发生了一件奇怪的事情——我错误地写了 TIM2(不知道 MCU 没有它),我得到了预期的 1s 延迟。同样,在数据表中没有指定 TIM2。那么这里发生了什么?

4

0 回答 0