STM32 HAL庫 CubeMX教程(三)PWM呼吸燈

STM32 HAL庫 CubeMX教程(三)PWM呼吸燈


STM32 HAL庫 CubeMX系列教程 目錄

本教程對應keil完整工程下載:
https://download.csdn.net/download/weixin_43116606/12139146

PWM簡介

控制 PWM 的主要有三個寄存器分別是 :捕獲/比較模式寄存器(TIMx_CCMR1/2)、捕獲/比較使能寄存器(TIMx_CCER)、捕獲/比較寄存器(TIMx_CCR1~4)

在TIMx_CCMRx寄存器中的OCxM位寫入’110’(PWM模式1)或’111’(PWM模式2),能夠獨立地設置每個OCx輸出通道產生一路PWM。 這兩種 PWM 模式的區別就是輸出電平的極性相反 。默認爲PWM模式1,有效電平爲高。

捕獲/比較使能寄存器(TIMx_CCER),該寄存器控制着各個輸入輸出通道的開關。
在這裏插入圖片描述
CC2E 位,該位是輸入/捕獲 2 輸出使能位,要想PWM 從 IO 口輸出,這個位必須設置爲 1 。

捕獲/比較寄存器(TIMx_CCR1~4),該寄存器總共有 4 個,對應 4 個通道 CH1~4。 這個寄存器比較重要:
在這裏插入圖片描述
通過修改這個寄存器的值,就可以控制 PWM 的輸出脈寬了 。輸出原理如下圖:將AAR和CCRx寄存器的值進行比較,輸出高低電平。
在這裏插入圖片描述
一般是將ARR寄存器的值固定,修改CCRx寄存器的值就可以修改佔空比了。

CubeMX配置

在這裏插入圖片描述
定時器配置PA8引腳爲定時器1通道1引腳,此時用作PWM輸出,需要設置的主要有三個參數:
1.預分頻寄存器PSC:決定時鐘頻率,定時器時鐘頻率爲72M,分頻後爲爲72M/(71+1)=1M
2.自動重裝載寄存器ARR:也與定時器時鐘頻率有關,決定PWM輸出週期,此處設置爲999
3.脈衝寬度Pulse:用來設置佔空比,初始化佔空比=500 / 999約=50%

佔空比設置

__HAL_TIM_SET_COMPARE(&htimx,TIM_CHANNEL_y, pulse);
或者
TIM1->CCR1=pulse;
佔空比=pulse / ARR *100%

呼吸燈程序編寫

首先需要使能PWM,函數原型:HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel)

HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);

接下來在while()裏面使佔空比有0~100%再由100%-0緩慢變化,呈現呼吸燈的效果。

while (1)
  {
  if(pwm_dir==0){
   HAL_Delay(10);
   __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1, pwm_pulse++);
   pwm_dir=(pwm_pulse>999)?1:0;
  }
  else if(pwm_dir==1){
   HAL_Delay(10);
   __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1, pwm_pulse--);
   pwm_dir=(pwm_pulse<1)?0:1;
  }

僅供參考,錯誤之處以及不足之處還望多多指教!

參考文獻

[1]: ALIENTEK 精英 STM32F103 開發板教程
[2]: STM32F10xxx參考手冊

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