在目前的阶段对于我来说用通用定时器就可以了,所以这边也就对通用定时器做一个总结
首先每个定时器都是完全独立的,没有互相共享任何资源。它们可以一起同步操作。
通用定时器(General-Purpose Timers)
功能: 通用定时器提供了更多的功能和配置选项,包括PWM生成、脉冲计数、输入捕获、输出比较等功能。
用途场景: 适用于需要更复杂的定时功能的应用,如PWM控制、频率测量、脉冲计数等。测量输入信号的脉冲长度(输入捕获)或者 产生输出波形 ( 输出比较 和 PWM )等。
定时器的工作原理
例如:基本定时器的计数器只能进行向上计数,计数器 根据频率进行向上计数,即每来一个 CNT脉冲,CNT 值就加 1。当 CNT值与ARR的设定值相等时计数器就会重新从 0 开始计数并生成计数器上溢事件(更新事件),如此重复以上过程。
2. 通用定时器(General-Purpose Timers)
功能: 通用定时器提供了更多的功能和配置选项,包括PWM生成、脉冲计数、输入捕获、输出比较等功能。
用途场景: 适用于需要更复杂的定时功能的应用,如PWM控制、频率测量、脉冲计数等。测量输入信号的脉冲长度(输入捕获)或者 产生输出波形 ( 输出比较 和 PWM )等。
STM32F407的通用定时器
定时器最大时钟即为定时器工作频率
由于没学过数电,那些框图也不是很了解,就先省略了,等之后学明白了再把这部分补上去。orz
定时器的计数模式
1.递增计数 2.递减计数 3.中心对齐
定时时间(溢出周期)计算
arr:自动重装值。
psc:时钟预分频数
定时器溢出时间计算方法:Tout=((arr+1)*(psc+1))/Ft us.
Ft=定时器工作频率,单位:Mhz
假如定时1s,定时器时钟频率为72Mhz。则arr=9999,psc=7199时,Tout= (9999+1)*(7199+1) / 72=1000 000 us =1s。
比如配置一个1s的定时器,这里用的是定时器4
代码如下
htim4.Instance = TIM4;
htim4.Init.Prescaler = 8400-1;
htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
htim4.Init.Period = 10000-1;
htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;