stm32f1 定时器周期计算问题。。。

2019-07-21 04:17发布

[mw_shl_code=c,true]        // 自动重装载寄存器的值,累计TIM_Period+1个频率后产生一个更新或者中断  即周期
        TIM_TimeBaseStructure.TIM_Period = 65535;                //周期
        TIM_TimeBaseStructure.TIM_Prescaler= 35;// 时钟预分频数
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;                //时钟分割 默认0,这里忽略即可
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;                //向上计数
        TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;                //高级定时器选项,普通定时器忽略即可       
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);// 初始化定时器3

        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle; //选择定时器模式为翻转电平模式
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
        TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值
        TIM_OCInitStructure.TIM_OCPolarity = TIM_CounterMode_Up; //输出极性:TIM输出比较极性高
        TIM_OC3Init(TIM3, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx
        TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Disable);//失能TIMx在CCR3上的预装载寄存器
        TIM_Cmd(TIM3, ENABLE);                            //使能TIM3
  TIM_ITConfig(TIM3, TIM_IT_CC3, ENABLE);

void TIM3_IRQHandler(void)               
{
         u16 Capture1;
   if(TIM_GetITStatus(TIM3,TIM_IT_CC3)!=RESET)
         {
          TIM_ClearITPendingBit(TIM3, TIM_IT_CC3);//清除TIMx的中断待处理位
    Capture1 = TIM_GetCapture3(TIM3);
    TIM_SetCompare3(TIM3, Capture1 + 999);//设置TIMx自动重装载寄存器值
         }
}
[/mw_shl_code]
产生PWM为啥是1khz而不是500hz

999不是1000us翻转一次吗,那一个周期不是2000us吗?。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。