一. TIMER配置结构体
1. TIM_TimeBaseInitTypeDef 结构体
字段 | 解释 |
---|
TIM_Prescale | 设置预分频系数 |
TIM_Period | 设置重载计数周期值 |
TIM_CounterMode | 设置计数方式 |
TIM_ClockDivision | 设置分频模式 |
| |
2. 计数方式TIM_CounterMode
字段 | 解释 |
---|
TIM_CounterMode_UP | 向上计数 |
TIM_CounterMode_Down | 向下计数 |
3.中断服务函数
字段 | 解释 |
---|
TIM_GetITStatus(定时器,TIM_IT_Update) | 判断中断发生 |
TIM_ClearITPendingBit(定时器,TIM_IT_Update) | 清除中断标志位 |
二. 定时器配置
1.开启定时器时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIMx,ENABLE);
2. 配置定时器结构体
操作 | 函数/结构体 |
---|
定义定时器结构体 | TIM_TimeBaseInitTypeDef |
配置自动重载值 | TIM_Period |
配置预分频系数 | TIM_Prescaler |
配置计数模式 | TIM_CounterMode |
配置分频模式 | TIM_ClockDivision |
配置定时器结构体产生 | TIM_TimeBaseInit(定时器,结构体地址); |
定时器更新中断 | TIM_ITConfig(定时器,TIM_IT_Update,ENABLE) |
定时器使能 | TIM_Cmd(定时器,ENABLE); |
| |
3. 配置NVIC结构体
详解NVIC笔记
4. 编写中断服务函数
5. 例
定时器3初始化函数
void timer_init(int Period,int Prescaler)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period = Period;
TIM_TimeBaseStructure.TIM_Prescaler = Prescaler;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
TIM_Cmd(TIM3,ENABLE);
}
void TIM3_IRQHandler(void)
{
if(TIM_GetStatus(TIM3,TIM_IT_Update) != RESET )
{
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
}
}