stm32定时器时钟频率的计算问题

stm32 专栏收录该内容
8 篇文章 0 订阅

stm32定时器基本简介

f4:
在这里插入图片描述

stm32定时器时钟频率

系统时钟频率/MHZ
SYSCLK(系统时钟)168
APB1总线时钟(4分频)42
APB2总线时钟(2分频)84

因为系统初始化 SystemInit 函数里面已经初始化 APB1 的时钟为 4 分频,所以 APB1 的时钟为 42M,而从 STM32F4 的内部时钟树图(上图)得知:
1)当 APB1 的时钟分频数为 1 的时候,TIM2~7 以及 TIM12~14 的时钟为APB1 的时钟,
(2)而如果 APB1 的时钟分频数不为 1,那么 TIM2~7 以及 TIM12~14 的时钟频率将为 APB1 时钟的两倍

这里还要注意的就是高级定时器以及 TIM9~TIM11 的时钟不是来
自 APB1,而是来自 APB2 的。(其定时器的时钟频率和APB1类似)

定时器的时钟频率
TIM1、TIM8–112*APB2
TIM2—7、TIM12—142*APB1

定时器溢出时间的计算:
Tout= ((arr+1)*(psc+1))/Tclk;
其中:
Tclk:TIM 的输入时钟频率(单位为 hz)。
Tout:TIM溢出时间(单位为 s)。

例如:

定时器3为例
  void TIM3_Int_Init(u16 arr,u16 psc)
  {
      TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
      NVIC_InitTypeDef NVIC_InitStructure;
      RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); //①使能 TIM3时钟
      TIM_TimeBaseInitStructure.TIM_Period = arr; //自动重装载值
      TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //定时器分频
	TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
	TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
	TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);// ②初始化定时器 TIM3
	TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //③允许定时器 3 更新中断
	NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn; //定时器 3 中断
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01; //抢占优先级 1
	NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; //响应优先级 3
	NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
	NVIC_Init(&NVIC_InitStructure);// ④初始化 NVIC
	TIM_Cmd(TIM3,ENABLE); //⑤使能定时器 3
  }

主函数中调用该函数TIM3_Int_Init(5000-1,8400-1);
其溢出时间的计算如下:
定时器时钟84M,分频系数8400,所以84M/8400=10Khz的计数频率,计数 5000 次为 500ms。

  • 9
    点赞
  • 3
    评论
  • 34
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页

打赏作者

等不到星光等时光呀

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值