STM32F4的定时器定时器参数设置问题
函数:void TIM3_Int_Init(u16 arr,u16 psc);
//通用定时器3中断初始化
//arr:自动重装值。
//psc:时钟预分频数
//定时器溢出时间计算方法:Tout=((arr+1)*(psc+1))/Ft us.
//Ft=定时器工作频率,单位:Mhz
//这里使用的是定时器3!
void TIM3_Int_Init(u16 arr,u16 psc);
实例:
STM32F4的初始化定时器,TIM3_Int_Init(5000-1,8400-1);
TIM3_Int_Init(5000-1,8400-1)这一句是0.5s进入一次的中断。正点原子的中断代码,8400是分频系数,5000是预装载值。我们使用的是TIM3.根据时钟树,可以知道TIM3挂载在APB1下,APB1的时钟频率是=42MHZ,但是因为我们分频系数不等于1,所以TIM3的时钟为APB1的频率*2=84MHZ。
计算过程:
TIM3的时钟84/8400=0.01M,
一个时钟周期为1_000_000/10_000=100us
因为装载值是为5000,所以最后溢出的时间100us*5000=500_000us=0.5s
最后可得这个程序0.5s进入一次定时器中断
在STM32F4的系统时钟中:
有这样的计算方式:
STM32F4的时钟
HCLK = SYSCLK / 1 = 168MHz ,AHB总线时钟
PCLK2 = HCLK / 2 = 84MHz
PCLK1 = HCLK / 4 = 42MHz
关于STM32F4定时器时钟频率问题
(1)当APB1和APB2分频数为1的时候,TIM1、TIM8~TIM11的时钟为APB2的时钟,TIM2~TIM7、TIM12~TIM14的时钟为APB1的时钟;
(2)而如果APB1和APB2分频数不为1,那么TIM1、TIM8~TIM11的时钟为APB2的时钟的两倍,TIM2~TIM7、TIM12~TIM14的时钟为APB1的时钟的两倍。
解释为: