STM32的基本定时器配置
stm32f103的定时器种类
1.stm32f103只支持一下11个定时器
1.窗口看门狗定时器
2.独立看门狗定时器
3.TIM 基本定时器(TIM6,TIM7)
4.TIM 通用定时器(TIM2~TIM5)
5.TIM 高级定时器(TIM1,TIM8)
6.SysTick 系统定时器
基本定时器TIM6配置的代码如下:
void tim6_init(uint16_t period, uint16_t prescaler)
{
// 打开时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
// 初始化结构体为默认值
// void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
TIM_TimeBaseStructInit(&TIM_TimeBaseInitStructure);
// 配置 TIM6 时基单元
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; // 基本定时器可以不配置
//TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; // 只支持向上计数,可以不配置
TIM_TimeBaseInitStructure.TIM_Period = period;
TIM_TimeBaseInitStructure.TIM_Prescaler = prescaler;
// TIM_TimeBaseInitStructure.TIM_RepetitionCounter = ; // 只有 TIM1, TIM8 使用
// void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);?
TIM_TimeBaseInit(TIM6, &TIM_TimeBaseInitStructure);
// 配置 TIM6 的 NVIC
NVIC_InitStructure.NVIC_IRQChannel = TIM6_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
NVIC_Init(&NVIC_InitStructure);
// void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);
TIM_ARRPreloadConfig(TIM6, ENABLE);
// TIM6 中断配置
// void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);
TIM_ITConfig(TIM6, TIM_IT_Update, DISABLE); // 禁用更新中断,在需要时才打开
// void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);
TIM_Cmd(TIM6, DISABLE); // 停止定时器
}
// 启动定时器计时
void tim6_start(uint16_t arr)
{
TIM6->ARR = arr; // 设置重装载值
TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE);
TIM_Cmd(TIM6, ENABLE);
}