×
单片机 > 单片机程序设计 > 详情

STM32-高级定时器TIM1的应用

发布时间:2020-08-21 发布时间:
|

void GPIO_Configuration(void)//配置IO脚

{

       GPIO_InitTypeDef GPIO_InitStructure;

       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;      

       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

       GPIO_Init(GPIOA, &GPIO_InitStructure);

       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;      

       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

       GPIO_Init(GPIOB, &GPIO_InitStructure);

}

void TIM1_Configuration(void)

{

       RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);

       RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

       RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

       TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

       TIM_OCInitTypeDef TIM_OCInitStructure;

       TIM_DeInit(TIM1); //重设为缺省值

      TIM_TimeBaseStructure.TIM_Prescaler = 4000;      //预分频(时钟分频)72M/4000=18K

      TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //向上计数

      TIM_TimeBaseStructure.TIM_Period = 144;       //装载值 18k/144=125hz 就是说向上加的144便满了

      TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;   //设置了时钟分割 不懂得不管

      TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0;    //周期计数器值 不懂得不管

      TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);    //初始化TIMx的时间基数单位

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;      //PWM模式2

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //正向通道有效 PA8 

TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; //反向通道也有效 PB13

TIM_OCInitStructure.TIM_Pulse = 40;         //占空时间 144 中有40的时间为高,互补的输出正好相反

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性

TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;    //互补端的极性 

TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset; //空闲状态下的非工作状态 不管

TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset; //先不管

TIM_OC1Init(TIM1,&TIM_OCInitStructure);       //数初始化外设TIMx通道1这里2.0库为TIM_OCInit

TIM_Cmd(TIM1,ENABLE);

TIM_CtrlPWMOutputs(TIM1,ENABLE);      

}

void SetT1Pwm1(u16 pulse)//设置捕获寄存器1

{

        TIM1->CCR1=pulse;

}

/*TIM1的定时器通道时间 1到4 分别为 PB8 PA9 PA10 PA11 而互补输出分别为 PB13 、PB14 、PB15、 PB12

 

如果输出与互补输出极性相同的话 就刚好输出高 互补低 至于PWM模式1 与模式2的区别。如下图模式一:



模式2与模式1互补,144中有40 为高 互补的有40为低。


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
AVR熔丝位操作时的要点和需要注意的相关事项