STM32通用定時(shí)器的PWM
PWM輸出模式
STM32的PWM輸出有兩種模式,模式1和模式2,由TIMx_CCMRx寄存器中的OCxM位確定的(“110”為模式1,“111”為模式2)。模式1和模式2的區(qū)別如下:
110:PWM模式1-在向上計(jì)數(shù)時(shí),一旦TIMx_CNT
111:PWM模式2-在向上計(jì)數(shù)時(shí),一旦TIMx_CNT
由此看來,模式1和模式2正好互補(bǔ),互為相反,所以在運(yùn)用起來差別也并不太大。
而從計(jì)數(shù)模式上來看,PWM也和TIMx在作定時(shí)器時(shí)一樣,也有向上計(jì)數(shù)模式、向下計(jì)數(shù)模式和中心對(duì)齊模式,關(guān)于3種模式的具體資料,可以查看《STM32參考手冊(cè)》的“14.3.9 PWM模式”一節(jié),在此就不詳細(xì)贅述了。
PWM的輸出管腳是確定好的,具體的引腳功能可以查看《STM32參考手冊(cè)》的“8.3.7定時(shí)器復(fù)用功能重映射”一節(jié)。在此需要強(qiáng)調(diào)的是,不同的TIMx有分配不同的引腳,但是考慮到管腳復(fù)用功能,STM32提出了一個(gè)重映像的概念,就是說通過設(shè)置某一些相關(guān)的寄存器,來使得在其他非原始指定的管腳上也能輸出PWM。但是這些重映像的管腳也是由參考手冊(cè)給出的。比如說TIM3的第2個(gè)通道,在沒有重映像的時(shí)候,指定的管腳是PA.7,如果設(shè)置部分重映像之后,TIM3_CH2的輸出就被映射到PB.5上了,如果設(shè)置了完全重映像的話,TIM3_CH2的輸出就被映射到PC.7上了。
PWM輸出的是一個(gè)方波信號(hào),信號(hào)的頻率是由TIMx的時(shí)鐘頻率和TIMx_ARR預(yù)分頻器所決定的。而輸出信號(hào)的占空比則是由TIMx_CRRx寄存器確定的。其公式為“占空比=(TIMx_CRRx/TIMx_ARR)*100%”,因此,可以通過向CRR中填入適當(dāng)?shù)臄?shù)來輸出自己所需的頻率和占空比的方波信號(hào)。
//初始化TIM3TIM_TimeBaseStructure.TIM_Period = arr; //設(shè)置在下一個(gè)更新事件裝入活動(dòng)的自動(dòng)重裝載寄存器周期的值TIM_TimeBaseStructure.TIM_Prescaler =psc; //設(shè)置用來作為TIMx時(shí)鐘頻率除數(shù)的預(yù)分頻值 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設(shè)置時(shí)鐘分割:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上計(jì)數(shù)模式TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時(shí)間基數(shù)單位//初始化TIM3 Channel1 PWM模式 TIM_OCInitStructure.TIM_Pulse = 0x7FF; //設(shè)置占空比-可以初始化是設(shè)置也可以后面調(diào)用函數(shù)設(shè)置TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //選擇定時(shí)器模式:TIM脈沖寬度調(diào)制模式2TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //輸出極性:TIM輸出比較極性低TIM_OC1Init(TIM3, &TIM_OCInitStructure); //根據(jù)T指定的參數(shù)初始化外設(shè)TIM3 OC1
此處的TIM_TimeBaseStructure.TIM_Period = arr;設(shè)置TIMx_ARR,TIM_OCInitStructure.TIM_Pulse = 0x7FF;設(shè)置TIMx_CRRx。實(shí)際的波形由CNT和CRR比較,CNT自增從0~arr,到arr后復(fù)位為0.當(dāng)cntarr時(shí)高電平。
評(píng)論