STM32 定时器时间的计算方法
STM32 中的定时器有很多用法:
(一)系统时钟(SysTick)
设置非常简单,以下是产生 1ms 中断的设置,和产生 10ms 延时的函数:
void RCC_Conguration(void)
{
RCC_ClocksTypeDef RCC_ClockFreq;
SystemInit();//源自 system_stm32f10x.c 文件,只需要调用此函数,则可完成 RCC 的配
置.
RCC_GetClocksFreq(&RCC_ClockFreq);
//SYSTICK 分频--1ms 的系统时钟中断
if (SysTick_Cong(SystemFrequency / 1000))
{
while (1); // Capture error
}
}
void SysTick_Handler(void)//在中断处理函数中的程序
{
while(tim)
{
tim--;
}
}
//调用程序:
Delay_Ms(10);
当然,前提是要设置好,变量 tim 要设置成 volatile 类型的。
(二)第二种涉及到定时器计数时间(TIMx)
/*TIM3 时钟配置*/
TIM_TimeBaseStructure.TIM_Prescaler = 2; // 预 分 频 ( 时 钟 分
频)72M/(2+1)=24M
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
TIM_TimeBaseStructure.TIM_Period = 65535; //装载值 18k/144=125hz
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
定时时间计算:
TIM_TimeBaseStructure.TIM_Prescaler = 2;
//分频 2 72M/(2+1)/2=24MHz
TIM_TimeBaseStructure.TIM_Period = 65535; //计数值 65535
((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+2)/72M)*(1+65535)=0.00273
秒=366.2Hz */
注意两点(来自大虾网,未经检验)