STM32-F407入门学习:TIM基本定时器指南
目录
1 基本定时器简介
STM32F407IGT6芯片总共14个定时器:
2个基本定时器(TIM6和TIM7)、4个通用定时器(TIM2~TIM5)
6个通用定时器(TIM9~TIM14)、2个高级控制定时器(TIM1和TIM8)
2 基本定时器功能框图
框图3中自动重装载寄存器、预分频器下方的阴影:在定时器更新(Update)事件时传送预装载寄存器至实际寄存器,即此类寄存器实际对应2个寄存器,一个是我们可以写入或读出的寄存器,称为预装载寄存器,另一个是我们看不见、无法对其进行读写操作,但在使用中却真正起作用的寄存器,称为影子寄存器
框图3中的两个指向不同的图标:指向右下角的图标表示一个事件,指向右上角的图标表示中断和DMA输出,自动重装载寄存器左边的“U”即“Update”,表示更新事件发生时将自动重装载寄存器的内容拷贝到影子寄存器内
2.1 时钟源
定时器要实现定时,自然需要时钟源,基本定时器的时钟源只能来自内部时钟,由CK_INT提供,定时器的时钟并非直接来自APB1或APB2,而是来自输入为APB1或APB2的一个倍频器,对于基本定时器,当APB1的预分频系数为1时,定时器的时钟频率等于APB1的频率;当APB1的预分频系数取2时,定时器的时钟频率等于APB1频率的2倍
当TIM6和TIM7的控制寄存器1(TIMx_CR1)的CEN位置1时,内部时钟即向预分频器提供时钟,也即启动基本定时器
2.2 控制器
定时器控制器包含有一个触发输出控制器,控制器通过定时器配置寄存器(TIMx_CR)实现对定时器功能配置,可实现对定时器的复位、使能以及计数的控制,换言之,即控制器控制CK_INT时钟是否可以正常传输到PSC预分频器内
触发控制器是专门用于控制定时器输出一个信号,这个信号可以输出到STM32内部其他外设(作为其他外设的一个输入信号),基本定时器的触发输出功能专门用于ADC/DAC转换触发启动
2.3 计数器
基本定时器的时钟源是84MHz,定时器实现定时功能实际上是一个计数过程,共涉及到三个寄存器:计数器寄存器(TIMx_CNT)、预分频寄存器(TIMx_PSC)、自动重装载寄存器(TIMx_ARR),这三个寄存器都是16位有效,可设置的值为0~65535
预分频器PSC有一个输入时钟CK_PSC和一个输出时钟CK_CNT,输入时钟来源于控制器部分,即CK_INT,通过设置预分频的数值,可以得到不同的CK_CNT = CK_PSC/(PSC[15:0]+1)
TIMx_PSC控制寄存器具有缓冲(影子寄存器),可以在运行过程中改变其数值,新的预分频数值将在下一个更新事件时起作用
基本定时器只能递增(向上计数),在定时器使能(CAN置1),计数器COUNTER根据CK_CNT频率向上计数,即每来一个CK_CNT脉冲,TIMx_CNT值就加1,当TIMx_CNT值与TIMx_ARR的设定值相等时就自动生成更新事件(也可产生DMA请求、产生中断信号或触发DAC同步电路),且TIMx_CNT自动清零,然后重新开始计数,不断重复上述过程;因此只需要设定TIMx_PSC和TIMx_ARR两个寄存器的值就可以控制事件生成时间,对应的就是程序中定时器预分频设置和定时器周期