设置等待时间,到达后则执行指定的操作的硬件

具有基本的定时功能,也有PWM输出(灯光的亮度控制、电机的转速)、脉冲捕获功能(红外捕捉)
2个高级定时器、10个通用定时器和2个基本定时器
高级定时器(TIM1 和 TIM8 ),挂载到APB2
具有16位定时器功能,也具有PWM输出高级控制功能
通用定时器(TIM2 到 TIM5),挂载到APB1
具有16位定时器功能,也具有PWM输出控制功能
通用定时器(TIM9 到 TIM14 ),挂载到APB1和APB2
具有16位定时器功能,也具有PWM输出控制功能
基本定时器:(TIM6 和 TIM7),挂载到APB1
具有16位定时器功能
TIM是TIMER单词的缩写
通用定时器与高级定时器(CH表示输出通道)

《STM32F4XX中文参考手册.pdf》108页
STM32F405xx/07xx和STM32F415xx/17xx的定时器时钟频率由硬件自动设置。分为两种情况:
关于APB1与APB2预分频值得说明在system_stm32f4xx.c文件的头部,详细描述如下

关于APB1和APB2预分频值设置在system_stm32f4xx.c文件,详细代码如下:


//计数值 84000000/8400 = 10000hz/2,决定定时时间1/2秒
TIM_TimeBaseStructure.TIM_Period = (10000/2)-1;
TIM_TimeBaseStructure.TIM_Prescaler = 8400-1; //预分频值 8400-1 + 1 = 8400
//向上计数的方法
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
8400
//向上计数的方法
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
使能定时器硬件时钟

定时器初始化

配置定时器

定时器使能

1.使能定时器硬件时钟
2.定时器的硬件配置
3.配置定时器分频值、计数值等
4.使能定时器更新定时器的中断触发
5.配置定时器中断nvic优先级
6.定时器中断服务函数
void tim3_init(void)
{
//使能TIM3的硬件时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
//TIM3的硬件配置
//配置定时器3分频值、技术值等等
TIM_TimeBaseStructure.TIM_Period = (10000/2)-1; //计数值 84000000/8400 = 10000hz/2,决定定时时间1/2秒
TIM_TimeBaseStructure.TIM_Prescaler = 8400-1; //预分频值 8400-1 + 1 = 8400
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数的方法
// TIM_TimeBaseStructure.TIM_ClockDivision = 0; //在F407是不支持
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
//配置定时器3中断的触发方式:时间更新
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
//开启TIM3的NVIC中断
NVIC_InitStruct.NVIC_IRQChannel = TIM3_IRQn; //定时器3的请求通道
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0x02; //响应优先级
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; //使能该通道中断
NVIC_Init(&NVIC_InitStruct);
//使能定时器3工作
TIM_Cmd(TIM3, ENABLE);
}
//定时器3中断服务函数
void TIM3_IRQHandler(void)
{
//判断TIM3是否有中断请求
if(TIM_GetITStatus(TIM3, TIM_IT_Update) == SET)
{
PFout(9) ^= 1;
//清空标志位,告诉CPU,已经完成当前中断处理,可以响应新的中断请求
TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
}
}