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吗?。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
nashui_sx
1楼-- · 2019-07-21 09:07
本帖最后由 nashui_sx 于 2019-3-17 11:16 编辑

TIM_TimeBaseStructure.TIM_Prescaler= 35;
计数周期=72m/36=2m
一个数=1/2m s  1000个=1/2000s=500us翻转一次   周期 1ms  1k?
Gwvfbukn
2楼-- · 2019-07-21 09:49
 精彩回答 2  元偷偷看……
Gwvfbukn
3楼-- · 2019-07-21 15:04
本帖最后由 Gwvfbukn 于 2019-3-17 13:32 编辑

应该是挂在apb1上面吧
Gwvfbukn
4楼-- · 2019-07-21 19:36
nashui_sx 发表于 2019-3-17 10:48
TIM_TimeBaseStructure.TIM_Prescaler= 35;
计数周期=72m/36=2m
一个数=1/2m s  1000个=1/2000s=500us翻 ...

是不是pdf有点问题啊,我还有本书,是挂在apb2上面。。
nashui_sx
5楼-- · 2019-07-22 01:08
Gwvfbukn 发表于 2019-3-17 13:30
应该是挂在apb1上面吧

//TIM1、TIM8的时钟为APB2(72M)时钟即72M,TIM2~TIM7的时钟为APB1(36M)的时钟的两倍即72M   TIM1~TIM8都是72M

记得手册有一句话   如果APB1预分频系数=1,则频率不变,否则频率*2
Gwvfbukn
6楼-- · 2019-07-22 06:40
 精彩回答 2  元偷偷看……

一周热门 更多>