NVIC_InitTypeDef NVIC_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
// TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能 TIMx 外设
//设置住定时器TIM3
TIM_DeInit(TIM3);
TIM_TimeBaseStructure.TIM_Period = pwm_period; //设置自动重装载周期值
TIM_TimeBaseStructure.TIM_Prescaler =TMRNCLK/frequency/pwm_period-1; //设置预分频值 不分频
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim 这里是 32M
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //初始化 TIMx
TIM_ClearFlag(TIM3, TIM_FLAG_Update);
TIM_ARRPreloadConfig(TIM3, ENABLE); //使能 TIMx 在 ARR 上的预装载寄存器
//TIM_SelectMasterSlaveMode(TIM3,TIM_MasterSlaveMode_Enable); //既做主模式也作为slave 模式 一般用于两个计时器的同步
TIM_SelectOutputTrigger(TIM3,TIM_TRGOSource_Update); //以TIM3的溢出 作为信号
//设置从定时器TIM2
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //使能 TIMx 外设
TIM_DeInit(TIM2);
TIM_TimeBaseStructure.TIM_Period = 1000; //设置自动重装载周期值
TIM_TimeBaseStructure.TIM_Prescaler =0; //设置预分频值 不分频
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //初始化 TIMx
TIM_ClearFlag(TIM2, TIM_FLAG_Update);
TIM_ARRPreloadConfig(TIM2, ENABLE); //使能 TIMx 在 ARR 上的预装载寄存器
TIM_SelectInputTrigger(TIM2, TIM_TS_ITR2); //选择tim3的trgo输入
TIM_SelectSlaveMode(TIM2,TIM_SlaveMode_External1); //选择trgi作为时钟输入
if(enIrq)
{
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel; /*溢出中断*/
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); /* 使能中断 */
}
TIM_Cmd(TIM2, ENABLE); //使能 TIM3
TIM_Cmd(TIM3, ENABLE); //使能 TIM3
stm32 定时器串联
最新推荐文章于 2025-01-20 20:36:35 发布