STM32F103之Timer2PWM輸出



本篇博文最後修改時間:2018年05月24日 13:43。




一、簡介

本文以STM32F103編程爲例,介紹STM32F103Timer2 PWM輸出。


二、實驗平臺

電腦平臺:Windows7 64位旗艦

編譯軟件:IAR

硬件平臺:STM32F103CB


三、版權聲明

博主:_懵懂

聲明:此博客僅供參考不做任何商業用途,最終解釋權歸原博主所有。

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

QQ:951795235

E-mail [email protected]

懵懂之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);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章