完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
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 这个和公式好像有点不太一样呀 |
|
相关推荐
19个回答
|
|
|
请问这个 sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;是什么意思呀?
定时器不是外设吗? 时钟源来自APB1 |
|
|
|
|
|
|
|
|
|
|
|
自顶一下
|
|
|
|
|
|
TIM_CLOCKSOURCE_INTERNAL == 内部时钟 ?
|
|
|
|
|
|
|
|
|
|
|
|
手册上面有公式
|
|
|
|
|
|
3.5 的库用 RCC_GetClocksFreq可以得到各总线的时钟。HAL没用过,不清楚有没有类似的函数。
|
|
|
|
|
|
|
|
|
|
|
|
我不明白,我来顶下楼主
|
|
|
|
|
|
不改的话 用的是内部时钟吧 APB1 和2 都是16M吧 |
|
|
|
|
|
手册上面有公式
|
|
|
|
|
|
1、每个总线的时钟频率哪里看呀?
在对应系列的参考手册“RCC”章节的“时钟树”可以看到。 2.我在网上看到一个溢出公式 Tout(溢出时间)=(ARR+1)(PSC+1)/Tclk 这个公式在哪儿看到的呀? 这个公式的分两块来理解:(ARR+1)(PSC+1)可以从寄存器中找到;关键点:定时器在2分频以后,其 Fclk会2xFclk_int。 |
|
|
|
|
|
mark。问题问的比较用心。
|
|
|
|
|
|
你用CUBE生成一个简单的项目,从项目文件中一项一项的看,你就会明白了。
|
|
|
|
|
|
公式是没有错的,应该是楼主计算时参数错了
|
|
|
|
|
|
没错! 还是需要仔细看手册和应用指南 |
|
|
|
|
|
时钟树在官网搜你用的器件上面就有datasheet!记住是器件的datasheet而不是参考手册(不是很多翻译成中文几千页那个)。那里有每类器件的详细时钟树。定时的配置跟系统时钟和分频系数有关的,这个具体到公式在哪可以在参考手册里面能找到!这个其实网上说明应该有很多,有示波器可以配置完看一下,多改改相关参数体会下
|
|
|
|
|
|
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 |
|
|
|
|
|
在CubeMX上配置相应的频率值就可以了,分频会自动配置;如果要看总线上挂的外部设备查看芯片手册的系统框图
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
169 浏览 0 评论
STM32F405驱动DS1302时钟模块,输出时间错乱该怎么排查?
4077 浏览 2 评论
stm32f405rgt6驱动DS1302ZN出现时间错乱问题
2880 浏览 1 评论
stm32用fsmc读取ad7606采集数据,数据不变,只有开发版复位才更新数据
2564 浏览 0 评论
2690 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-8 14:08 , Processed in 1.260465 second(s), Total 109, Slave 92 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
8986