- 每个总线的时钟频率哪里看呀? 我在手册中全局搜索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
这个和公式好像有点不太一样呀
没错!
还是需要仔细看手册和应用指南
在你那图片里面,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
一周热门 更多>