【问题标题】:generate delay in stm32 use timer在 stm32 使用定时器中产生延迟
【发布时间】: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 时钟频率?

【问题讨论】:

    标签: timer stm32 keil


    【解决方案1】:

    您可以使用STM32外设库中提供的函数RCC_GetClocksFreq获取运行时的apb时钟频率。要使此函数返回正确的值,如果您使用的外部晶振的频率不是默认值(STM32F1xx 为 8 MHz 或 25 MHz,请检查您的微控制器),您需要定义宏 HSE_VALUE 并设置它与您项目中使用的晶体频率有关。

    您没有说您使用的是哪个微控制器(有很多不同的 stm32 微控制器),但不同的参数记录在与您的微控制器系列对应的参考手册中,例如对于 STM32F1XX,这将是第 15.3 节参考手册,本文档:

    http://www.st.com/web/en/resource/technical/document/reference_manual/CD00171190.pdf

    【讨论】:

      猜你喜欢
      • 2019-05-24
      • 1970-01-01
      • 2019-07-23
      • 1970-01-01
      • 2012-01-03
      • 2020-10-02
      • 2019-06-21
      • 1970-01-01
      • 2023-04-02
      相关资源
      最近更新 更多