精华内容
下载资源
问答
  • 本文主要讲了一下关于stm32定时器时间计算方法。
  • stm32 定时器 时间计算方法

    千次阅读 2019-01-16 15:51:43
    stm32 定时器 时间计算方法 和时钟分隔值解释 参考 (https://wenku.baidu.com/view/e3bdfb7601f69e31433294c4.html) 定时器 计算公式 Tout=((ARR+1)*(PSC+1))/Tclk Tout :TIM溢出时间 单位 us ARR : 自动重载值 ...

    stm32 定时器 时间计算方法 和时钟分隔值解释

    参考
    (https://wenku.baidu.com/view/e3bdfb7601f69e31433294c4.html)

    定时器 计算公式

     Tout=((ARR+1)*(PSC+1))/Tclk
    

    Tout :TIM溢出时间 单位 us
    ARR : 自动重载值
    PSC : 预分频系数

    tclk : TIM 输入时钟频率 (MHZ)
    举例 :

    	TIM_TimeBaseStructure.TIM_ClockDivision  =  TIM_CKD_DIV1; 
    	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    	TIM_TimeBaseStructure.TIM_Period = 4999; 		//自动装载值
    	TIM_TimeBaseStructure.TIM_Prescaler =7199;    //预分频值
    

    Tout = (4999+1)*(7199+1)/72 = 500000
    = 500 ms

    时钟分隔值解释

    引用:
    http://bbs.21ic.com/icview-135508-1-1.html

    	STM32的定时器输入通道都有一个滤波单元,分别位于每个输入通路上
    (下图中的黄色框)和外部触发输入通路上(下图中的兰色框),它们的作用
    是滤除输入信号上的高频干扰,具体操作原理如下:
       在TIMx_CR1中的CKD[1:0]可以由用户设置对输入信号的采样频率基准,
       有三种选择:
        1)采样频率基准fDTS=定时器输入频率fCK_INT
        2)采样频率基准fDTS=定时器输入频率fCK_INT/2
        3)采样频率基准fDTS=定时器输入频率fCK_INT/4
      然后使用上述频率作为基准对输入信号进行采样,当连续采样到N次个有
      效电平时,认为一次有效的输入电平。
    
        实际的采样频率和采样次数可以由用户程序根据需要选择;外部触发输入
        通道的滤波参数在从模式控制寄存器(TIMx_SMCR)的ETF[3:0]中设置;每
        个输入通道的滤波参数在捕获/比较模式寄存器1(TIMx_CCMR1)或捕获/比
        较模式寄存器2(TIMx_CCMR2)的IC1F[3:0]、IC2F[3:0]、IC3F[3:0]和
        IC4F[3:0]中设置。
    
    例如:当fCK_INT=72MHz时,选择fDTS=fCK_INT/2=36MHz,采样频率
    fSAMPLING=fDTS/2=18MHz且N=6,则频率高于3MHz的信号将被这个滤
    波器滤除,有效地屏蔽了高于3MHz的干扰。
    
    展开全文
  • STM32定时器的工作原理STM32之所以能够实现定时,是单片机内部在计数脉冲(来自晶振)T=1/F (F为频率)例如:我们以51单片机举例,假设单片机搭配12MHz的晶振,由于51单片机是12分频(即1个机器周期有12个时钟周期),则...

    STM32定时器的工作原理

    STM32之所以能够实现定时,是单片机内部在计数脉冲(来自晶振)

    T=1/F (F为频率)

    例如:我们以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定时器的时钟

    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秒 */

    展开全文
  • STM32定时器时间计算公式

    千次阅读 2020-02-05 23:18:41
    Tout = ((arr+1)(psc+1))/Tclk ; 其中: Tclk:定时器的输入时钟频率(单位MHZ) Tout:定时器溢出时间(单位为us) .TIM_Period = arr; eg;4999 .TIM_Prescaler = psc; eg:7199 To...

    Tout = ((arr+1)(psc+1))/Tclk ;
    其中:
    Tclk:定时器的输入时钟频率(单位MHZ)
    Tout:定时器溢出时间(单位为us)
    .TIM_Period = arr; eg;4999
    .TIM_Prescaler = psc; eg:7199
    Tout = ((4999+1)×(7199+1))/72 = 500000us = 500ms
    公式由来:
    1、定时器的时钟频率是Tclk;当Prescaler为psc时,时钟频率被分频了psc+1;那么此时定时器的最终频率为Tclk/(psc+1);由此可知定时器计数值加1所需要的时间是(psc+1)/Tclk;
    2、当装载值设为arr时,定时器从0计数到arr时清零;
    3、所以定时时间为:Tout = ((arr+1)
    (psc+1))/Tclk ;注意:单位为us;

    展开全文
  •  机器人开发过程中,对于直流电机来说,编码器至关重要,它不仅可以使我们对电极进行精确的速度闭环,位置闭环,还可以通过时间积分,根据运动学关系,获得速度、位置等信息STM32定时器有编码器模式,大大的方便...

     机器人开发过程中,对于直流电机来说,编码器至关重要,它不仅可以使我们对电极进行精确的速度闭环,位置闭环,还可以通过时间积分,根据运动学关系,获得速度、位置等信息

    STM32的定时器有编码器模式,大大的方便我们的开发

    使用STM32cubeMX配置工具,使得这个过程变得无比简单

    我使用STM32cubeMX 开发一个机器人中 使用两个定时器TIM3 和TIM4编码器模式读取编码器的值,做闭环控制

    STM32定时器编码器模式(Encoder Mode)

    CubeMX配置过程

    选择芯片过程不再赘述

    RCC: HSE高速总线始终改为外部晶振

    c7d486c12912a03eae7d35a7f411fe9b.png

    SYS: DEBUG选择 SW模式

    c18c4f9d3959f545d67de0437d2b51ea.png

    TIM3 TIM4 配置成定时器模式 Combined Channels: Encoder Mode

    d83d339420241264a675dabcafa7aea8.png

    25ec8943f4e87692c9ebc65be5377919.png

    TIM3 TIM4 定时器分频配置: 这里分频数要注意一下,Prescaler 直接给0 ,Counter Period给65535,下面的Encoder Mode 如果是TI1的话就是只计数上升沿的脉冲,如果是TI2 andTI2 就是上下沿都计,脉冲是前一个的两倍

    22244c9e370f71e962b30809225457b9.png

    6c1ba9f5a5c804dd341f5b7d15b3586f.png

    TIM Encoder GPIO上拉模式配置,两个定时器四个引脚,全部改成 Pull-Up,即上拉模式,主要用于没有外部上拉的编码器读取时,可以确定引脚电平,防止出错

    5663c731c94164ade9de603b241be9bb.png

    时钟树配置

    6009a75c14451f5e58d5dda8b32afd5d.png

    工程配置 IDE选择 MDK V5

    42697ef71078b39d3a866ca349e2f5bb.png

    第一栏里选择复制必要的库文件 第二栏里勾选将文件分为.c和.h

    7cbb4bb63bad59c6eaab7cd3a1eb6bf2.png

    最后点击生成文件 注意 ! 工程路径绝对不能有中文名,否则会报错,无法复制stm32的库文件到你的工程

    keil中添加处理函数

    打开生成的文件,在main.c中初始化的时候开启编码器计数

    HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);
    HAL_TIM_Encoder_Start(&htim4, TIM_CHANNEL_ALL);

    在循环中调用 __HAL_TIM_IS_TIM_COUNTING_DOWN 可以获得当前电机的转向 0为正、1为负

    DirectionA = __HAL_TIM_IS_TIM_COUNTING_DOWN(&htim3);     
    DirectionB = __HAL_TIM_IS_TIM_COUNTING_DOWN(&htim4);

    在循环中调用 __HAL_TIM_GET_COUNTER 获取计数器的计数值,即编码器的脉冲数

    CaptureNumberA=__HAL_TIM_GET_COUNTER(&htim3);
    CaptureNumberB=__HAL_TIM_GET_COUNTER(&htim4);

    脉冲计算:

    我的电机编码器是AB相位差90度,栅格数是96,无减速器,码盘转一圈,A相和B相分别输出96个矩形脉冲,总共输出192个脉冲。 如果使用 Encoder Mode TI1 或者Encoder Mode TI2,码盘转一圈得到的计数值为192。 如果使用Encoder Mode TI1 andTI2 那么得到的脉冲数为384。

    cc530a67c5d79663a8b5109eb30cb797.png

    34b5c1d19ef503d0d5031b8915413730.png

    电机转过的角度 如果使用Encoder Mode TI1 andTI2 那么

    电机真实方向= 0为正、1为负
    电机真实角度= 得到的脉冲数 / 384 * 360
    展开全文
  • stm32定时器时间计算stm32 定时器时间计算STM32 定时器的工作原理 STM32 之所以能够实现定时,是单片机内部在计 数脉冲(来自晶振) T=1/F (F 为频率) 例如:我们以 51 单片机举例,假设单片机搭配 12MHz 的晶振,由于...
  • STM32定时器计算工具

    2020-02-14 13:42:24
    用C#写的一个简易的STM32定时器计算工具,输入时钟、分频系数、重载值自动计算定时时间,方便使用定时器时计算时间
  • STM32定时器时间计算方法

    万次阅读 2017-04-22 13:57:25
    STM32定时器时间计算方法 STM32中的定时器有很多用法: (一)系统时钟(SysTick) 设置非常简单,以下是产生1ms中断的设置,和产生10ms延时的函数: void RCC_Configuration(void) { RCC_Clock
  • STM32定时器计算方法,不熟悉STM32定时器定时时间的同学拿走
  • STM32定时器中断时间计算

    万次阅读 2019-06-04 10:39:56
    关于STM32定时器,TIMx(1-8),在库设置默认的情况下,都是72M的时钟; 名为TIMx的有八个,其中TIM1和TIM8挂在APB2总线上,而TIM2-TIM7则挂在APB1总线上。其中TIM1&TIM8称为高级控制定时器(advanced control ...
  • from tkinter import * from tkinter import messagebox from tkinter import filedialog from tkinter.font import BOLD ''' 网上找的计算公式: Tout=(Period+1)*(Prescaler+1)...win.title('STM32定时器计算') w.
  • 重新装载值是计算这么多值,时间到了之后重新开始计算的值,每一次计数的时间为分频之后时钟的到时; 假设系统时间72M,分频系数设置为7200-1,那现在定时器的时钟为10kHz,每计一个数花费1/(10000)秒,重...
  • Tout = ((arr+1)*(psc+1))/Tclk ; 其中: Tclk:定时器的输入时钟频率(单位MHZ) Tout:定时器溢出时间(单位为us) .TIM_Period = arr;eg;99 .TIM_Prescaler = psc;...
  • STM32定时器定时计算公式

    万次阅读 2017-10-21 14:59:08
    Tout = ((arr+1)*(psc+1))/Tclk ; 其中:  Tclk:定时器的输入时钟频率(单位MHZ) ... Tout:定时器溢出时间(单位为us)  .TIM_Period = arr; eg;4999  .TIM_Prescaler = psc; 
  • STM32定时器计算公式

    2019-09-24 16:29:04
    STM32定时器计算公式 先上公式: Tout = ((arr+1)*(psc+1))/Tclk ; 其中: Tclk:定时器的输入时钟频率(单位MHZ) Tout:定时器溢出时间(单位为us) 例如: TIM3_Int_Init(4999,7199); TIM_Period = arr; ...
  • STM32 定时器 定时时间计算

    万次阅读 2014-11-14 12:05:57
    STM32 定时器 定时时间计算  引用 mxpopstar 的 STM32 定时器 定时时间计算 假设 系统时钟是72Mhz,TIM1 是由PCLK2 (72MHz)得到,TIM2-7是由 PCLK1 得到 关键是设定 时钟预分频数,自动重装载...
  • stm32 定时器响应时间计算

    千次阅读 2018-05-21 12:47:22
    以TIM3_Int_Init(u16 arr,u16 psc)为例:(st的标准库) arr:自动重装载值 psc:时钟预分频系数 arr 有四种计数方式:加1、减1,加减、减加。...定时器响应时间(T)计算:T=[(arr+1)*(psc+1) ] / F (us) ...
  • 举例芯片:STM32F103RC 1.先看看计算公式: 定时中断发生的时间T: T = (arr+1)*(psc+1)/72M 当设置arr= 999,psc = 71999,T=1s 参考定时器3的配置函数,如下: void time3_Init(u16 arr,u16 psc) { TIM_...
  • 使用定时器去计算获取一条的时间一、初步了解定时器stm32定时器时钟图如下: 定时器2-7:普通定时器定时器1、8:高级定时器 二、使用定时器以下,我使用定时器7(以下TIM7)去实现计算获取一条指令的运行时间。...
  • stm32定时器配置与时间计算公式

    千次阅读 2020-07-30 14:11:16
    例如当我们设置定时器为向上计数时,定时器计数的值等于arr之后就会被清0重新计数 * 定时器计数的值被重装载一次被就是一个更新(Update) * 计算Update时间公式 Tout = ((arr+1)*(psc+1))/Tclk 公式推导详解: Tclk是...
  • STM32定时器

    2021-01-25 20:01:03
    STM32定时器 HAL库版本 配置定时器: TIM_HandleTypeDef TIM3_Handler; //定时器3句柄 //通用定时器3中断初始化 //arr:自动重装值。 //psc:时钟预分频数 //定时器溢出时间计算方法: Tout=((arr+1)*(psc+1))...
  • STM32定时器中断显示时间

    千次阅读 2020-01-07 11:21:34
    利用STM32定时器中断,实现时间的显示。我们知道利用定时器中断只能进行tick的计算,然而用来显示时间我们应该怎么办呢?经过项目的实际运用,我发现利用定时器中断配合串口通讯也能实现时间显示。 这种方法应用...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 228
精华内容 91
关键字:

stm32定时器时间计算