原创 STM32 定时器 定时时间的计算

2011-4-22 08:40 5718 4 5 分类: MCU/ 嵌入式

假设 系统时钟是72Mhz,TIM1 是由PCLK2 (72MHz)得到,TIM2-7是由 PCLK1 得到

关键是设定 时钟预分频数,自动重装载寄存器周期的值

/*每1秒发生一次更新事件(进入中断服务程序)。RCC_Configuration()的SystemInit()的

RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2表明TIM3CLK为72MHz。因此,每次进入中

断服务程序间隔时间为

((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+7199)/72M)*(1+9999)=1秒 */(经过验证,此公式是对的)

定时器的基本设置

   1、   TIM_TimeBaseStructure.TIM_Prescaler = 7199;//时钟预分频数   例如 :时

钟频率=72/(时钟预分频+1)

   2、TIM_TimeBaseStructure.TIM_Period = 9999; // 自动重装载寄存器周期的值(定时

时间)     累计 0xFFFF个频率后产生个更新或者中断(也是说定时时间到)

   3、 TIM_TimeBaseStructure.TIM_CounterMode = TIM1_CounterMode_Up; //定时器

模式 向上计数

    

     4、 TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //时间分割值

     5、 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);//初始化定时器2

     6、 TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //打开中断   溢出中断  

     7、 TIM_Cmd(TIM2, ENABLE);//打开定时器

或者:

TIM_TimeBaseStructure.TIM_Prescaler = 35999;//分频35999      72M/

(35999+1)/2=1Hz 1秒中断溢出一次

TIM_TimeBaseStructure.TIM_Period = 2000; //计数值2000

((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+35999)/72M)*(1+2000)=1秒 */

 /* Time base configuration */

    TIM_TimeBaseStructure.TIM_Period = MY_CLK/SAMPLING_FREQ;//22500;// 72M/50/64

    TIM_TimeBaseStructure.TIM_Prescaler = 0;

    TIM_TimeBaseStructure.TIM_ClockDivision = 0;

    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;


    TIM_TimeBaseInit ( TIM2, &TIM_TimeBaseStructure );

    /* PWM1 Mode configuration: Channel2 */

    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;

    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

    TIM_OCInitStructure.TIM_Pulse = 1;//any data not extend the TIM_Period

    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

    TIM_OC2Init ( TIM2, &TIM_OCInitStructure );

    TIM_OC2PreloadConfig ( TIM2, TIM_OCPreload_Enable );

    //auto load

    TIM_ARRPreloadConfig ( TIM2, ENABLE )

 TIM_ITConfig(TIM2, TIM_IT_Update  , ENABLE);

    /* TIM2 enable counter */

    TIM_Cmd ( TIM2, ENABLE );

这样设置后,假设系统频率为MY_CLK,定时器的频率即为SAMPLING_FREQ。


   




文章评论1条评论)

登录后参与讨论

用户442533 2013-11-28 11:21

挺好的,现在时间计算对了
相关推荐阅读
用户1476002 2011-09-16 14:54
独立键盘程序
说一下思路,这个键盘是独立键盘,平时不按下的时候cpu(stm32)相应管脚为高电平。按下为低电平。每隔一定的时间进入一次按键扫描程序。检测相应按键是否被按下。void TIM2_IRQHandler...
用户1476002 2011-04-21 17:12
STM32的时钟系统分析
在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。①、HSI是高速内部时钟,RC振荡器,频率为8MHz。②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围...
用户1476002 2011-04-20 10:25
delphi7中create(nil)与create(self)区别
Create(nil);//需要自己释放   Create(Self);//当Self释放时自动触发释放 Create(Application) ---- 同上,由Application对象负责回收。...
用户1476002 2011-04-11 16:57
iar6.10下烧写STM3210B-LK1开发板
如上面的两个图所示,DEBUGGER选择第三方,然后安装stm32DriverV610.exe.然后浏览找到他就可以了。下面的是stm32DriverV610.exe驱动。attachment dow...
我要评论
1
4
关闭 站长推荐上一条 /2 下一条