您的位置 首页 被动

关于stm32的定时器的运用装备

定时器是stm32的一大利器,现在的项目中可以说没有一个不会用到定时器的,所以掌握理解运用定时器才会做出好的产品来。本章内容说一说关于s

定时器stm32的一大利器,现在的项目中能够说没有一个不会用到定时器的,所以把握了解运用定时器才会做出好的产品来。
本章内容说一说关于stm32的定时器TIM_GetCounter(TIMx)的运用。之前的项目中从前用这个来获取凹凸电平的时长,在超声波测距,红外遥控解码中运用过。Stm32的定时器除了1和8其他都是通用定时器。如何用这句函数来捕捉电平时长呢?首要看一下初始化内容,以TIM4为例
void Timer4_CFG()
{

TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO , ENABLE);

GPIO_InitStructure.GPIO_Pin = IR_LED_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(IR_LED_PORT, &GPIO_InitStructure);

TIM_TimeBaseStructure.TIM_Prescaler = 3599; //TIM_CKD_DIV1
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//
TIM_TimeBaseStructure.TIM_Period = 200;// ARR
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
//TIM_TimeBaseStructure.TIM_RepetitionCounter = 4;
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);

//TIM_PrescalerConfig(TIM4,3599,TIM_PSCReloadMode_Immediate);//72MHz/(3599+1)=20 000HZ 50uS
TIM_ARRPreloadConfig(TIM4,DISABLE);

TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);
TIM_ITConfig(TIM4,TIM_IT_Trigger,ENABLE);
TIM_Cmd(TIM4, DISABLE);

}
APB1是36M时钟,通过分频后产生20KHZ 50us周期的波形。TIM->CNT这个是计数器,在这儿核算TIM_TimeBaseStructure.TIM_Period的值时有必定的规则,便是你收集的凹凸电平最大是多少要知道,比方我收集的波形中的电平最长的是4ms,基准计时器是50us,那么我要核算80个才干到达4ms,所以TIM_TimeBaseStructure.TIM_Period的值必定要比80大,不然就会犯错。这儿要提示我们TIM-CNT的值到达TIM_TimeBaseStructure.TIM_Period的值时,就会清零从头计数如下图。这是使用定时器的TIMX-CNT计数器取得凹凸电平的寄存器装备办法,当然cnt=TIM_GetCounter(TIMx);cnt要乘以50us才是真实的时刻。

假如不必计数器,想在中止里用一个全局变量来表明中止的次数来核算凹凸电平的时长,留意,这种办法或许由于程序功用多而形成不精确,在功用较少的情况下能够测验,那么装备定时器就又要改了,基准仍是50us,
TIM_TimeBaseStructure.TIM_Prescaler =3599; //TIM_CKD_DIV1
这个时分不能考虑最大值了,而是考虑一个最小公约数,比方我要收集的凹凸电平有多少呢,有8ms,4ms,1ms,500us,那么TIM_TimeBaseStructure.TIM_Period的值就有要求了,只要是50us的倍数并和50us相乘后小于500us仍是他的约数就能够了。举个比如

TIM_TimeBaseStructure.TIM_Prescaler = 3599; //
TIM_TimeBaseStructure.TIM_Period=1;//
这两句话代表50us产生一次中止。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/beidong/257169.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部