前言
前面我說過stm32的定時器功能很強大,今天就來總結一下它的另外乙個「強大」功能:tim的比較輸出功能,輸出可調pwm波形。直接呼叫函式介面「tim2_ch1_pwm(uint32_t freq, uint16_t dutycycle)」傳入頻率和占空比就能輸出指定的波形。
我提供的軟體工程直接呼叫是比較簡單就能實現想要的pwm波形。但是,如果你是學習者,建議還是進去函式把每乙個細節了解清楚,裡面的東西可能對你掌握tim很有幫助。
st標準外設庫和參考手冊、資料手冊等都可以在
st官網
stm32f0x128參考手冊v8(英文)2015-07
」建議參考該手冊,以後如果你換用一種型號晶元也方便了解。
準備工作
建議準備
f0的參考手冊和資料手冊,方便查詢相關知識,沒有的請到
st官網或
比較輸出原理
看下面框圖,計數器的時鐘從rcc處來,經過分頻之後達到計數器,經過比較器進行比較,達到設定值,產生乙個事件對應引腳翻轉。主要就是這三個暫存器:過載值、計數值、比較值。說到這裡若還不明白請仔細想一下。
配置過程詳情
函式位於bsp.c檔案下面;
我個人習慣第一步配置時鐘,st官方提供的例程也是把配置時鐘放在前面。關於
rcc時鐘的配置比較重要,有好幾次我就是由於忘記配置相應
rcc時鐘,讓我找了很久的問題,最後才發現是
rcc時鐘沒有配置。
注意:外設時鐘不要隨便新增,比如:rcc_apb1
外設不要配置在
rcc_apb2
時鐘裡面【如:rcc_apb2periphclockcmd(rcc_ahbperiph_dma1, enable);
這樣能編譯過,但是錯誤的】
我每次都提醒rcc
時鐘,是因為很多人就是因為時鐘而導致軟體執行有問題,所以,提醒更多人要注意配置
注意:復用功能必須配置好,上面兩處,有一處沒配置好,對應引腳都不會輸出pwm
波形。
注意:決定輸出頻率和占空比主要由這三個引數(tim2_prescaler_value、tim2_period、tim2_pulse)決定的。
以今天工程輸出1khz,20%來舉例說明:
tim2_prescaler_value = 72m / 36m - 1 = 1,注意tim_prescaler這個引數被賦值1則證明是當前時鐘除以2如果是0則表示不分頻
tim2_period = 36000 - 1
tim2_pulse = 7200
④重點a.細心研究過**的人會發現tim_ocmode_pwm1,還有乙個tim_ocmode_pwm2,這兩個的區別是什麼呢? 答案是:輸出的極性(也就是方向)不一樣。
這時候又有人問:那下面的輸出極性tim_ocpolarity_high與上面的關係是什麼呢?答案是:這兩個引數配合一起輸出決定pwm波形的極性。
也就是說不同引數可以達到一樣的效果,下圖引數的配置同樣可以輸出一樣的波形。
感興趣的朋友可以試著修改測試一下效果。
b.今天的工程可以設定週期性中斷(也就是1ms中斷一次),感興趣的朋友可以試著寫一下。使用串列埠列印測試的話,盡量頻率低一點,不然串列埠響應不過來。
STM32F0xx TIM基本延時配置詳細過程
前言 關於定時器大家都應該不會陌生,因為處理器都有這個功能。今天總結的f0系列晶元的定時器根據晶元型號不同,數量也不同。定時器分類 基本定時器 通用定時器和高階定時器。計數字數也有不同,有16位的,有32位的。當然,有的晶元功能強大一點,上面功能都有。有的功能很簡單,32位,基本定時器這些都沒有。所...
STM32F103RC用PB0引腳輸出PWM波形
本次專案中遇到了定時器的pwm功能,之前沒有使用過這個功能,除錯好後做以下記錄。我使用的是stm32f103rct6微控制器,使用了pb0引腳。工程需求是通過pb0的pwm輸出50hz,占空比可調的波形。理論部分不多說,網上有很多好的資源,以及st官方的文件描述的很詳盡。stm32 pwm功能,可以...
STM32f103ZET6 TIM8輸出PWM波形
定時器8屬於高階定時器,只存在於大容量產品的103系列中,定時器8輸出pwm波形時與通用定時器2 3 4 5不同,必須同時開啟主輸出 tim8 bdtr 0x8000 才能產生pwm波,其配置如下 1 2函式名稱 void tim4 pwm init u16 arr,u16 psc 3功 能 通用t...