OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2837|回复: 8

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

[复制链接]

22

主题

79

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
246
金钱
246
注册时间
2018-8-1
在线时间
43 小时
发表于 2019-3-17 10:48:16 | 显示全部楼层 |阅读模式
20金钱
[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吗?。。。

最佳答案

查看完整内容[请看2#楼]

TIM_TimeBaseStructure.TIM_Prescaler= 35; 计数周期=72m/36=2m 一个数=1/2m s 1000个=1/2000s=500us翻转一次 周期 1ms 1k?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2019-3-17 10:48:17 | 显示全部楼层
本帖最后由 nashui_sx 于 2019-3-17 11:16 编辑

TIM_TimeBaseStructure.TIM_Prescaler= 35;
计数周期=72m/36=2m
一个数=1/2m s  1000个=1/2000s=500us翻转一次   周期 1ms  1k?
回复

使用道具 举报

22

主题

79

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
246
金钱
246
注册时间
2018-8-1
在线时间
43 小时
 楼主| 发表于 2019-3-17 13:27:51 | 显示全部楼层
nashui_sx 发表于 2019-3-17 10:48
TIM_TimeBaseStructure.TIM_Prescaler= 35;
计数周期=72m/36=2m
一个数=1/2m s  1000个=1/2000s=500us翻 ...

恩,但是tim3是挂在apb1上的还是apb2上的?那样不是应该36/36吗
捕获.PNG
回复

使用道具 举报

22

主题

79

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
246
金钱
246
注册时间
2018-8-1
在线时间
43 小时
 楼主| 发表于 2019-3-17 13:30:14 | 显示全部楼层
本帖最后由 Gwvfbukn 于 2019-3-17 13:32 编辑

应该是挂在apb1上面吧
捕获.PNG
回复

使用道具 举报

22

主题

79

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
246
金钱
246
注册时间
2018-8-1
在线时间
43 小时
 楼主| 发表于 2019-3-17 13:34:08 | 显示全部楼层
nashui_sx 发表于 2019-3-17 10:48
TIM_TimeBaseStructure.TIM_Prescaler= 35;
计数周期=72m/36=2m
一个数=1/2m s  1000个=1/2000s=500us翻 ...

是不是pdf有点问题啊,我还有本书,是挂在apb2上面。。
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2019-3-17 13:38:28 | 显示全部楼层
Gwvfbukn 发表于 2019-3-17 13:30
应该是挂在apb1上面吧

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

记得手册有一句话   如果APB1预分频系数=1,则频率不变,否则频率*2
回复

使用道具 举报

22

主题

79

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
246
金钱
246
注册时间
2018-8-1
在线时间
43 小时
 楼主| 发表于 2019-3-17 13:45:51 | 显示全部楼层
nashui_sx 发表于 2019-3-17 13:38
//TIM1、TIM8的时钟为APB2(72M)时钟即72M,TIM2~TIM7的时钟为APB1(36M)的时钟的两倍即72M   TIM1~TIM8都 ...

首先pdf上的图没问题是吧?我有本《基于stm32的嵌入式系统原理与设计》这本书的图上tim3直接挂在apb2上,和PDF的apb1、apb2正好相反了。你说这句话我好像也在哪见过,我找找。。
回复

使用道具 举报

22

主题

79

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
246
金钱
246
注册时间
2018-8-1
在线时间
43 小时
 楼主| 发表于 2019-3-17 13:53:58 | 显示全部楼层
Gwvfbukn 发表于 2019-3-17 13:45
首先pdf上的图没问题是吧?我有本《基于stm32的嵌入式系统原理与设计》这本书的图上tim3直接挂在apb2上, ...

搜了一下,这个之前有人提问,定时器默认都是72mhz的了
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2019-3-17 14:54:03 | 显示全部楼层
Gwvfbukn 发表于 2019-3-17 13:53
搜了一下,这个之前有人提问,定时器默认都是72mhz的了

f1是的 不过f4不是
f4//TIM1、TIM8~TIM11的时钟为APB2(84M)时钟的两倍即168M,TIM2~TIM7、TIM12~TIM14的时钟为APB1(48M)的时钟的两倍即84M
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-24 06:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表