STM32定時器初始化完成後修改頻率問題

2022-09-08 03:09:13 字數 1869 閱讀 1502

問題**:

void

timer_pwm_init

(tim_typedef *timx, uint32_t tim_ch)

;timer_clk_irq_config

(timx,0)

; tim_initstruct.prescaler =71;

tim_initstruct.countermode = ll_tim_countermode_up;

tim_initstruct.autoreload =

999;

tim_initstruct.clockdivision = ll_tim_clockdivision_div1;

ll_tim_init

(timx,

&tim_initstruct)

;ll_tim_disablearrpreload

(timx)

;ll_tim_oc_enablepreload

(timx, tim_ch)

; tim_oc_initstruct.ocmode = ll_tim_ocmode_pwm1;

tim_oc_initstruct.ocstate = ll_tim_ocstate_disable;

tim_oc_initstruct.ocnstate = ll_tim_ocstate_disable;

tim_oc_initstruct.comparevalue =

500;

tim_oc_initstruct.ocpolarity = ll_tim_ocpolarity_high;

ll_tim_oc_init

(timx, tim_ch,

&tim_oc_initstruct)

;ll_tim_oc_disablefast

(timx, tim_ch)

;ll_tim_settriggeroutput

(timx, ll_tim_trgo_reset)

;ll_tim_disablemastersl**emode

(timx)

;timer_io_init()

;}void

timer_pwm_freq_set

(tim_typedef *timx, uint32_t tim_ch, uint16_t freq)

問題現象:

呼叫:timer_pwm_freq_set(tim3, ll_tim_channel_ch4, 1000)

pwm沒問題,1khz,占空比50%

但是,呼叫:timer_pwm_freq_set(tim3,ll_tim_channel_ch4,100)

出問題了,pwm一直是高定平。

問題分析:

因為初始化pwm的頻率為1k,計數週期為500,占空比為50%

但是在後面修改頻率後並未修改計數週期,也就是頻率為100hz,計數週期還是500,計數週期大於頻率了,於是就出現一直高電平的現象。(個人分析的,不知正確與否,應該是這樣的。。。。)

解決方法:

修改頻率的同時也要修改計數週期,要保證計數週期小於頻率,不然占空比比週期還長,自然就一直高定平或者低電平了

**修改:

/**

* @brief 設定pwm輸出頻率

* @param fre取值範圍(1-10000)hz

* @retval 設定完成頻率之後不啟動定時器

*/void

timer_pwm_freq_set

(tim_typedef *timx, uint32_t tim_ch, uint16_t freq)

stm32關定時器 STM32定時器TIM3程式

include led.h include delay.h include key.h include sys.h include usart.h include timer.h stm32開發板實驗8 定時器中斷實驗 int main void delay init 延時函式初始化 nvic co...

stm32的外設初始化步驟,以定時器為例。

我這個程式的目的在於讓定時器開啟更新中斷,實現定時器1s中斷一次然後在中斷函式中led電平翻轉一次。1.首先先開啟這個外設的時鐘 rcc apb2periphclockcmd rcc apb2periph tim1,enable 開啟定時器1 的時鐘apb2 2.定義這個外設的初始化結構體 tim ...

stm32埠初始化

今天上課,點亮數碼管,gpio初始化後,數碼管上有一段亂碼。要讓這亂碼消失掉,需要改變gpio初始化的順序。在gpio埠使能後,要加odr 埠暫存器 控制 gpio inittypedef gpio initstructure 定義乙個結構體 rcc apb2periphclockcmd rcc a...