welcom ! Handel home

2014年6月17日 星期二

STM32 PWM輸出 demo

基於STM32PWM輸出
                                                   


)
初始化函式定義:
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,否則單片機沒有輸出。





沒有留言: