配置過程:(以tim3為例,其ch1-ch4為:pa6、pa7、pb0、pb1)
1)開啟tim3時鐘,配置4個io口為復用推挽輸出。
2)設定tim3的arr和psc來控制pwm的週期。
3)設定tim3的ch1-ch4的pwm模式及通道方向,使能tim3的ch1-ch4輸出。
4)使能tim3。
程式如下:
/*
* 函式名:tim3_gpio_config
* 描述 :配置tim3復用輸出pwm時用到的i/o
* 輸入 :無
* 輸出 :無
* 呼叫 :內部呼叫
*/void tim3_gpio_config(void)
/* * 函式名:tim3_mode_config
* 描述 :配置tim3輸出的pwm訊號的模式,如週期、極性、占空比
* 輸入 :無
* 輸出 :無
* 呼叫 :內部呼叫
*/void tim3_mode_config(void)
/* * 函式名:tim3_pwm_init
* 描述 :tim3 輸出pwm訊號初始化,只要呼叫這個函式
* tim3的四個通道就會有pwm訊號輸出
* 輸入 :無
* 輸出 :無
* 呼叫 :外部呼叫
*/void tim3_pwm_init(void)
1)定時時間計算:(以定時1s為例)
((1+tim_prescaler )/72m)*(1+tim_period )=((1+7199)/72m)*(1+9999)=1秒 */
定時器的基本設定:
tim_timebasestructure.tim_prescaler = 7199;//時鐘預分頻數 例如 :時鐘頻率=72/(時鐘預分頻+1)
tim_timebasestructure.tim_period = 9999; // 自動重裝載暫存器週期的值
tim_timebasestructure.tim_countermode = tim1_countermode_up; //定時器模式 向上計數
tim_timebasestructure.tim_clockdivision = 0x0; //時間分割值
tim_timebaseinit(tim2, &tim_timebasestructure);//初始化定時器2
tim_itconfig(tim2, tim_it_update, enable); //開啟中斷 溢位中斷
tim_cmd(tim2, enable);//開啟定時器
或者:tim_timebasestructure.tim_prescaler = 35999;//分頻35999 72m/
(35999+1)/2=1hz 1秒中斷溢位一次
tim_timebasestructure.tim_period = 2000; //計數值2000
((1+tim_prescaler )/72m)*(1+tim_period )=((1+35999)/72m)*(1+2000)=1秒 */
2)pwm ch1輸出模式(
tim_ocmode )配置:
pwm1模式是:在向上計數時,當timx_cnt在向下計數時,當timx_cnt>timx_ccrn時,通道n輸出為無效電平,否則為有效電平;pwm2模式與pwm1模式相反。其中有效電平是指tim_ocpolarity 的值,上面例子中有效電平為高電平。
tim_ocxpreloadconfig(tim3, tim_ocpreload_enable);配置了各通道的比較暫存器tim_crr預裝載使能;使用tim_arrpreloadconfig()把過載暫存器timx_arr使能,最後用tim_cmd()使能定時器tim3,定時器外設就開始工作了。
stm32通用定時器
stm32的定時器是個強大的模組,定時器使用的頻率也是很高的,定時器可以做一些基本的定時,還可以做pwm輸出或者輸入捕獲功能。時鐘源問題 名為timx的有八個,其中tim1和tim8掛在apb2匯流排上,而tim2 tim7則掛在 apb1匯流排上。其中tim1 tim8稱為高階控制定時器 adva...
STM32通用定時器配置
stm32通用定時器配置 一 stm32 通用定時器原理 stm32 系列的cpu 有多達8 個定時器,其中tim1 和tim8 是能夠產生三對pwm 互補輸出的高階定時器,常用於三相電機的驅動,它們的時鐘由apb2 的輸出產生。其它6 個為普通定時器,時鐘由apb1 的輸出產生。下圖是stm32參...
STM32 通用定時器的輸出PWM功能 學習筆記
首先來說,你要使用pwm模式你得先選擇用哪個定時器來輸出pwm吧!除了tim6 tim7這兩個普通的定時器無法輸出pwm外,其餘的定時器都可以輸出pwm,每個通用定時器可以輸出4路pwm,高階定時器tim1 tim8每個可輸出7路pwm。選好定時器及通道後,下一步就是要使能定時器的時鐘。先貼 再對每...