welcom ! Handel home

2014年6月17日 星期二

ST32教程( 10 )

 STM32筆記之十:[PWM輸出]

a) 
目的:基礎PWM輸出,以及中斷配合應用。輸出選用PB1,配置為TIM3_CH4,是目標板的LED6控制腳。

b) 
對於簡單的PWM輸出應用,暫時無需考慮TIM1的高級功能之區別。

c)  
初始化函式定義:void TIM_Configuration(void);  //定義TIM初始化函數

d)        
初始化函式呼叫:TIM_Configuration();  //TIM初始化函式呼叫

e)        
初始化函數,不同於前面模組,TIM的初始化分為兩部分——基本初始化和通道初始化:

void TIM_Configuration(void)//TIM
初始化函數


  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;//
計時器初始化結構
  TIM_OCInitTypeDef  TIM_OCInitStructure;//
通道輸出初始化結構
//TIM3
初始化
  TIM_TimeBaseStructure.TIM_Period = 0xFFFF;        //
週期0FFFF
  TIM_TimeBaseStructure.TIM_Prescaler = 5;          //
時鐘分頻
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;      //
時鐘分割
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//
模式
  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);   //
基本初始化
  TIM_ITConfig(TIM3, TIM_IT_CC4, ENABLE);//
打開中斷,中斷需要這行代碼


//TIM3通道初始化
  TIM_OCStructInit(& TIM_OCInitStructure);                                                //
默認參數
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;                    //
工作狀態
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;         //
設定為輸出,需要PWM輸出才需要這行代碼
  TIM_OCInitStructure.TIM_Pulse = 0x2000;                                 //
占空長度
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;                 //
高電平
  TIM_OC4Init(TIM3, &TIM_OCInitStructure);                                 //
通道初始
  TIM_Cmd(TIM3, ENABLE);                                                                        //
啟動TIM3
}

f)        RCC
初始化函數中加入TIM時鐘開啟:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM3, ENABLE);

g)        GPIO
裡面將輸入和輸出管腳模式進行設置。信號:AF_PP50MHz


h)        
使用中斷的話在NVIC裡添加如下代碼:
//
打開TIM2中斷
  NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel;  //
通道
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;//
佔先級
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;           //
回應級
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;         //
啟動
  NVIC_Init(&NVIC_InitStructure);                                          //
初始化


//中斷代碼:
void TIM2_IRQHandler(void)
{
  if (TIM_GetITStatus(TIM2, TIM_IT_CC4) != RESET)       //
判斷中斷來源
  {
    TIM_ClearITPendingBit(TIM2, TIM_IT_CC4);            //
清除中斷標誌
    GPIO_WriteBit(GPIOB, GPIO_Pin_11, (BitAction)(1-GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_11)));//
變換LED色彩
    IC4value = TIM_GetCapture4(TIM2);                   //
獲取捕捉數值
  }  
}


i)       
簡單應用:
//
改變占空比
TIM_SetCompare4(TIM3,
變數);


j)        
注意事項:

管腳的IO輸出模式是根據應用來定,比如如果用PWM輸出驅動LED則應該將相應管腳設為AF_PP,否則單片機沒有輸出。   




沒有留言: