你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

新手,问2个关于定时器的问题,谢谢

[复制链接]
beary 提问时间:2015-11-22 11:20 /
  • 每个总线的时钟频率哪里看呀? 我在手册中全局搜索84m都没有搜索到,比如APB1之类的

2.

我在网上看到一个溢出公式
Tout(溢出时间)=(ARR+1)(PSC+1)/Tclk
这个公式在哪儿看到的呀?
我写代码打时候初始化如下:

  TIM_ClockConfigTypeDef sClockSourceConfig;
  TIM_MasterConfigTypeDef sMasterConfig;

  htim3.Instance = TIM3;
  htim3.Init.Prescaler = 4799;
  htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim3.Init.Period = 9999;
  htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  HAL_TIM_Base_Init(&htim3);

  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig);

  sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig);

中断事件大概是4.80017820

这个和公式好像有点不太一样呀                                                                                                                       
收藏 3 评论19 发布时间:2015-11-22 11:20

举报

19个回答
Dylan疾风闪电 回答时间:2017-1-16 10:26:27
1、每个总线的时钟频率哪里看呀?
在对应系列的参考手册“RCC”章节的“时钟树”可以看到。
新建位图图像 (3).jpg

2.我在网上看到一个溢出公式
Tout(溢出时间)=(ARR+1)(PSC+1)/Tclk
这个公式在哪儿看到的呀?
这个公式的分两块来理解:(ARR+1)(PSC+1)可以从寄存器中找到;关键点:定时器在2分频以后,其 Fclk会2xFclk_int。
新建位图图像 (4).jpg

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

酱哒哒 回答时间:2017-1-16 21:10:00
1.    每个总线的时钟,你不是已经在cube的时钟树里可以查看了么?    84M是自己配出来的,你的时钟树里面用的时钟是内部高速时钟HSI
    在你那图片里面,HSI向右走,进入一个叫System clock MUX(这儿选择系统时钟来源),你选的是HSI,再往后面是预分频系数,所以最大就顶多是16M。如果你要配置更大时钟,System clock MUX处就不能选HSI,选择PLLCLK,然后从那一条时钟更改大小。(具体更改,自己调调就会了)
    cube看时钟树还是很清晰的,比库函数好多了。

2.
  htim3.Instance = TIM3;
  htim3.Init.Prescaler = 4799;  //预分频系数
  htim3.Init.CounterMode = TIM_COUNTERMODE_UP;//计数模式,向上装寄存器值
  htim3.Init.Period = 9999;//自动装的寄存器值
  htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;//1倍频
  HAL_TIM_Base_Init(&htim3);

  从你给的cubemx时钟树可以看出TIM挂载的时钟频率16MHz,然后TIM_CLOCKDIVISION_DIV1,也就是1倍频,所以还是16M
  htim3.Init.Prescaler = 4799;//这个叫预分频系数,就是把这16M分成(Prescaler +1)份,即33 3333.33333Hz
   htim3.Init.Period = 9999;这个东西是你向上装载TIM寄存器的终值,你选的是向上装载,表示从0一直装到9999,然后触发中断。
  每装载1个数,所耗时间就是由上面预分频系数得来的33 3333.3333Hz,差不多就是一次1/33  3333.3333=0.0003s
  然后定时期间,装载了10000个值,所以就该是0.0003*10000=3S。
  你定时的时间是3S

  你说的公式Tout(溢出时间)=(ARR+1)(PSC+1)/Tclk
  在向上计数时,一般写成:Tout(溢出时间)=(Prescaler +1)(Period +1)/Tclk。(注意计数是向上还是向下计数)






3.
TIM_CLOCKSOURCE_INTERNAL 这是TIM内部时钟
TIM3时钟挂载在APB1线上,但是问题二中,我已经提到了有个倍频系数TIM_CLOCKDIVISION_DIV1,你看你给的时钟图,也可以看到APB1在给到TIM时钟之前有个可以框框里面写起X1,这就是倍频系数,你改成x2,那就是32M了。这个倍频后的时钟的名字就TIM_CLOCKSOURCE_INTERNAL

评分

参与人数 1ST金币 +5 收起 理由
zero99 + 5

查看全部评分

beary 回答时间:2015-11-22 11:25:55
请问这个   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;是什么意思呀?
定时器不是外设吗? 时钟源来自APB1
beary 回答时间:2015-11-22 20:51:08
QQ图片20151122204750.png
这样什么都不改是不是APB1和APB2只有16MHz?
beary 回答时间:2015-11-23 09:17:40
自顶一下
小小超 回答时间:2017-1-16 08:17:41
TIM_CLOCKSOURCE_INTERNAL  == 内部时钟 ?

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

无薪税绵 回答时间:2017-1-16 08:25:42
公式是没有错的,应该是楼主计算时参数错了。
楼主可能参考一下:http://blog.csdn.net/snow416/article/details/6458765

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

z258121131 回答时间:2017-1-16 09:17:06
手册上面有公式

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

codysafe 回答时间:2017-1-16 09:20:19
3.5 的库用 RCC_GetClocksFreq可以得到各总线的时钟。HAL没用过,不清楚有没有类似的函数。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

codysafe 回答时间:2017-1-16 09:22:32
beary 发表于 2015-11-22 20:51
这样什么都不改是不是APB1和APB2只有16MHz?

不改的话,只有16M
lulugl 回答时间:2017-1-16 09:23:51
我不明白,我来顶下楼主
霹雳之火 回答时间:2017-1-16 09:26:34
beary 发表于 2015-11-22 20:51
这样什么都不改是不是APB1和APB2只有16MHz?

不改的话 用的是内部时钟吧 APB1 和2 都是16M吧

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

cldym 回答时间:2017-1-16 09:56:20
手册上面有公式
ataudio 回答时间:2017-1-16 10:39:01
mark。问题问的比较用心。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

五哥1 回答时间:2017-1-16 11:07:55
你用CUBE生成一个简单的项目,从项目文件中一项一项的看,你就会明白了。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版