其實(shí)對(duì)于一個(gè)電子工程師來(lái)講 PWM應(yīng)該是很平常的基本知識(shí) 這里只是復(fù)習(xí)一下 因?yàn)轫?xiàng)目中要用到 所以對(duì)于一些細(xì)節(jié)要再一次的重申一下 這里不講PWM的原理知識(shí) 直接從寄存器和標(biāo)準(zhǔn)庫(kù)入手藏杖。
首先要注意的是stm32f2 的定時(shí)器是在APB上面 下面是時(shí)鐘樹(shù):
底下是官方文檔的幾段話:
由圖和這幾段話可以看出 定時(shí)器是掛在APB1上面 而APB1的最高時(shí)速是30Mhz 那么也就是說(shuō)定時(shí)器最大的頻率是30Mhz.
注意 TIMx_ARR 取決了 整個(gè)pwm的頻率念逞。
好了 開(kāi)始看PWM: 首先stm32的PWM有兩種模式 PWM1 和PWM2
PWM1 當(dāng)TIMX_CCRX<= TIMX_CNT 的時(shí)候?? OCxREF 為高。
PWM2 當(dāng)TIMx_CNT <= TIMX_CCRX的時(shí)候? OCxREF 為低 兑障。
我們來(lái)看一下這幾個(gè)寄存器是作用: 首先是TIMX_CCRX : 這個(gè)是捕獲或者是比較寄存器 在捕獲功能中當(dāng)捕獲計(jì)時(shí)作用 在PWM中用作比較寄存器 這個(gè)數(shù)字會(huì)被在設(shè)置pwm的時(shí)候設(shè)置矾柜,這個(gè)寄存器會(huì)和TIMx_CNT進(jìn)行比較 TIMx_CNT寄存器是定時(shí)器的計(jì)數(shù)器 也就說(shuō)這個(gè)計(jì)數(shù)器會(huì)在程序運(yùn)行的時(shí)候自動(dòng)加減译株。? OCxREF寄存器是reference 為了區(qū)分pwm模式的
當(dāng)使用PWM1 的時(shí)候: 當(dāng)向上計(jì)數(shù)的時(shí)候 若 TIMx_CNT <= TIMX_CCRX 輸出的通道為有效電平(有效電平可以設(shè)置成高電平或者低電平) 如果反之這為無(wú)效電平耻卡。 在向下計(jì)數(shù)的時(shí)候如果TIMX_CCRX<= TIMX_CNT 則為無(wú)效電平 反之則為有效電平吉执。
PWM2: 模式當(dāng)向上計(jì)數(shù)的時(shí)候如果 TIMx_CNT<TIMx_CCR1 則為無(wú)效電平 反之為有效電平疯淫。在向下計(jì)數(shù)的時(shí)候當(dāng) TIMx_CNT>TIMx_CCR1的時(shí)候?yàn)橛行щ娖?反之為無(wú)效電平。
配置過(guò)程:?
? ? ? ? ? ? ? ? 1. 首先配置時(shí)鐘: 打開(kāi)相應(yīng)的PWM所需要的定時(shí)器的時(shí)鐘
? ? ? ? ? ? ? ? 2. 配置基本定時(shí)器(為了配置頻率arr的值)
? ? ? ? ? ? ? ?3. 配置PWM的變量: TIM_OCMode: 設(shè)置pwm的模式 PWM1 或者PWM2
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?TIM_OutputState:? 是否輸出PWM?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?TIM_Pulse: 需要存儲(chǔ)的比較值(就是存入到TIMx_CCR1)的值戳玫。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?TIM_OCPolarity: 輸出的有效極性是什么
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TIM_Output_Compare_Idle_State: 無(wú)效的極性是什么熙掺。
一些配置的函數(shù):?TIM_OCxInit: 配置通道
? ? ? ? ? ? ? ? ? ? ? ? ? TIM_SelectOCxM 重新選擇通道的輸出模式
? ? ? ? ? ? ? ? ? ? ? ? ?TIM_SetComparex: 比較定時(shí)器里面的值和新填裝的CCRx里面的值