1. STM32上定时器的分类
前面学习了STM32系统定时器SysTick,它的主要作用是为OS提供系统滴答,当然我们也可以利用它实现了精准延时。在STM32单片机中,除了属于CM3内核中的一个外设的系统定时器外,还有几个属于片上外设的定时器:基本定时器(TIM6和TIM7)、通用定时器(TIM2/3/4/5)和高级定时器(TIM1和TIM8)。强调,这里指的是除互联型的STM32F1系列单片机。
它们各自具有的功能特点可以详见《STM32中文参考手册_V10.pdf》-P298,这里简单描述:
(1)基本定时器(TIM6和TIM7):16位的只能向上计数的定时器,只能实现定时,没有外部IO通道与它关联。
(2)通用定时器(TIM2/3/4/5):16位的可向上或者向下、向上/向下的定时器,除了能实现定时功能,还可以实现输入捕获、输出比较功能(PWM),每个定时器有4个外部IO通道与它关联。
(3)高级定时器(TIM1和TIM8):16位的可向上或者向下、向上/向下的定时器,除了能实现定时功能,还可以实现输入捕获、输出比较功能(PWM)、输出互补等专用功能,每个定时器有4个外部IO通道与它关联。
今天先学习基本定时器。
个人在学习定时器时的想法:定时超时能产生中断信号,本能反应,它涉及到中断编程就有可能涉及到设置NVIC(中断源优先级相关)和EXTI(外部中断/事件线EXTI0/1…/15相关),在前面实现SysTick定时编程中,由于SysTick并非片上外设所以并不需要设置NVIC,而STM32中非SysTick的定时器都属于片上外设,所以自然是要设置NVIC;EXTI是设置外部中断/事件线的,它必须关联于某个对应的IO引脚,在SysTick定时编程中不需要设置,在这里同样不需要设置。
2. 基本定时器的时基
定时器的基本功能是定时,定时的核心则是时基,看基本定时器的框图,
2.1 时钟源CK_INT
定时器的学习,从时钟源说起,也就是图中的TIMxCLK。在时钟树中,
定时器2~7的时钟源是这样确定的:如果PCLK1的预分频系数为1,则它们的时钟源为PCLK1,否则它们的时钟源为PCLK1的2倍。PCLK1在前面的配置中,已经将APB1的预分频系数设置为2,即PCLK1为36MHz,所以定时器2~7的时钟源 = TIMxCLK = 72MHz。
2.2 计数器时钟CK_CNT
TIMxCLK经过PSC预分频器之后为CK_INT,作为CNT计数器的计数时钟。PSC可以对定时器时钟TIMxCLK进行1~65535之间任何一个数进行分频,CK_CNT = TIMxCLK / (PSC + 1)。