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參考手冊