【发布时间】:2014-03-16 09:38:33
【问题描述】:
我正在尝试使用 stm32 生成 1us 延迟,我知道我需要一个计时器。 我在计时器上找到了一些代码,但不知道如何配置设置以使其为 1us。 因为设置将取决于 apb1 时钟频率或其他。 以下是我的代码:
void TIM5_Init_Query(void)
{
TIM_TimeBaseInitTypeDef Tim5;
TIM_DeInit(TIM5);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);
Tim5.TIM_Period=1;
Tim5.TIM_Prescaler=80-1;
Tim5.TIM_ClockDivision=1;
Tim5.TIM_CounterMode=TIM_CounterMode_Down;
TIM_TimeBaseInit(TIM5,&Tim5);
}
void usDelay(u32 nTime)
{
u16 counter=nTime&0xffff;
TIM_Cmd(TIM5,ENABLE);
TIM_SetCounter(TIM5,counter);
while(counter>1)
{
counter=TIM_GetCounter(TIM5);
}
TIM_Cmd(TIM5,DISABLE);
}
我的问题是,如何设置 TIM_Prescaler、TIM_Period 和 Tim5.TIM_ClockDivision, 这些价值和我的延迟之间有什么关系。 如何检查我的代码中的 apb1 时钟频率?
【问题讨论】: