分享
发布时间:2017-10-18 15:56 电子爱好者网

stm32定时器时刻核算

分享

                                              例如:我们以51单片机举例,假定单片机调配12MHz的晶振,由于51单片机是12分频(即1个机器周期有12个时钟周期),则单片机的最小守时时刻为

                                              1 2 MHz / 2 = 1 MHz

                                              Tt = 1 / 1 MHz = 1 us

                                              最小守时时刻T=1/1MHz=1us

                                              51单片机守时器:

                                              方法0 13位最大守时时刻距离2^13=8.192ms

                                              方法1 16位最大守时时刻距离2^16=65.536ms

                                              方法2 8位最大守时时刻距离2^8=256us

                                              由此我们知道关于一个守时器而言要做到准确守时需求重视2个内容

                                              1、分频器(分频比)

                                              2、守时计数器的值

                                              stm32守时器时刻核算

                                              STM32守时器的时钟 CK_CNT标明守时器作业频率

                                              TIMX_PSC标明分频系数

                                              则守时器的作业频率核算公式为

                                              CK_CNT=守时器时钟/( TIMx_PSC+1)

                                              由此我们可得到STM32单片机1个时钟周期

                                              为:T=1/ CK_CNT

                                              例如一般守时器模块的时钟为72MH2,分频比位7199,那么我们想要得到一个1秒钟的守时,守时计数器的值需求设定为 》 TImx arr = 1 0 0 0 0

                                              由于72000000/7200=10KHz时钟周期T=1/10KHz=100us100us&TImes;10000=1S

                                              定论:分频比7199守时计数器的值10000

                                              留意两点:

                                              (1)TIMx(1-8),在库设置默许的情况下,都是72M的时钟;

                                              (2)TIM_TimeBaseStructure.TIM_RepetitionCounter=0;

                                              是重复计数,就是重复溢出多少次才给你来一个溢出中止,

                                              它对应的寄存器叫TIM1 RCR.

                                              如果这个值不装备,上电的时分寄存器值可能随机的,正本1秒中止一次,可能变成N 秒中止一次,让核算量变大。

                                              stm32守时器时刻核算 体系时钟是72Mhz,TIM1 是由PCLK2 (72MHz)得到,TIM2-7是由 PCLK1 得到

                                              关键是设定 时钟预分频数,主动重装载寄存器周期的值

                                              /*每1秒发作一次更新事情(进入中止效劳程序)。RCC_Configuration()的SystemInit()的

                                              RCC-》CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2标明TIM3CLK为72MHz。因而,每次进入中

                                              断效劳程序距离时刻为

                                              ((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+7199)/72M)*(1+9999)=1秒 */

                                              守时器的根本设置 1、 TIM_TimeBaseStructure.TIM_Prescaler = 7199;//时钟预分频数 例如 :时钟频率=72/(时钟预分频+1)

                                              2、TIM_TimeBaseStructure.TIM_Period = 9999; // 主动重装载寄存器周期的值(守时时刻) 累计 0xFFFF个频率后产生个更新或许中止(也是说守时时刻到)

                                              3、 TIM_TimeBaseStructure.TIM_CounterMode = TIM1_CounterMode_Up; //守时器形式 向上计数

                                              4、 TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //时刻切割值

                                              5、 TIM_TimeBaseInit(TIM2, TIM_TimeBaseStructure);//初始化守时器2

                                              6、 TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //翻开中止 溢出中止

                                              7、 TIM_Cmd(TIM2, ENABLE);//翻开守时器

                                              或许:

                                              TIM_TimeBaseStructure.TIM_Prescaler = 35999;//分频35999 72M/

                                              (35999+1)/2=1Hz 1秒中止溢出一次

                                              TIM_TimeBaseStructure.TIM_Period = 2000; //计数值2000

                                              ((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+35999)/72M)*(1+2000)=1秒 */

                                                                责任编辑:fatee

                                                                (sinaere = window.sinaere || []).push({});
                                                                0