GD32 GD32設定TIMER0輸出PWM

2021-10-15 00:10:59 字數 2704 閱讀 6424

系統狀態:供電3.3v,系統主頻為8m

目標:使用timer0的ch1在pa9引腳輸出1khz的方波

步驟

1.初始化io口

2.初始化定時器

3.初始化pwm輸出通道

//io口時鐘

rcu_periph_clock_enable

(rcu_gpioa)

;//設定io口,設定為復用模式

gpio_mode_set

(gpioa, gpio_mode_af, gpio_pupd_none, gpio_pin_9)

;//設定io模式

gpio_output_options_set

(gpioa, gpio_otype_pp, gpio_ospeed_50mhz,gpio_pin_9)

;//設定引腳復用哪個功能,這裡設定為pwm

gpio_af_set

(gpioa, gpio_af_2, gpio_pin_9)

;

這裡需要強調一點的是,如果你使用timer0產生pwm的時候必須加上

timer_primary_output_config(timer0,enable);

否則無法輸出pwm!!!注意!

timer_parameter_struct timer_initpara;

//使能定時器時鐘

rcu_periph_clock_enable

(rcu_timer0)

;//定時器復位

timer_deinit

(timer0)

;//注意!當你實用timer0高階定時器的時候必須使能這個,才能有pwm輸出

timer_primary_output_config

(timer0,enable)

;//時鐘分頻系 這裡採用80分頻,下面計數值設定為100 則 8m / 80 / 100 = 1k

timer_initpara.prescaler =80-

1;//邊沿對齊

timer_initpara.alignedmode = timer_counter_edge;

//上公升計數

timer_initpara.counterdirection = timer_counter_up;

//計數值

timer_initpara.period =

100-1;

timer_initpara.clockdivision = timer_ckdiv_div1;

//重複計數器的值

timer_initpara.repetitioncounter =0;

timer_init

(timer0,

&timer_initpara)

;

timer_oc_parameter_struct timer_ocintpara

//是否使能輸出

timer_ocintpara.outputstate = timer_ccx_enable;

//是否互補通道輸出

timer_ocintpara.outputnstate = timer_ccxn_disable;

//輸出極性

timer_ocintpara.ocpolarity = timer_oc_polarity_high;

//輸出死區延遲的極性

timer_ocintpara.ocnpolarity = timer_ocn_polarity_high;

//空閒狀態下通道輸出極性通道

timer_ocintpara.ocidlestate = timer_oc_idle_state_low;

//空閒時互補通道輸出極性

timer_ocintpara.ocnidlestate = timer_ocn_idle_state_low;

//配置通道

timer_channel_output_config

(timer0,timer_ch_1,

&timer_ocintpara)

;//設定閾值(比較值,調節占空比的時候調節這個值)

timer_channel_output_pulse_value_config

(timer0,timer_ch_1,50)

;//輸出模式配置

timer_channel_output_mode_config

(timer0,timer_ch_1,timer_oc_mode_pwm0)

;//不使用影子暫存器

timer_channel_output_shadow_config

(timer0,timer_ch_1,timer_oc_shadow_disable)

;/* 使能定時器自動重裝載值 */

timer_auto_reload_shadow_enable

(timer0)

;/* 使能定時器 */

timer_enable

(timer0)

;

GD32 USB除錯總結

1 usb通訊都是基於中斷完成的,主要使用兩個中斷 復位中斷 資料傳輸中斷。1.1 復位中斷 對於復位中斷來講,裝置插入主機後,並設定連線,主機識別裝置連線後,會復位裝置。復位後使用0預設位址,對裝置進行列舉,列舉過程其實就是獲取裝置的各種描述符。當裝置被主機復位後,裝置會對端點0的相關暫存器進行初...

STM32 GD32上記憶體堆疊溢位探測研究

無數次遭受堆疊溢位折磨,隨著系統變得複雜,故障點越來越難以查詢!主要溢位情況如下 1,一般ram最後兩塊空間是堆heap和棧stack,堆從下往上用,棧從上往下用,任意乙個用完,都會進入對方的空間 2,如果棧用完,進入堆的空間,這個時候系統是不會有任何異常的,也就是說,棧底沒有什麼意義。除非堆和棧指...

GD32 USB除錯 DFU過程問題

1 usb除錯注意事項 最近做乙個專案,用的是gd32f303的mcu,用到了usb資料傳輸的方式,該系列mcu只支援usb的device的模式,不支援otg模式。本人用的是gd32官方提供的庫資訊,因此直接移植了官方的demo。在除錯過程中,除錯了很多天,每次插上usb後,電腦均提示 裝置描述符請...