通用计时器

控制寄存器 1(TIMx_CR1)
TIMx_CR1 的最低位,计数器使能位,该位必须置 1,才能让定时 器开始计数。
DMA/中断使能寄存器 (TIMx_DIER)
第 0 位,该位是更新中断允许位,本章用到的是定时器的更新中 断,所以该位要设置为 1,来允许由于更新事件所产生的中断
预分频寄存器(TIMx_PSC)
该寄存器用 设置对时钟进行分频,然后提供给计数器,作为计数器的时钟
定时器的时钟来源有 4 个:
1)内部时钟(CK_INT)
2)外部时钟模式 1:外部输入脚(TIx)
3)外部时钟模式 2:外部触发输入(ETR)
4)内部触发输入(ITRx):使用 A 定时器作为 B 定时器的预分频器(A 为 B 提供时钟)。
APB1最大频率是36Mhz,这个在初始化的时候就已经设置了的。
APB预分频和计数器时钟频率(CK_PSC)的关系指的是AHB分频得到APB1,一般AHB取最大72Mhz,所以APB1是AHB的2分频,既然不是1分频,所以计数器时钟就是APB1的2倍了。
这里的内部时钟 CK_INT 时钟是从 APB1 倍频的来的,当 APB1 的时钟分频数设置不为 1,通用定时器 TIMx 的时钟 是 APB1 时钟的 2 倍,当 APB1 的时钟不分频的时候,通用定时器 TIMx 的时钟就等于 APB1 的时钟。
高级定时器的时钟不是来自 APB1,而是来自 APB2 的。
TIMx_CNT 寄存器,
该寄存器是定时器的计数器,该寄存器存储了当前 定时器的计数值
自动重装载寄存器(TIMx_ARR)
根据 控制寄存器TIMx_CR1 寄存 器中 APRE 位的设置:
APRE=0 时,预装载寄存器的内容可以随时传送到影子寄存器,此时 2 者是连通的;APRE=1 时,在每一次更新事件(UEV)时,才把预装在寄存器的内容传送到 影子寄存器。
状态寄存器(TIMx_SR)
标记当前与定时 器相关的各种事件/中断是否发生
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); 先使能
TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
TIM_ClearITPendingBit(TIM3, TIM_IT_Update );

TIM_GetFlagStatus
TIM_ClearFlag
系统 初始化的时候在默认的系统初始化函数SystemInit函数里面已经初始化APB1的时钟为2分频, 所以 APB1 的时钟为 36M,而从 STM32 的内部时钟树图得知:当 APB1 的时钟分频数为 1 的 时候,TIM2~7 的时钟为 APB1 的时钟,而如果 APB1 的时钟分频数不为 1,那么 TIM2~7 的时 钟频率将为 APB1 时钟的两倍。因此,TIM3 的时钟为 72M,再根据我们设计的 arr 和 psc 的值, 就可以计算中断时间了。计算公式如下:

Tout= ((arr+1)*(psc+1))/Tclk;

其中: Tclk:TIM3 的输入时钟频率(单位为 Mhz)。
Tout:TIM3 溢出时间(单位为 us)。
例如
TIM3_Int_Init(4999,7199); //10Khz 的计数频率,计数到 5000 为 500ms
Tout= ((4999+1)*( 7199+1))/72=500000us=500ms。
通用计时器_第1张图片
记这一次到达500ms和下次到达500ms中间间隔1s
捕获/比较模式寄存器(TIMx_CCMR1/2
模式设置位 OCxM,此部分由 3 位组成。 总共可以配置成 7 种模式,我们使用的是 PWM 模式,所以这 3 位必须设置为 110/111。这两种 PWM 模式的区别就是输出电平的极性相反
TIMx_CCMR1 明显是针对 2 个通道的配置,低八位[7:0]用于捕获/比较通道 1 的控制,而高八 位[15:8]则用于捕获/比较通道 2 的控制,因为 TIMx 还有 CCMR2 这个寄存器,所以可以知道 CCMR2 是用来控制通道 3 和通道 4。
其中 CC1S[1:0],这两个位用于 CCR1 的通道配置,这里我们设置 IC1S[1:0]=01,也就是配 置 IC1 映射在 TI1 上
CC1 对应 TIMx_CH1
捕获/比较使能寄存器(TIMx_CCER
该寄存器控制着各个输入输出通 道的开关
CC2E 位,该位是输入/捕获 2 输出使能位,要想 PWM 从 IO 口输出,这个位必须设置为 1
捕获/比较寄存器(TIMx_CCR1~4
在输出模式下,该寄存器的值与 CNT 的值比较,根据比较结果产生相应动作。利用这点, 我们通过修改这个寄存器的值,就可以控制 PWM 的输出脉宽了

你可能感兴趣的:(通用计时器)