系統狀態:供電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後,電腦均提示 裝置描述符請...