STM32F103之Timer2PWM输出

版权声明:喝水不忘挖井人,转载请注明出处,[email protected]。 https://blog.csdn.net/qq_18842031/article/details/78568508

本篇博文最后修改时间:2018年05月24日 13:43。

一、简介

本文以STM32F103编程为例,介绍STM32F103Timer2 PWM输出。

二、实验平台

电脑平台:Windows7 64位旗舰

编译软件:IAR

硬件平台:STM32F103CB

三、版权声明

博主:_懵懂

声明:此博客仅供参考不做任何商业用途,最终解释权归原博主所有。

原文地址:http://blog.csdn.NET/qq_18842031

懵懂之MCU交流群:136384801

四、实验前提

1、在进行本文步骤前,请先安装IAR Embedded Workbench 5.4版本;准备好STM32F103CB硬件平台。

         

五、基础知识

暂无

六、源码地址

暂无

七、关联文章

暂无

八、实验内容

1.初始化Timer2

void Hal_Init_Pwm(uint16 period,uint16 Prescaler)
{  
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); /*开定时器2时钟*/
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); /*GPIO时钟开启*/
  
  /*引脚配置*/
  GPIO_InitTypeDef        GPIO_InitStructure;                   /*配置GPIO*/
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_1;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                /*复用输出*/
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);  
  /*配置TIMER2*/
  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;                  /*配置TIMER2*/
  TIM_DeInit(TIM2);                                               /*初始化定时器2*/
  TIM_TimeBaseStructure.TIM_Period = period;                      /*重装值 计数到最大为3600-1 然后从0开始*/
  TIM_TimeBaseStructure.TIM_Prescaler = Prescaler;                /*分频系数*/
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;        /*时钟分割*/
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;     /*向上计数*/
  TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;  
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
  /*配置TIMER2PWM输出*/
  TIM_OCInitTypeDef       TIM_OCInitStructure;                    /*配置TIMER2PWM输出*/
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;               /*PWM2模式输出*/
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;   /*比较输出使能*/
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;        /*输出极性高 输出高电平*/
  /*通道1*/
//  TIM_OCInitStructure.TIM_Pulse =40*36;
//  TIM_OC1Init(TIM2, &TIM_OCInitStructure);
//  TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);
  /*通道2*/
  TIM_OCInitStructure.TIM_Pulse =0;           /*设置占空比*/
  TIM_OC2Init(TIM2, &TIM_OCInitStructure);         /*初始化外设TIMx 通道*/
  TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);/*CH1预装载使能*/
  /*通道3*/
//  TIM_OCInitStructure.TIM_Pulse =90*36;       
//  TIM_OC3Init(TIM2, &TIM_OCInitStructure);
//  TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);
  /*通道4*/
//  TIM_OCInitStructure.TIM_Pulse =0*36;
//  TIM_OC4Init(TIM2, &TIM_OCInitStructure);
//  TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);
  TIM_ARRPreloadConfig(TIM2, ENABLE);   /*使能TIMx在ARR上的预装载寄存器*/
  TIM_Cmd(TIM2, ENABLE);                /*使能定时器2*/
}

2.编写主函数

void main(void)
{
  Init_Clock();                  /*初始化时钟*/
  Hal_Init_Pwm(64000-1,0);       /* F =  PLL / (64000-1) */
  TIM_SetCompare2(TIM2,50*640);  /*输出占空比为50%*/
  while(1);
}

猜你喜欢

转载自blog.csdn.net/qq_18842031/article/details/78568508