精华内容
下载资源
问答
  • 定时器输入捕获原理
    千次阅读
    2021-10-13 19:47:27

      STM32F103单片机的定时器不仅能输出PWM波,而且还能捕获输入的PWM波。可以通过定时器的捕获功能测量输入PWM波的周期和占空比。其中定时器的输入捕获功能如下:

      在输入捕获模式下,当检测到ICx信号上相应的边沿后,计数器的当前值被锁存到捕获/比较寄存
    器(TIMx_CCRx)中。当发生捕获事件时,相应的CCxIF标志(TIMx_SR寄存器)被置1,如果开放了中断或者DMA操作,则将产生中断或者DMA请求。如果发生捕获事件时CCxIF标志已经为高,那么重复捕获标志CCxOF(TIMx_SR寄存器)被置1。写CCxIF=0可清除CCxIF,或读取存储在TIMx_CCRx寄存器中的捕获数据也可清除CCxIF。写CCxOF=0可清除CCxOF。

      这里就使用捕获模式测量PWM波形的高电平时长,具体实现原理简单的来说就是,当第一个上升沿到来之后,清空计数器,当第一个下降沿到来之后,此时计数器的值就是高电平的值。
    设置代码如下:

    void TIM5_Cap_Init(u16 arr, u16 psc)
    {
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
        TIM_ICInitTypeDef TIM_ICInitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
    
        //时钟初始化
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
        //IO口初始化
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        //TIM5初始化
        TIM_TimeBaseStructure.TIM_Period = arr;
        TIM_TimeBaseStructure.TIM_Prescaler = psc;
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure);
        //TIM5输入捕获参数
        TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;				 //CC1S=01 选择输入端 IC1映射到TI1上
        TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;  	 //上升沿捕获
        TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;  //映射到TI1上
        TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;			 //配置输入分频,不分频
        TIM_ICInitStructure.TIM_ICFilter = 0x00;						 //IC1F=0000 配置输入滤波器 不滤波
        TIM_ICInit(TIM5, &TIM_ICInitStructure);
        //中断分组初始化
        NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
    
        TIM_ITConfig(TIM5, TIM_IT_Update | TIM_IT_CC1, ENABLE);
        TIM_Cmd(TIM5, ENABLE);
    }
    
    
    u8  TIM5CH1_CAP_STA = 0;    //输入捕获状态
    u16 TIM5CH1_CAP_VAL;		//输入捕获值
    void TIM5_IRQHandler(void)
    {
        if((TIM5CH1_CAP_STA & 0x80) == 0)
        {
            if(TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET) 			 //溢出中断
            {
                if(TIM5CH1_CAP_STA & 0x40)				 				 //已经捕获到高电平了
                {
                    if((TIM5CH1_CAP_STA & 0x3F) == 0x3F)	 			 //高电平太长了
                    {
                        TIM5CH1_CAP_STA |= 0x80;			 			 //标记成功捕获了一次
                        TIM5CH1_CAP_VAL = 0xFFFF;
                    }
                    else
                        TIM5CH1_CAP_STA++;
                }
            }
            if(TIM_GetITStatus(TIM5, TIM_IT_CC1) != RESET) 				 //捕获中断
            {
                if(TIM5CH1_CAP_STA & 0x40)				 				 //下降沿捕获
                {
                    TIM5CH1_CAP_STA |= 0x80;				 			 //标记成功捕获一次高电平脉宽
                    TIM5CH1_CAP_VAL = TIM_GetCapture1(TIM5);
                    TIM_OC1PolarityConfig(TIM5, TIM_ICPolarity_Rising);	 //设置上升沿捕获
                }
                else									   				 //上升沿捕获
                {
                    TIM5CH1_CAP_STA = 0;					 			 //清空
                    TIM5CH1_CAP_VAL = 0;
                    TIM_SetCounter(TIM5, 0);
                    TIM5CH1_CAP_STA |= 0x40;				 			 //标记捕获到了高电平
                    TIM_OC1PolarityConfig(TIM5, TIM_ICPolarity_Falling); //设置下降沿捕获
                }
            }
        }
        TIM_ClearITPendingBit(TIM5, TIM_IT_Update | TIM_IT_CC1);
    }
    

      这里使用定时器5的通道1来进行捕获,首先设置通道1为上升沿捕获,当上升沿触发中断之后,清空计数器的值,然后将中断设置为下降沿中断。当下一次下降沿中断触发后,此时的时间就是PWM波的高电平时间,接着再将中断设置为上升沿中断,等待下一次高电平的触发。

      每次捕获成功时,在主函数中将高电平时长打印出来。

    extern u8  TIM5CH1_CAP_STA;    	//输入捕获状态
    extern u16 TIM5CH1_CAP_VAL;		//输入捕获值
    int main(void)
    {
        u32 temp = 0;
        delay_init();       		//延时函数初始化
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        uart_init(115200);
        LED_Init();
    
        LED0 = 1;
        LED1 = 1;
        delay_ms(500);
        LED0 = 0;
        LED1 = 0;
    
        TIM3_PWM_Init(3600-1,0);             //不分频。PWM频率=72000000/3600=20Khz   PB5输出PWM
    	
        TIM5_Cap_Init(0xffff, 72 - 1);		//以1Mhz的频率计数  PA0
    
        printf("Input Capture test!!!\r\n");
        while(1)
        {
            delay_ms(10);
    	TIM_SetCompare2(TIM3,TIM_GetCapture2(TIM3)+1);
    
    	if(TIM_GetCapture2(TIM3)==3600)
                TIM_SetCompare2(TIM3,0);	
    
            if(TIM5CH1_CAP_STA & 0X80) 				//成功捕获到了一次上升沿
            {
                temp = TIM5CH1_CAP_STA & 0X3F;
                temp *= 65536; 						//溢出时间总和
                temp += TIM5CH1_CAP_VAL; 			//得到总的高电平时间
                printf("HIGH:%d us %d ms %d s\r\n", temp,temp/1000,temp/1000000); 	//打印总的高点平时间
                TIM5CH1_CAP_STA = 0; 				//开启下一次捕获
            }
        }
    }
    
    

    定时器3用来产生一个PWM波,然后通过定时器5的捕获功能来测量PWM波的高电平时间。

    更多相关内容
  • 文章目录 前言 高级时钟功能框图 输入阶段 捕获/比较模块 效果 复位模式 前言 捕获功能是高级定时器的重要功能之一。捕获功能就是检测ARM管脚是否出现对应的跳动边沿,若出现,则将计数值的值锁存起来。即用于测量...

    前言

    捕获功能是高级定时器的重要功能之一。捕获功能就是检测ARM管脚是否出现对应的跳动边沿,若出现,则将计数值的值锁存起来。即用于测量指定跳变边沿出现的时间。

    本文主要介绍F429的捕获功能实现原理。

    主要参考文献:

    • RM0090参考文档

    高级时钟功能框图

    在这里插入图片描述

    在高级时钟中,捕获功能大致如上面所示。其功能模块大致分成两个部分:

    1. 输入阶段
    2. 捕获/比较阶段

    整个过程大致为:将信号通过管脚输入,在输入阶段经过滤波边缘检测等处理之后检测是否有预设的有效边沿信号,若出现有效边沿,则将计数器的值保存在捕获/比较寄存器中。若配置中断,DMA使能,则将触发中断/DMA。然后,在中断/DMA触发后,程序中继续处理捕获。

    输入阶段

    在这里插入图片描述
    其中,输入阶段的详细逻辑框图可以如上图所示。

    1. 滤波器:若外部信号高频杂波比较多的情况下,可以考虑使用滤波器。通过滤波器可以达到去除高频信号的目的,其有TIMx_CCMx的位ICxF[3:0]配置。
    2. 边沿检测器:通过该模块,决定触发信号是上升沿有效还是下降沿有效。通过寄存器你TIMx_CCER中的CC1P/CC1NP来配置。
    3. 来源选择:通过该模块选择通道触发信号的来源。通过TIMx_CCMR1寄存器的CC1S[1:0]位来配置。
    4. 分频器:通过该模块对触发信号进行分频。该分频器通过TIMx_CCMR1的ICPS[1:0]位与TIMx_CCER寄存器中CC1E进行配置。

    捕获/比较模块

    在这里插入图片描述

    在该部分,只看左半边,也就是捕获部分。

    1. 通过CC1S,用来确定该通道是输入通道。
    2. 通过CC1E,用来说明该通道捕获使能。
    3. 通过CC1G,可以用来模拟触发捕获信号。

    经过以上正确配置,捕获信号IC1PS传入该模块。则将计数器的值存入捕获/比较寄存器中,在中断响应函数中,可以将该数值读取。

    效果

    发生捕获事件时:

    • TIMx_CCR1 寄存器会获取计数器的值。
    • 将 CC1IF 标志置 1(中断标志)。如果至少发生了两次连续捕获,但 CC1IF 标志未被清零,这样 CC1OF 捕获溢出标志会被置 1。
    • 根据 CC1IE 位生成中断。
    • 根据 CC1DE 位生成 DMA 请求。

    复位模式

    当触发输入信号发生变化时,计数器以及预分频器可重新初始化。此外,如果TIMx_CR1 寄存器中 URS 位处于低电平,则会发生更新事件 UEV 。然后,所有预装载寄存器(TIMx_ARR 和 TIMx_CCRx)都将更新。换言之,当URS 位处于低电平,每次复位触发事件发生时,都触发更新事件与更新中断。

    展开全文
  • 目录输入捕获原理框架:输入捕获实验工作原理:1、滤波: 2、设置捕获极性:3、设置输入捕获映射通道:4、预分频: 5、中断开启:输入捕获有关库函数及操作:1.通道初始化函数:TIM_ICInit2.通道极性设置:TIM_...

    目录

    输入捕获原理框架:

    输入捕获实验工作原理:

    1、滤波:

     2、设置捕获极性:

    3、设置输入捕获映射通道:

    4、预分频:

     5、中断开启:

    输入捕获有关库函数及操作:

    1.通道初始化函数:TIM_ICInit

    2.通道极性设置:TIM_OCxPolarityConfig;

    3.获取当前通道捕获值:TIM_GetCapturex;

    4.GPIO配置函数:GPIO_Init;

    5.中断服务函数:


    输入捕获原理框架:

    输入捕获实验工作原理:

    输入捕获的工作原理:预设分频系数,和捕获沿,检测定时器通道输入的边沿信号,当信号发生跳变并且满足预设条件时,将定时器当前值寄存器CNTx的值存入捕获比较寄存器CCRx中。

    捕获过程

    捕获的过程大致可以细分为五个步骤:滤波、设定捕获极性、捕获通道设定、预分频、中断设置

    1、滤波:

    上面的图为滤波步骤的工作设置。滤波简单来说就是将一些杂的波过滤,获得我们所需要的波。

    例如我们捕获实验需要特定周期捕获高电平的信号,但是在低电平处发生抖动,导致原本是低电平的地方就有一些高的信号,所以我们要对这些信号进行剔除。

    例子

    剔除的方法也很简单,就是多次检测,如果每一次检测的结果都为需要的结果,那么我们就认为这个高电平是有效的,而我们设置的信号触发后单次采样的采样的频率f DTS。但是这个频率总得有个来源吧,于是我们使用定时器的时钟频率CK_INT作为它的来源。而定时器TIMx_CCMRx的ICF位就用于选择配置滤波器,但是f DTS与f INT之间的关系的配置需要使用。 TIMx_CRx位去配置:

    TIMx_CRx寄存器配置单次采样频率

     而设置需要的采样次数x则由TIMx_CCMR1寄存器的IC1F位来配置:

     2、设置捕获极性:

     这部分主要是用于设置捕获的是上升的信号沿还是下降的信号沿,它是由CCER的CC1P位来配置的。所谓上升沿,就是由低电平变成高电平的瞬间,下降沿就是由高电平变成低电平的瞬间。我们可以设置需要捕获哪一个时候的变化。

    3、设置输入捕获映射通道:

     设置输入捕获映射通道,换句话说就是同一个定时器的不同通道捕获到的信号需不需要互换的的设置,它们如果交换那么关系如下图:

    通道信号交换

    它是由TIMx_CCMR1寄存器的CC1S位配置的,一般情况下,我们就只需要设置那个通道捕获到信号就由那个通道对于设备处理即可。

    4、预分频:

     预分频是设置记录到几次上升沿才触发一次捕获。它是由TIMx_CCMR1寄存器的ICPS位来配置的。例如,如果我们设置每2次上升沿触发1次捕获,那么下图可以触发一次捕获

     5、中断开启:

    这个就是开启相应的通道中断,它由TIMx_DIER寄存器配置;

    输入捕获有关库函数及操作:

    输入捕获的一般步骤有:

    • 使能时钟
    • 配置GPIO口
    • 配置定时器
    • 配置输入捕获通道
    • 配置捕获中断
    • 使能定时器
    • 编写中断服务函数

    1.通道初始化函数:TIM_ICInit

    NVIC_Init(&NVIC_InitStructure);

    这个函数与我们PWM之前的函数类似,都是用于初始化定时器通道、配置定时器中断的工作模式的。这里我们用到了它的参数结构体的5个成员:

        TIM5_ICInitStructure.TIM_Channel = TIM_Channel_1;
      	TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
      	TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
      	TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
      	TIM5_ICInitStructure.TIM_ICFilter = 0x00;

    第一个成员: TIM_Channel,这个成员就是指定工作的通道;

    第二个成员:TIM_ICPolarity,这个成员用来配置我们是采用上升沿捕获还是下降沿捕获;

    第三个成员:TIM_ICSelection,这个成员用来配置是否要将输入捕获通道映射到其它的通道,一般选择不用映射,直接direct现在的通道;

    第四个成员:TIM_ICPrescaler,这个成员用来配置分频系数;

    第五个成员:TIM_ICFilter,这个成员用来配置滤波的次数;

    2.通道极性设置:TIM_OCxPolarityConfig;

    void TIM_OC1PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);

    这个函数用于配置通道的极性,即上升沿捕获还是下降沿捕获。

    3.获取当前通道捕获值:TIM_GetCapturex;

    uint16_t TIM_GetCapture1(TIM_TypeDef* TIMx);

    这个函数用于获取当前我们通道捕获到的数值,即捕获比较寄存器存放的值

    4.GPIO配置函数:GPIO_Init;

    void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)

    GPIO的配置函数与前面GPIO的配置函数所需要做的类似,只不过需要具体去修改几个特定的参数:
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;

        GPIO_ResetBits(GPIOA,GPIO_Pin_0);

    GPIO的选择模式要选择为输入模式,并且要将GPIO的默认电平改为低电平。

    5.中断服务函数:

    捕获中断函数内部实现逻辑

    展开全文
  • STM32 --通用定时器输入捕获功能

    千次阅读 多人点赞 2020-06-11 10:38:39
    开始并没有怀疑是配置有问题,因为之前接触过定时器输入捕获功能,靠着自己的记忆配置了一下,认为 捕获功能 的定时是通过定时器设置的定时溢出频率来计算的(真心抽自己两巴掌)。结果导致问题的发生。 真的是这些...

    问题:

    开始的时候没有搞清楚 定时器时基定时器溢出中断的概念,导致在计算频率的时候一直有问题。

    开始并没有怀疑是配置有问题,因为之前接触过定时器输入捕获功能,靠着自己的记忆配置了一下,认为 捕获功能 的定时是通过定时器设置的定时溢出频率来计算的(真心抽自己两巴掌)。结果导致问题的发生。

    真的是这些东西最好是通过博客的方式记录下来,方便自己,方便他人。

    现在让我们重新回顾一下这个功能:通用定时器输入捕获。

    内部定时器结构

    STM32定时器系列 - STM32常规定时器时基与时钟源 这篇博文中,我们讲述过,定时器的结构。

    其实我们只需要看这张图就可以了:
    在这里插入图片描述
    看流程的走向,由 时钟源 提供时钟 到 时间基(一般时钟源都是选择内部的CLK)
    在这里插入图片描述
    这里需要注意的就是看定时器时挂在那个总线下的,APB1 与 APB2 CLK不一样。

    然后流向 输入捕获 的只有 PSC(预分配器) 并没有 重装载寄存器,因此,采样的频率就是定时器经过预分配器之后的频率,与重装载无关。

    输入捕获【Input Capture】基本原理

    定时器针对外部输入信号或者内部触发信号实现"边沿捕获";产生捕捉事件,并可以触发中断或者DMA请求,同时记录捕捉时刻计数器的值,基于这个原理,配合计数器实时计数器功能可以对捕捉信号进行脉冲宽度的测量,进而实现对周期性波形测量其周期与占空比,或者用来做通信解码(红外通信解码)。
    在这里插入图片描述
    具体到我们的定时器,输入捕获的功能主要是靠捕获比较单元来实现。输入捕获模式下:当捕获单元捕获到外来有效信号边沿事件【上升沿或者下降沿】,将此刻计数器的值锁存到CCR影子寄存器并自动将CCR影子寄存器的值拷贝进CCR预装寄存器,以供用户读取。

    关于CCR寄存器,它是由影子寄存器与预装寄存器组成,带预装使能控制位。在输入模式下,此时CCR对用户是只读的,不可对其修改、赋值。

    外部输入信号作为输入捕获信号,往往需要经过如下几个阶段:一般经过滤波,边沿检测,极性选择,捕获信号选择,捕获信号分频,最终进入捕获功能模块从而实现输入捕获。其中边沿检测、极性选择确定捕获单元对捕获信号的捕获极性,即捕获上升沿还是下降沿,甚至双边沿。

    捕获信号选择是指:对输入捕获信号的信号进行选择,即前面提到过的作为捕获信号的信号源有两大类;
    捕获信号分频是指对将被用作捕获信号的信号进行分频,比如2分频,3分频等,分频之后送到捕获功能模块去完成输入捕获。
    (这里如果输入信号频率大于采样频率就可以采用捕获信号分频的方法降低信号频率,达到可以采集的目标,计算结果后,在乘以分频系数)

    外部输入信号的滤波

    为了防止因为输入信号上的噪声或边沿抖动而导致误计数、误触发,我们可以针对外部输入信号进行合适的滤波。

    用户要做的就是针对输入信号具体情况【频率、噪声等】,通过寄存器配置适当的滤波参数,选择适当采样时钟和采样次数,其它事情交给定时器硬件去处理。这样也可以减少因为做滤波而导致的软件开销。
    在这里插入图片描述
    在这里插入图片描述
    假设我们让定时器对某输入通道的信号进行捕捉,捕捉极性为上升沿。设置滤波的采样时钟与定时器内部时钟频率一致,采样次数为4次。则每当捕捉到上升沿时,硬件连续根据采样频率来采样4次【包括发生捕捉触发沿的那一次】。如果4次采样结果均为高电平,则此次触发有效。并可以产生触发事件,该事件可以触发中断或DMA请求,同时捕捉单元将此刻计数器的值放入到捕捉比较寄存器CCR中。

    当然,如果捕捉到触发边沿后,没法做到连续4次采样均为高电平,则该触发无效,将会被丢弃。这样达到滤除噪声的目的。

    内部触发输入信号【ITRx】作为输入捕获信号

    在这里插入图片描述
    在这里插入图片描述

    与输入捕获相关的事件

    1. 捕获时刻的计数器值锁存到对应捕获通道的CCRx寄存器。
    2. 对应通道的捕获事件/中断会被置位;【CCxIF@TIMx_SR】
    3. 如果允许了捕获中断或者DMA请求,可以触发中断或者DMA请求。取决于【CCxIE/CCxDE@TIMx_DIER】配置。
    4. 如果运行连续捕获事件,前一次没有清零的话会置位【CCxOF@TIMx_SR】
    5. 对于CCxIF标志可以软件清零或者读取CCR来清零。
    6. 可以通过设置位【CCxG@TIMx_EGR】来软件触发输入捕获事件。

    与输入捕获相关的事件主要就这些,我们要做到心中有数。只要了解它们后,在我们的定时器的实际应用中才能灵活使用它们,实现我们需要的功能。如在发生输入捕获事件时,利用相关中断或DMA请求实现其它功能,比如做数据的更新、ADC的启动、其它定时器的启动等等。

    通过输入捕获测量脉冲周期

    在输入捕捉模式下,定时器可用于测量外部信号周期。根据定时器时钟、预分频器和定时器分辨率,可推导出最大测量周期。

    相应的定时器配置包括:

    1. 通过对CCMRx 寄存器中的 CCxS 位选择有效输入。
    2. 根据需要,通过对 CCMRx 寄存器中的 IC1F[3:0] 位执行操作以编程滤波器参数,并通过对IC1PSC[1:0] 位执行写操作以编程预分频器。
    3. 通过对 CCxNP/CCxP 位执行写操作选择极性,即选择上升沿触发、下降沿触发或边沿触发。

    当输入通道检测到相应的信号发生跳变时,可使用输入捕捉模块进行捕捉。要获取外部信号周期,需连续进行两次捕捉,通过将两次捕捉到的值相减可计算得到周期。

    对于单沿捕捉,计数器采用向上计数模式,待测信号不长于计数器的计数周期时:

    假设两次连续捕捉值为 CCRx_tn 和 CCRx_tn+1
    ● 如果 CCRx_tn < CCRx_tn+1:捕捉宽度= CCRx_tn+1 - CCRx_tn
    ● 如果 CCRx_tn > CCRx_tn+1:捕捉宽度= (ARR_max - CCRx_tn) + CCRx_tn+1

    如果待测信号周期长于当前计数器周期的话,需要考虑溢出问题。实际应用中有时因为忽略了这点而导致测试不正确。

    展开全文
  • STM32定时器输入捕获

    千次阅读 2022-03-05 21:01:24
    用STM32F429做定时器捕获PWM波形,测出波形的周期、频率以及占空比、正向脉宽。
  • 参考资料:1、正点原子探索者STM32f407-《STM32f407开发指南-库函数版本》-第15章-输入捕获实验;2、STM32F4xx 官方参考资料《STM32F4xx中文参考手册》-第15章-通用定时器
  • 电机控制基础——定时器捕获输入脉冲原理

    千次阅读 多人点赞 2021-02-28 12:33:32
    上篇电机控制基础——定时器基础知识与PWM输出原理介绍了定时器的输出功能,本篇介绍定时器输入功能。 1 问题引出 在单片机与嵌入式开发中,某些场景需要捕获传感器的高电平(或低电平)信号...2 定时器捕获原理
  • stm32入门——定时器输入捕获实验

    千次阅读 2018-12-02 18:07:32
    stm32入门——定时器输入捕获实验 实验目的 获得对应GPIO口高电平的持续时间 原理简介 运用中断+定时器的方法,在上升沿到来时触发定时器中断,这是计时的起点;在下降沿时再次触发中断,这是计时的终点。 如上图,...
  • STM32F407定时器输入捕获原理,配置流程,输入捕获相关结构体、函数
  • 高级定时器-输入捕获应用(PWM输入捕获) ​ 前面我们讲了用输入捕获测量了信号的脉宽,这一节我们讲输入捕获的一个特例—PWM输入。 ​ 普通的输入捕获可以使用定时器的四个通道,一路捕获占用一个捕获寄存器,而PWM...
  • 通用定时器(定时、输出比较、输入捕获) 高级定时器(定时、输出比较、输入捕获、互补输出) STM32S103RBT6的开发板有一个高级定时器TIM1;3个通用定时器TIM2/3/4 输出比较(输出PWM)、 输入捕获(测量脉冲宽度,...
  • 定时器_输入捕获(初稿,标题要修改) 零、 最终效果(虽然简单,但是添加功能) 方便了解整体的效果 视频链接: 代码仓库: 涉及点 1、 2、 3、 使用的材料 材料 参考链接 stm32f103c8t6 某宝 ...
  • 【STM32】HAL库 STM32CubeMX教程八---定时器输入捕获

    万次阅读 多人点赞 2019-08-21 08:53:15
    本系列教程将外设原理,HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 所用工具: 1、芯片:STM32F407ZET6/STM32F103ZET6 2、STM32CubeMx软件 3、IDE: MDK-Keil软件 4、STM32F1xx/...
  • STM32-通用定时器-输入捕获

    千次阅读 2021-10-05 12:48:28
    1通用定时器输入捕获概述 1.1输入捕获的工作原理 在通用定时器框图中,输入捕获主要涉及到最顶上的一部分(计数时钟的选择)、中间部分(时基单元)、左下部分(输入捕获)这三个部分。这里主要讲解一下左下部分...
  • 定时器输入捕获可以用来测量脉冲宽度与PWM的输入测量,可以通过设置检测不同的跳变边沿,来实现对高低电平的计时捕获 框图 由图可知,初始化定时器进行输入捕获有以下步骤: 开启时钟,配置定时器的GPIO 设置...
  • STM32F407-高级定时器输入捕获功能
  • [stm32]stm32F4输入捕获原理

    千次阅读 2018-09-26 11:23:45
    捕获原理 假如我们要捕获如图所示波形的脉宽。 1.先设置定时器为向上计数模式 2.设置定时器的采样通道channelx为上升下降沿捕获,所以在t1时刻,上升沿就会捕获到当前CNT的值,随即将CNT清零 3.在t2时刻下降沿...
  • 高级定时器-输入捕获应用 输入捕获一般应用在两个方面,一个方面是脉冲跳变沿时间测量,另一方面是PWM输入测量。 测量脉宽或者频率 测量频率 ​ 当捕获通道TIx上出现上升沿时,发生第一次捕获,计数器CNT的值会被...
  • 2、STM32CubeMX配置 原理图如下: STM32CubeMX配置如下: 分频系数为71,而主频为72mhz,因此定时器频率为72mhz/(71+1)=1mhz,即每1µs计数一次。 计数方式为向上计数。 自动加载值为最大值65535,65.535µs会溢出...
  • 上一章介绍了STM32定时器的PWM输出功能,定时器的几个通道除了有输出功能外,还可以做输入用,可捕获信号的上升沿或下降沿,可以用于测量信号的频率、周期、占空比等。本篇文章将介绍用STM3...
  • STM8的定时器,除了TIM4和TIM6,其他定时器都有输入捕获功能。STM8的输入捕获,简单的说就是通过检测TIMx_CHx上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到...
  • 让自己别忘了大学里学的东西,那么就把它记录下下来,效率会比忘记然后重新再去找资料再重头学高的多 原理部分: 关于自己的理解:输入捕获,顾名思义,就是在单片机上找到一个对应的引脚,而这个引脚是作为输入端,...
  • 从应用来说STM32的定时器输入捕获模式前言原理输入捕获初始化程序中断函数和处理函数 前言 我们知道,STM32的定时器功能模式很多,而输入捕获就是非常有实际用处的一个模式。最直观的应用就是测信号脉宽,或者说测...
  • 通用定时器 TIM2/3/4/5 是一个 16 位的可以向上/下计数的定时器,可以定时,可以输出比较,可以输入捕捉,每个定时器有四个外部 IO。 高级定时器 TIM1/8 是一个 16 位的可以向上/下计数的定时器,可以定时,可以输出...
  • STM32CubeMx配置定时器输入捕获测量PWM频率以及占空比
  • 我们以测量周期和频率为例,用一个简图来说明输入捕获原理 假定定时器工作在向上计数模式, 图中 t1~t2 时间,就是我们需要测量的高电平时间。测量方法如下:首先设置定时器通道 x 为 上升沿捕获,这样,t1 时刻...
  • 通用定时器输入捕获概述 输入捕获的工作原理 在通用定时器框图中,主要涉及到最顶上的一部分(计数时钟的选择)、中间部分(时基单元)、左下部分(输入捕获)这三个部分。这里主要讲解一下左下部分(输入捕获),...
  • 定时器输入捕获模式可以用来测量脉冲宽度或者测量频率。本教程通过测量脉冲宽度,实现四路超声波测量距离的目的。如图所示: 首先,我们设定定时器工作模式为向上计数模式,图中t1-t2时间间隔就是我们需要测量的...
  • 通用定时器-输入捕获实验

    千次阅读 2016-10-24 20:49:39
    本节定时器PWM输出主要涉及到定时器框图左下方部分,即输入捕获部分输入捕获工作过程(以通道1为例)一个通道的框图:作用:捕获TIMx_CH1通道信号的跳变,并触发捕获中断我们将此过程拆分为4个部分1,设置输入捕获滤波器fDT

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,891
精华内容 2,756
关键字:

定时器输入捕获原理