1、STM32 定时器(一)定时器时间的计算2010-08-20 11:35STM32的定时器是灰常 NB 的,也是灰常让人头晕的( 当然是对于白菜来说的)。STM32中的定时器有很多用法:(一)系统时钟(SysTick)设置非常简单,以下是产生1ms 中断的设置,和产生10ms 延时的函数:void RCC_Configuration(void)RCC_ClocksTypeDef RCC_ClockFreq;SystemInit();/源自 system_stm32f10x.c 文件,只需要调用此函数,则可完成 RCC 的配置.RCC_GetClocksFreq(/SYSTICK 分频-1ms
2、的系统时钟中断if (SysTick_Config(SystemFrequency / 1000) while (1); / Capture errorvoid SysTick_Handler(void)/在中断处理函数中的程序while(tim)tim-;/调用程序:Delay_Ms(10);当然,前提是要设置好,变量 tim 要设置成 volatile 类型的。(二)第二种涉及到定时器计数时间(TIMx)/*TIM3时钟配置*/TIM_TimeBaseStructure.TIM_Prescaler = 2; /预分频(时钟分频)72M/(2+1)=24MTIM_TimeBaseStruct
3、ure.TIM_CounterMode = TIM_CounterMode_Up; /向上计数TIM_TimeBaseStructure.TIM_Period = 65535; /装载值18k/144=125hzTIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0;TIM_TimeBaseInit(TIM3,定时时间计算:TIM_TimeBaseStructure.TIM_Prescaler = 2;/分频2 72M/(2+1)/2=24M
4、HzTIM_TimeBaseStructure.TIM_Period = 65535; /计数值65535(1+TIM_Prescaler )/72M)*(1+TIM_Period )=(1+2)/72M)*(1+65535)=0.00273秒=366.2Hz */注意两点(来自大虾网,未经检验)(1)TIMx(1-8 ) ,在库设置默认的情况下,都是 72M 的时钟;(2)TIM_TimeBaseStructure.TIM_RepetitionCounter=0;是重复计数,就是重复溢出多少次才给你来一个溢出中断,它对应的寄存器叫 TIM1 RCR.如果这个值不配置,上电的时候寄存器值可是随机的,本来1秒中断一次,可能变成 N 秒中断一次,让你超级头大!