一、定时器基本介绍
二、普通定时器详细介绍TIM2-TIM5
2.1 时钟来源
计数器时钟可以由下列时钟源提供:
·内部时钟(CK_INT)
·外部时钟模式1:外部输入脚(TIx)
·外部时钟模式2:外部触发输入(ETR)
·内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时器Timer1而作为另一个定时器Timer2的预分频器。
由于今天的学习是最基本的定时功能,所以采用内部时钟。TIM2-TIM5的时钟不是直接来自于APB1,而是来自于输入为APB1的一个倍频器。这个倍频器的作用是:当APB1的预分频系数为1时,这个倍频器不起作用,定时器的时钟频率等于APB1的频率(36MHZ);
当APB1的预分频系数为其他数值时(即预分频系数为2、4、8或16),这个倍频器起作用,定时器的时钟频率等于APB1的频率的2倍。
{
假如APB1预分频为2(变成36MHZ),则定时器TIM2-5的时钟倍频器起作用,将变成2倍的APB1(2x36MHZ)将为72MHZ给定时器提供时钟脉冲。 一般APB1和APB2的RCC时钟配置放在初始化函数中例如下面的void RCC_Configuration(void)配置函数所示,将APB1进行2分频,导致TIM2时钟变为72MHZ输入。
如果是1分频则会是36MHZ输入,如果4分频:CKINT=72MHZ/4x2=36MHZ; 8分频:CKINT=72MHZ/8x2=18MHZ;16分频:CKINT=72MHZ/16x2=9MHZ
}
1 //系统时钟初始化配置
2 void RCC_Configuration(void)
3 {
4 //定义错误状态变量
5 ErrorStatus HSEStartUpStatus;
6 //将RCC寄存器重新设置为默认值
7 RCC_DeInit();
8 //打开外部高速时钟晶振
9 RCC_HSEConfig(RCC_HSE_ON);
10 //等待外部高速时钟晶振工作
11 HSEStartUpStatus = RCC_WaitForHSEStartUp();
12 if(HSEStartUpStatus == SUCCESS)
13 {
14 //设置AHB时钟(HCLK)为系统时钟
15 RCC_HCLKConfig(RCC_SYSCLK_Div1);
16 //设置高速AHB时钟(APB2)为HCLK时钟
17 RCC_PCLK2Config(RCC_HCLK_Div1);
18 //设置低速AHB时钟(APB1)为HCLK的2分频(TIM2-TIM5输入TIMxCLK频率将为72MHZ/2x2=72MHZ输入)
19 RCC_PCLK1Config(RCC_HCLK_Div2);
20 //设置FLASH代码延时
21 FLASH_SetLatency(FLASH_Latency_2);
22 //使能预取指缓存
23 FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
24 //设置PLL时钟,为HSE的9倍频 8MHz * 9 = 72MHz
25 RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
26 //使能PLL
27