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

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

[复制链接]
beary 提问时间:2015-11-22 11:20 /
阅读主题, 点击返回1楼
收藏 3 评论19 发布时间:2015-11-22 11:20
19个回答
霹雳之火 回答时间: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
手册上面有公式
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

查看全部评分

ataudio 回答时间:2017-1-16 10:39:01
mark。问题问的比较用心。

评分

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

查看全部评分

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

评分

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

查看全部评分

zbber 回答时间:2017-1-16 11:51:28
公式是没有错的,应该是楼主计算时参数错了
中山无雪 回答时间:2017-1-16 13:05:04
五哥1 发表于 2017-1-16 11:07
你用CUBE生成一个简单的项目,从项目文件中一项一项的看,你就会明白了。

没错!

还是需要仔细看手册和应用指南

评分

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

查看全部评分

df_flying 回答时间:2017-1-16 16:17:12
时钟树在官网搜你用的器件上面就有datasheet!记住是器件的datasheet而不是参考手册(不是很多翻译成中文几千页那个)。那里有每类器件的详细时钟树。定时的配置跟系统时钟和分频系数有关的,这个具体到公式在哪可以在参考手册里面能找到!这个其实网上说明应该有很多,有示波器可以配置完看一下,多改改相关参数体会下

评分

参与人数 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

查看全部评分

斜阳__ 回答时间:2017-1-17 09:54:22
在CubeMX上配置相应的频率值就可以了,分频会自动配置;如果要看总线上挂的外部设备查看芯片手册的系统框图

评分

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

查看全部评分

12

所属标签

相似问题

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