高级定时器_高级定时器中死区的作用是什么 - CSDN
精华内容
参与话题
  • STM32学习--定时器(高级定时器

    千次阅读 2016-11-23 20:48:12
    高级定时器 1、功能增加由上图可了解到高级定时器在通用定时器上增加了三个功能部分: ① 时基部分:增加重复次数计数器和RCR寄存器。允许在指定数量的计数周期后产生更新事件,更新相应寄存器,其实际用处暂不...

    高级定时器
    1、功能增加

    这里写图片描述

    由上图可了解到高级定时器在通用定时器上增加了三个功能部分:
    ① 时基部分:增加重复次数计数器和RCR寄存器。允许在指定数量的计数周期后产生更新事件,更新相应寄存器,其实际用处暂不了解,减少中断或DMA处理的资源占用?
    ②输入部分:增加刹车输入,可产生刹车事件。其源可为外部BKIN口和CCS事件,可控制输的。主要用在安全方面,如遇到紧急事件或系统异常时关闭输出口。
    ③输出部分:这部分增加功能较多,特别在1~3通道增加死区控制、互补输出、刹车响应及几种输出模式控制。

    2、重复次计数器

    增加重复次数计数器和RCR寄存器,当RCR寄存器为0时实际和通用定时器一样用。当其不为0时,重复次计数器会随下列事件,当递减至0时才会产生更新事件,在其不为0时计数器溢出或下溢均不产生更新事件。
    重复计数器在下述任一条件成立时递减:
    ● 向上计数模式下每次计数器溢出时,
    ● 向下计数模式下每次计数器下溢时,
    ● 中央对齐模式下每次上溢和每次下溢时。
    TIMx_RCR:重复计数寄存器
    只有低8位有效,每次向下计数器REP_CNT达到0,会产生一个更新事件并且计数器REP_CNT重新从REP值开始计数。TIMx_RCR寄存器写入的新值只在下次周期更新事件发生时才起作用。
    在PWM模式中, (REP+1)对应着:
    - 在边沿对齐模式下, PWM周期的数目;
    - 在中心对称模式下, PWM半周期的数目。

    3、互补输出、死区插入、刹车功能
    个人理解这个也主要用于电机控制,死区是避免直通烧坏外围器件。互补输出,有利于用于控制不同的驱动电路。
    也可只使用CCxN输出,而不使能CCx输出,对于管脚选择也更有选择余地。
    死区DTG用来设置死区时间,可根据外围器件的特性如电平转换延时、电源开关延时等进行设置。
    刹车功能其源可为外部BKIN口和CCS事件,由BKE选择使能,极性由BKP设置。

    相关寄存器:
    CCxN输出电平依赖于MOE、 OSSI、 OSSR、OISx、 OISxN和CCxE位的值。
    这里写图片描述
    与通用定时器不同,TIMx_CCER寄存器中1~3通道每个通道多2个控制位CC1NE和CC1NP,分别用来使能反向输出和设定反向极性。
    TIMx_CR2 中增加OISx和OISxN确定输出空闲状态状态。
    这里写图片描述
    TIMx_BDTR 刹车和死区寄存器
    MOE: 主输出使能;
    AOE: 自动输出使能
    BKP: 刹车输入极性
    BKE: 刹车功能使能
    OSSR: 运行模式下“关闭状态”选择
    OSSI: 空闲模式下“关闭状态”选择
    LOOK[1:0]: 锁定设置 (Lock configuration)
    该位为防止软件错误而提供写保护。
    00:锁定关闭,寄存器无写保护;
    01:锁定级别1,不能写入TIMx_BDTR寄存器的DTG、 BKE、 BKP、 AOE位和TIMx_CR2寄存
    器的OISx/OISxN位;
    10:锁定级别2,不能写入锁定级别1中的各位,也不能写入CC极性位(一旦相关通道通过
    CCxS位设为输出, CC极性位是TIMx_CCER寄存器的CCxP/CCNxP位)以及OSSR/OSSI位;
    11:锁定级别3,不能写入锁定级别2中的各位,也不能写入CC控制位(一旦相关通道通过
    CCxS位设为输出, CC控制位是TIMx_CCMRx寄存器的OCxM/OCxPE位);
    注:在系统复位后,只能写一次LOCK位,一旦写入TIMx_BDTR寄存器,则其内容冻结直至复
    UTG[7:0]: 死区发生器时间设置

    展开全文
  • STM32高级定时器的使用

    万次阅读 多人点赞 2018-03-24 17:28:12
    写这篇文章的原因是发现net上很少有从STM32的寄存器... STM32中定时器的强大之处在于,你不但可以清纯的像C51那样只用内部时钟和外部引脚来进行定时或计数,更可以通过其自身所具备的主从模式,捕获/比较通道来进行...

           写这篇文章的原因是发现net上很少有从STM32的寄存器的角度去解析其原理的文章,也许是太简单的缘故各位大哥都不愿意动笔。那么我来写下,尽量写得简单易懂,以此留个纪念。写得肯定不好或者有的地方不准确,请不要喷哈。

             STM32中定时器的强大之处在于,你不但可以清纯的像C51那样只用内部时钟和外部引脚来进行定时或计数,更可以通过其自身所具备的主从模式,捕获/比较通道来进行更复杂的一些operation。比如将其内部的多个定时器进行级联,捕获或产生PWM波,使用刹车死区功能,记录编码器的数值等。其中有的功能C51可以通过其IO引脚进行模拟,有的却是不能的。

        言归正传,结合较新的HAL库,现在我们一起就来探讨下STM32的寄存器吧。

        先说CR1寄存器,手册最开始就是CKD控制位:


        先贴张重要的图:


             这幅图非常重要,因为其中隐藏着太多重要的信息,从这张图里可以看到CK_INT是内部时钟,即是由单片机的时钟系统所提供的时钟。以该时钟为基准,根据该位的配置得到tDTS,这个时钟的作用是用于判断死区和采样的。这个用到的时候再写。

            接下来看下ARPE位:



            因为STM32的定时器中有一个影子寄存器的概念,ARR寄存器就有一个影子寄存器,另外两类有影子寄存器的是PSRCCRX,这个影子寄存器我们是无法直接操作的,最终对TIM产生效果的其实是这个影子寄存器,如果将该位配置为1,则我们更新ARR寄存器的值得时候我们不能直接更新影子寄存器,需等待更新事件后才能将预装载寄存器的值放入影子寄存器,如果配置为0,当我们更新ARR时,会使TIM的自动重载值立即生效。

              CMS位和DIR位配置:


            这个位配置手册说得清楚了,在hal库中该如何配置呢?






        这几个参数就是配置该位的。

        OPM位配置:


        手册给出了单脉冲模式的一个应用案例如图:


           该图是TIMPWM1模式下使用单脉冲模式的一个案例,单脉冲模式的应用不局限于此,所以不能被该图所局限。



           该位的配置比较简单,就是用来配置和使能哪些事件可以成为更新事件,更新事件产生后,如果使能了相应的中断会置起该中断的标志位,并且进入中断向量指向的中断程序,需要在该中断程序中清除该中断位。如果配置了相应的DMA,即可使用DMA模式将存储器的值写入写出TIM的各个寄存器,这个貌似没有什么用,DMA一般都用在具有传输通讯性质的外设中,如USARTUSB等。除此之外,更新事件还将各影子寄存器的值进行更新,将CNT重新开始计数。

           CEN位的配置:


           如果没有将SMS从模式选择位配置为门控模式和触发模式,该位就用于启动和停止定时器。若配置了门控模式和触发模式则根据其触发条件启动和停止定时器。

     

           TIMCR1寄存器就完了,接下来就是CR2寄存器,后面由于很多寄存器的配置都有一定的逻辑联系,所以不按照寄存器的顺序来写了,先说TI1S位的配置:






           指的就是这个东西,既然这里是个异或门,则将其配置为1后,TI1的输入信号由这三个通道的异或值获得。

           MMS位的配置:



           上面应该是[2:0]不是[1:0]哈,这个位的配置挺关键的,是主从模式中主TIM的所需要配置的东西,这8个配置说白的就是谁去给TRGO信号,复位模式是UG位给,使能模式是CEN位给,更新模式是更新事件给,比较脉冲模式是CNTCCRX比较发生匹配的时候给,其他几个模式就是四个输出通道的参考电平。这个TRGO信号输出后若其他TIM配置为从模式,可将该信号用于从TIM的计数时钟和触发计数,相关的配置需参照SMS从模式选择位的配置。那么看下SMS的配置:



           不想使用从模式直接将其配置为禁止从模式就可以,这是TIM的计数只靠内部时钟,触发靠CEN。编码器的这个模式还是比较有用的,因为编码器有ABZ三项,将AB项接到TIMTI1TI2通道,然后通过配置CC1SCC2S位将IC1映射到TI1上,将IC2映射到TI2上,再配置CC1PCC2P位选择输入极性不反向,这样进入从模式控制器的电平就和编码器产生的电平一样了,最后根据编码器输出的电平特性配置从模式为编码器模式,有3种配置模式如图:



           最后CEN置位开始进行计数,这里的编码器都是指的是相对编码器。

           复位模式比较好理解,就是TRGI出现上升沿的时候,产生事件更新,TRGI的信号由TS位配置产生,如果说复位模式下的TRGI负责产生更新事件,那么门控模式和触发模式则负责产生启停定时器,外部时钟模式1模式则赋值定时器的计数,他们的信号均是TS为配置产生的,TS位的配置如图:




           这里后面几个配置都可以从可以从总系统图上看到,ITR0ITR1ITR2ITR3这几个配置的输入则要参考下表:



           这里由于是TIM1TIM8的内容,所以只有这两个TIM作为从定时器时,相应的ITRX所接入的TIMXTRGO,比如说在TIM1TS位选择配置000,则TIM5TRGO端口接到TIM1TRGI端口,TRGO又是通过上面说的MMS位配置所决定的。

     

        主从模式说完TIM的另一个重要的内容就是输入输出通道的应用,这得先从CCMR1CCMR2寄存器说起。

           CCMR1寄存器和CCMR2寄存器是类似的,只不过一个是TIM1,2通道的配置,另一个是3,4通道的配置,如图:




           很显然,低8位是配置通道1的,高8位是配置通道配置通道2的,以通道1为例子来说明,首先是CC1S位的配置:

           该位指示了通道1到底是配置成输入还是输出,只能选择一种模式来进行配置,根据这个配置,该寄存器其他位的值的含义也是不相同的。




           好的,我们假设先配置成输出模式,即CC1S位设置为00,那么其他位的配置均按照上面那一排的来弄。有哪些嘛,0C1CE,0C1M,0C1PE,0C1FE这几个,先说0C1M这个位的配置:





           别个手册第一句话就说了这些位定义了OC1OC1N的输出参考信号OC1REF的行为,对头哈,只是定义了OC1REF的动作,为撒子不直接定义OC10C1N的动作呢?因为这两个的是通道的实际电平的输出,它还取决于其他相关的控制,这里只要晓得0C1REF的电平就可以了,这个电平的定义是定死了的,就是有效状态为高电平,无效状态为低电平。再贴一张重要的图:




           通过这幅图我们看得出控制OC1REF的是0C1CEOC1M位。OC1M位可以配置为以上那8种模式,核心就是TIM的计数值CNTCCR值在不同关系下输出不同的0C1REF电平,后面的事是交给其他寄存器去控制的,可以说不同的行业应用对后面的那些寄存器的配置是不同的。还有一个就是OC1CE位的配置:




           配置了这个位后OC1REF的电平就要受到ETRF的影响了,这个ETRF是怎么来的呢?这个要从外部时钟模式2说起:




           由图看得出,这里面的控制都和SMCR寄存器有关,这个寄存器就是开始我们说过的从模式寄存器,哈哈哈,几个位的配置就一起说了:




           结合图很好理解,ETP位用于确定有效边沿,ETPS位用于分频外部触发的信号,ETF位是一个滤波器配置,我们最开始在CR1寄存器中配置的CKD位在这里就有用的,fDTS的频率就是取决于CKD位的配置的,fSAMPLING是什么意思呢?比如说配置为1000,即Fsampling=Fdts/8N=6,意思是每个外部脉冲的有效电平至少保持8tDTS的周期才算做有效的一个脉冲,当有6个这样的脉冲发生时,才算成一个有效的外部脉冲。ECE位则是使能外部时钟模式2的,当然,ETRF也可以接入外部时钟模式1,前提是从模式要配置成外部时钟模式1并且TS为要选择外部触发输入111

    接下来继续说输出的事情,还有两个位的配置一个是OC1PE还有一个是OC1FE





           OC1PE就是CCR1预装载的配置位,前面说了影子寄存器的概念,这里是类似的。

    OC1FE这个位的配置我不是很了解了,查了些资料也没有很好的答案,按其手册的意思是可以快速输出,反正使用PWM输出时将其配置为1是没还有问题的。

    输出完了就说一下输入了,同样先贴一张图方便说明理解:



           不出所料先配置CC1S位,当这个位配置为输入模式时有三种选择,简而言之,01这种配置信号是从自己的通道TI1进来,10这种配置的信号是从相邻的2通道TI2进来,11这种配置是从从模式信号的TRC进来,TRC在哪里,系统大图上可以看清楚,当然进来的信号肯定是通过处理过的,这个处理的过程取决于其他几位的配置。这个寄存器中的IC1FIC1PSC就是干这个事情的:



           和ETR的输入配置一样,这个依样画葫芦就可以理解它了,这里还有一个位的配置也影响输入的有效电平,就是CC1PCC1NP这个就是我马上要说的东西了。

           这两个位的配置在当该通道被配置为输入或输出时依然具有不同的含义,我就以1通道作为例子,刚在说输入,就先说这两个位的输入配置,看图:



           由图可知,当通道配置为输入的时候,输入信号的有效电平和极性是由CCER寄存器中的CC1NPCC1P位联合配置决定的,NP在前,P在后,我在这里理解的是当TRGI所选择的输入为TI1FP1且从模式配置为复位,外部时钟1,触发模式的时候,配置成00时,该信号的上升沿使TRGI产生上升沿,配置成01时,该信号下降沿使TRGI产生上升沿,配置成11时,该信号的上升沿和下降沿均使TRGI产生上升沿。当从模式配置为门控或者编码器模式的时候,配置成00或者01只将信号起到一个正反相作用。

    这个说完接下来说当通道1配置为输出的时候这两个位的作用:



           感觉手册对其说得模棱两可的,先看看输出那幅图吧,很明显,这两个位的配置只对输出信号起到一个非门的作用,也就是说当配置为1时将OC1REF信号进行逻辑非,我们知道OC1REF的有效电平是高电平,所以当配置为1的时候,当OC1REF有效时输出的是一个低电平,反之则是一个高电平。当然这还不是OC1OC1N输出的最后一道关口,最后一个控制其电平的是输出使能电路,说这个先介绍CCER寄存器的CC1ECC1NE位:



           很明显,这两个位就是使能输入或输出通道的,貌似很简单,但其真是有些玄机的哟。因为这两个位的含义还取决于其他的一些配置,首先就是MOE这个位的配置,在BDTR寄存器中:



           所以嘛,要想OCOCN正常输出这个位还必须要为1才得行哟,那么这个位位0的时候有什么效果呢,重点是两个输出通道将强制为空闲状态,什么是空闲状态,且看OSSROSSI的配置I就是idle的意思:



           先看OSSR位,这个位是在MOE=1即运行模式下有效的,当其配置为0时,当OC1REF为无效状态的时候,就将输出禁止了,相当于把CC1ECC1NE都清0,当OC1REF为有效状态时,并且CC1ECC1NE都使能的时,则根据CC1NPCC1P的配置该输出什么电平就输出什么电平。当其配置为1时,对输出时不影响的。再看OSSI,这个是MOE=0时配置生效的,用下面这个表去整体理解下



           这个要注意的是,当OC1EOC1NE均设置为使能状态下的时候,OC1输出的电平是OC1REF+极性,而OC1N输出的电平是OC1REF的互补相+极性。说了这么多关于输出的控制,STM32搞这么复杂就是为了应用于复杂的场合中,比如死区的应用:


           很典型的死区时序图,通过OCXOCXN的互补输出外加一个死区时间,如何配置互补输出前面已经说过了,那怎么配置这个死区时间呢?则通过DTG位来进行配置:



           看嘛,又用到tDTS了,又回到了开篇所讲的东西了,哎,写这么多也是总结下以前所学的知识,虽然比较简单,都是照葫芦画瓢,但是总归总结下还是有一定的好处的吧,本来还想结合HAL库一起写下的,子在川上日:逝者如斯夫,就算了吧。




    展开全文
  • 高级定时器TIM8和1PWM驱动

    看来写博客还是有用的,现在是8月7号,只记得TIM8和TIM1输出PWM比通用定时器多一步,但是现在已经忘记是哪一步了 ,又回来瞅瞅,还好当时有记录
    终于搞出来了,高级定时器比通用定时器多一步操作,从原子的例程从TIM3到TIM8改半天,我还以为是一定要复用呢。。。想想也是够傻的。结果是PWM输出没使能。数据手册中TIM8-1比通用定时器多个BDTR寄存器,里面第15位是PWM输出使能在这里插入图片描述
    来吧,代码:

    配置4路PWM

    /*库函数版*/
    void TIM8_PWM_Init(u16 arr,u16 psc)
    {  
    	u16 CCR1_Val=500;
    	u16 CCR2_Val=400;
    	u16 CCR3_Val=300;
    	u16 CCR4_Val=200;
    	
    	GPIO_InitTypeDef GPIO_InitStructure;
    	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    	TIM_OCInitTypeDef  TIM_OCInitStructure;
    	
    
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE);	//使能定时器3时钟
     	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);  //使能GPIO外设和AFIO复用功能模块时钟
    	
     
       //设置该引脚为复用输出功能,输出TIM8 CH2的PWM脉冲波形	GPIOB.5
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9; //TIM_CH2
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIO
     
       //初始化TIM8
    	TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
    	TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 
    	TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
    	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
    	TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
    	
    	//初始化TIM8 Channel2 PWM模式	 
    	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
     	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
    	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
    	TIM_OCInitStructure.TIM_Pulse=CCR1_Val;
    	TIM_OC1Init(TIM8, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM8 OC2
    
    	TIM_OC1PreloadConfig(TIM8, TIM_OCPreload_Enable);  //使能TIM8在CCR2上的预装载寄存器
     
    	TIM_CtrlPWMOutputs(TIM8,ENABLE);
    	
    	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
    	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
    	TIM_OCInitStructure.TIM_Pulse=CCR2_Val;
    	TIM_OC2Init(TIM8, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM8 OC2
    
    	TIM_OC2PreloadConfig(TIM8, TIM_OCPreload_Enable);  //使能TIM8在CCR2上的预装载寄存器
    	
    	TIM_CtrlPWMOutputs(TIM8,ENABLE);
    	
    	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
    	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
    	TIM_OCInitStructure.TIM_Pulse=CCR3_Val;
    	TIM_OC3Init(TIM8, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM8 OC2
    
    	TIM_OC3PreloadConfig(TIM8, TIM_OCPreload_Enable);  //使能TIM8在CCR2上的预装载寄存器
    	
    	TIM_CtrlPWMOutputs(TIM8,ENABLE);
    	
    	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
    	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
    	TIM_OCInitStructure.TIM_Pulse=CCR4_Val;
    	TIM_OC4Init(TIM8, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM8 OC2
    
    	TIM_OC4PreloadConfig(TIM8, TIM_OCPreload_Enable);  //使能TIM8在CCR2上的预装载寄存器
    	
    	TIM_CtrlPWMOutputs(TIM8,ENABLE);
    	
    	TIM_Cmd(TIM8, ENABLE);  //使能TIM8
    }
    
    

    寄存器的复位值是0x00000000,所以好多地方没有设置,是因为采用的是复位的默认值,比如什么向上计数,输出极性等等
    来吧,代码:只配置了CH1,其他的一样

    /*寄存器版*/
    #include "register.h"
    
    
    void TIM8_CH1_4_Init(void)
    {
    	/***********开启时钟**********/
    	RCC->APB2ENR|=(1<<13);//开启TIM8时钟
    	RCC->APB2ENR|=(1<<4);//GPIOC 时钟使能
    	/***********开启时钟**********/
    	
    	/***********初始化GPIO**********/
    	GPIOC->CRL&=0x00FFFFFF;//清零GPIOC7-6位
    	GPIOC->CRH&=0xFFFFFF00;//清零GPIOC9-8位
    	
    	GPIOC->CRL|=0xBBFFFFFF;//配置GPIOC7-6,复用推挽输出,50MHz
    	GPIOC->CRH|=0xFFFFFFBB;//配置GPIOC8-9,复用推挽输出,50MHz
    	/***********初始化GPIO**********/
    	
    	/************************定时器基本设置**************************/
    	TIM8->ARR=(1000-1);//计数周期
    	TIM8->PSC=71;//时钟分频系数
    
    	/*************************定时器基本设置*************************/
    	
    	//PWM_CH1配置
    	TIM8->CCMR1|=7<<4;//输出比较CH1设置为PWM2模式
    	TIM8->CCMR1|=1<<3;//输出比较CH1预装载使能
    	TIM8->CCER|=1<<0;//输出模式下,OC1信号输出到对应引脚上
    	TIM8->CCR1=500;//计数周期为1000,CCR1=500,即占空比为50%
    	
    	TIM8->CCMR1|=7<<12;//输出比较CH2设置为PWM2模式
    	TIM8->CCMR1|=1<<11;//输出比较CH2预装载使能
    	TIM8->CCER|=1<<4;//输出模式下,OC2信号输出到对应引脚上
    	TIM8->CCR2=500;//计数周期为1000,CCR2=500,即占空比为50%
    	
    	TIM8->CCMR2|=7<<4;//输出比较CH3设置为PWM2模式
    	TIM8->CCMR2|=1<<3;//输出比较CH3预装载使能
    	TIM8->CCER|=1<<8;//输出模式下,OC3信号输出到对应引脚上
    	TIM8->CCR3=500;//计数周期为1000,CCR3=500,即占空比为50%
    	
    	TIM8->CCMR2|=7<<12;//输出比较CH4设置为PWM2模式
    	TIM8->CCMR2|=1<<11;//输出比较CH4预装载使能
    	TIM8->CCER|=1<<12;//输出模式下,OC4信号输出到对应引脚上
    	TIM8->CCR4=500;//计数周期为1000,CCR4=500,即占空比为50%
    
    	TIM8->BDTR|=1<<15;//主输出使能
    	TIM8->CR1|=1<<7;//自动重装载允许位使能
    	TIM8->CR1|=1<<0;//开启定时器8
    }
    
    展开全文
  • 高级定时器

    2019-07-26 14:34:15
    使用setTimeout()和setInterval()创建的定时器可以实现有用的功能。 但是定时器仅仅是计划代码在未来某个时刻执行。 执行时间是不确定的,因为在页面的生命周期中,还有其他的代码在控制javascript进程。 定时器...

    使用setTimeout()和setInterval()创建的定时器可以实现有用的功能。

    但是定时器仅仅是计划代码在未来某个时刻执行。

    执行时间是不确定的,因为在页面的生命周期中,还有其他的代码在控制javascript进程。

    定时器对队列的工作方式是当特定时间过去后,让代码尽快执行,而不是立即执行。一旦队列中空闲之后,代码将立即执行。

    表面上看上去,代码是在特定的时间执行了,其他情况下,代码明显的等待更长的时间。

    var btn = document.getElementById("my_btn");
    btn.onclick = function(){
        setTimeout(function(){
            document.getElementById("message").style.visibility = 'visible';
        },200)
         //其他代码
    }
    

     这里给一个按钮一个事件处理程序,首先onclick事件处理程序加入队列,该程序执行后执行定时器,再有200ms后,指定的代码被加入队列。

       加入队列并不是立即执行代码,如果onclick执行了300ms,那么,定时器的代码至少在定时器设置300ms之后才会执行。

       这就需要传递一个实际执行的时间与指定的间隔的差值

    setTimeout(function(diff){
        if(diff > 0){
          //晚调用
        }else if(diff < 0){
          //早调用
        } else {
          //调用及时
        }
    },2
    

      

     

    转载于:https://www.cnblogs.com/xwtbk/p/6862441.html

    展开全文
  • TIM1和TIM8定时器的功能包括【增强型】: ● 16位向上、向下、向上/下自动装载计数器 ● 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65535之间的任意数值 ● 多达4个独立通道: ─ 输入...
  • stm32之TIM-高级定时器应用实例一(详细)

    万次阅读 多人点赞 2019-03-25 14:37:37
    硬件:stm32f103c8t6 开发工具:Keil uVision... stm32标准库对定时器外设建立了4个初始化结构体,定时器分为基本定时器、通用定时器、高级定时器,针对不用的定时器要使用不同初始化结构体。下面是4个初始化结构体...
  • HAL--高级定时器

    2018-08-21 23:15:53
    高级定时器:TIM1/TIM8 断路输入 , 输出比较 , 输入捕获 16位,可上下计数 有四个GPIO其中通道1-3还有互补输出(实现一路正转,一路反转)GPIO 时钟来自PLCK2 外部时钟模式1(时钟捕获): 时钟信号输入引脚...
  • stm32 高级定时器

    千次阅读 2017-10-13 16:40:30
    原文网址:http://jingyan.eeboard.com/article/73847#/prettyPhoto%5Bpp_gal%5D/6/ ... ...STM32的MCU产品自带定时器资源十分丰富,既有专门用于电机控制的高级定时器(TIMER1/TIMER8),又有仅定时用的基本定时器
  • 通用定时器挂载在APB1总线,高级定时器挂载在APB2总线。配置NVIC中断分组时,利用NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQN;可以配置全部通用定时器中断,但是高级定时器的中断配置是分开的,如定时器1分别是...
  • STM32F407 之 高级定时器介绍

    千次阅读 2015-11-25 11:14:35
    STM32F4 高级定时器(TIM1 和 TIM8)包含一个 16 位自动重载计数器,该计数器由可编程预分频器驱动。 高级定时器可用于各种用途,包括测量输入信号的脉冲宽度(输入捕获),或者生成输出波形(输出比较、PWM、带...
  • 结论:通用有的,高级都有,正常使用。但是基本定时器真的只有计算一下时间,产生更新中断的作用。下面是具体细节TIM1和TIM8定时器的功能包括【增强型】:● 16位向上、向下、向上/下自动装载计数器● 16位可编程...
  • STM32----高级定时器、通用定时器(TIMx)、基本定时器(TIM6和TIM7)的区别 我觉得总的来说应该没多大区别,似乎是高级定时器多了三相电机控制所需的功能,还请各位高人指点吧~~   TIM1和TIM8主要特性...
  • stm32定时器的配置步骤

    千次阅读 2019-04-10 19:02:46
     由两个基本定时器(TIM6、TIM7),4个通用定时器(TIM2—TIM5),2个高级定时器(TIM1、TIM8);基本定时器结构功能简单,类似于51单片机中的定时器,通用定时器在基本定时器基础上扩展而来,增加了输入捕获和输出...
  • STM32定时器学习---基本定时器

    万次阅读 2017-12-02 20:49:33
    TIM1、TIM8:高级定时器三种定时器的区别: 基本定时器: 基本定时器TIM6和TIM7各包含一个16位自动装载计数器,由各自的可编程预分频器驱动。它们可以作为通用定时器提供时间基准,特别地可以为数模转换器(DAC)提供...
  • STM32F103的11个定时器详解

    万次阅读 2018-08-16 16:47:08
    STM32F103系列的单片机一共有11个定时器,其中:2个高级定时器4个普通定时器2个基本定时器2个看门狗定时器1个系统嘀嗒定时器出去看门狗定时器和系统滴答定时器的八个定时器列表;8个定时器分成3个组;TIM1和TIM8是...
  • STM32F407 高级定时器TIM1 定时配置

    千次阅读 2019-08-15 10:37:35
    因为在网上很难找到高级定时器TIM1 的配置,而且高级定时器的配置跟普通定时器不太一样,所以记录一下。 实验板子:正点原子探索者STM32F407ZGT6 TIM1、TIM8TIM11的时钟为APB2时钟的两倍即168M,TIM2TIM7、TIM12~TIM...
  • STM32高级定时器PWM输出方式说明

    千次阅读 2019-05-07 14:03:06
    高级定时器1有5种计数模式:TIM_CounterMode_Up、TIM_CounterMode_DownTIM_CounterMode_CenterAligned1TIM_CounterMode_CenterAligned2TIM_CounterMode_CenterAligned3 PWM输出有2种模式:TIM_OCMode_PWM1、TIM_...
  • stm32 高级定时器1配置注意

    万次阅读 2017-01-16 14:06:30
    void TIM1_Int_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);...//定时器
  • STM32系统学习——TIM(基本定时器

    万次阅读 多人点赞 2017-12-11 10:22:19
    STM32F1 系列中,除了互联型的产品,共有 8 个定时器,分为基本定时器,通用定时器和高级定时器。基本定时器 TIM6 和 TIM7 是一个 16 位的只能向上计数的定时器,只能定时,没有外部 IO。通用定时器 TIM2/3/4/5 是一...
1 2 3 4 5 ... 20
收藏数 22,230
精华内容 8,892
关键字:

高级定时器