了解Timer以及TIM_RepetitionCounter參數的作用——TimerTimer


當 TIM_RepetitionCounter 參數設置為0 時,時間周期不翻倍。

當 TIM_RepetitionCounter 參數設置為1 時,時間周期翻1倍。
當 TIM_RepetitionCounter 參數設置為2 時,時間周期翻2倍。

1

如下,定時了0.001s,然后在中斷中計數1000次,點亮熄滅LED,正常情況來說,led會亮1s,然后滅1s,,,不斷重復。
當 TIM_RepetitionCounter 參數設置為0 時,確實是1s。
image
image
當 TIM_RepetitionCounter 參數設置為1 時,明顯感覺到亮滅的時間被延長了一倍。
所以 TIM_RepetitionCounter 應該是在本次定時結束后,再重裝載定時 1次,進入中斷,所以

當TIM_RepetitionCounter =1時,相當於定時0.001s ,計時1S滿2次之后進入中斷,那么led的亮滅時間就變成了2s。

當TIM_RepetitionCounter =2時,相當於定時0.001s ,計時1S滿3次之后進入中斷,那么led的亮滅時間就變成了3s。

2

這次看懂一個 定時器的通道輸出PWM 用於控制 一盞小燈的亮滅。
以下是全部內容,主要是害怕作者把東西給刪除了,或者說放在那里我就不會去看了,寫在自己家比較安心,所以必須狠狠記下。
原文鏈接:http://bbs.eeworld.com.cn/thread-1076944-1-1.html

本次實驗的主要目的是為后期的實戰做前期准備,利用GD32E231C_START評估板上的用戶按鍵“KEY”控制定時器"TIMER2_CH1"的PWM輸出,用以改變LED1的亮度。

一、實驗資源

1、GD32E231C_START評估板;
2、Keil v5.27.1.0;
3、GigaDevice.GD32E23x_DFP.1.0.0.pack;
4、GD32E23x_Demo_Suites_V1.0.1;
5、GD32E231C_START開發板相關文檔;
6、邏輯分析儀。

二、實驗過程

1、資源配置。

GD32E231C8T6具有非常豐富的定時器資源,這其中包括1個高級定時器TIMER0;5個通用定時器TIMER(2,13~16);1個基本定時器TIMER5,當然還包括RTC等等。
結合數據手冊及評估板原理圖可以看到四個LED分別受控於PA7、PA8、PA11、PA12引腳,其中的PA7引腳的復用功能包含了通用定時器TIMER2的“TIMER2_CH1”,同時PB5引腳同樣也可復用為“TIMER2_CH1”,正好PB5已被“JP9”引出方便外部測試,於是本次實驗的定時器資源使用了通用定時器TIMER2。
還有就是利用了接在PA0上按鍵“KEY”,高電平有效,用以調整PWM輸出信號的占空比。
imageimageimageimage

2、程序實現。

參考了官方提供的例程,首先PA7引腳進行相應配置,要注意的是打開PA7引腳“TIMER2_CH1”的復用功能“AF1”;然后對TIMER2_CH1通道PWM輸出進行相應配置並使能PWM輸出。

下面是主函數:

int main(void)
{
	systick_config();

	KEY_PORT_Init();
	PWM_Config();
	while(1)
	{
		KEY_Scan();//用於調整PWM輸出占空比
	}
}


#define PWM_OUT_PORT            GPIOA
#define PWM_OUT_PIN             GPIO_PIN_7
#define PWM_OUT_PORT_CLK        RCU_GPIOA

“TIMER2_CH1”通道PWM輸出配置函數:

void PWM_Config(void)
{
		timer_oc_parameter_struct 			timer_ocintpara;
		timer_parameter_struct 				timer_initpara;
		rcu_periph_clock_enable(PWM_OUT_PORT_CLK);
		rcu_periph_clock_enable(RCU_TIMER2);

		gpio_mode_set(PWM_OUT_PORT,GPIO_MODE_AF,GPIO_PUPD_NONE ,PWM_OUT_PIN);
		gpio_output_options_set(PWM_OUT_PORT,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,PWM_OUT_PIN);//PA7(TIMER2_CH1)
		gpio_af_set(PWM_OUT_PORT,GPIO_AF_1,PWM_OUT_PIN);//配置PA7引腳復用功能為TIEMR2_CH1

		timer_deinit(TIMER2);

		/* TIMER2 configuration */
		timer_initpara.prescaler         = 719;//預分頻器值72M/(719+1)=100KHz
		timer_initpara.alignedmode       = TIMER_COUNTER_EDGE;//對齊模式
		timer_initpara.counterdirection  = TIMER_COUNTER_UP;
		timer_initpara.period            = 999;//周期值,此值確定了PWM輸出的周期
		timer_initpara.clockdivision     = TIMER_CKDIV_DIV1;//時鍾分頻值
		timer_initpara.repetitioncounter = 0;//計數器重復值
		timer_init(TIMER2,&timer_initpara);

		 /* CH0 configuration in PWM mode */
		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(TIMER2,TIMER_CH_1,&timer_ocintpara);

		timer_channel_output_pulse_value_config(TIMER2,TIMER_CH_1,0);
		timer_channel_output_mode_config(TIMER2,TIMER_CH_1,TIMER_OC_MODE_PWM0);
		timer_channel_output_shadow_config(TIMER2,TIMER_CH_1,TIMER_OC_SHADOW_DISABLE);

		timer_primary_output_config(TIMER2,ENABLE);
		timer_auto_reload_shadow_enable(TIMER2);
		timer_enable(TIMER2);
}

按鍵函數:

void KEY_Scan(void)
{
	static uint8_t num=0;

	if(KEY==1)
	{
		delay_1ms(20);
		if(KEY==1)
		{
			num++;
			if(num==5)
			num=1;
		}

		switch (num)
		{
				case 1:timer_channel_output_pulse_value_config(TIMER2,TIMER_CH_1,900);break;        //占空比90%
				case 2:timer_channel_output_pulse_value_config(TIMER2,TIMER_CH_1,650);break;        //占空比65%
				case 3:timer_channel_output_pulse_value_config(TIMER2,TIMER_CH_1,300);break;        //占空比30%
				case 4:timer_channel_output_pulse_value_config(TIMER2,TIMER_CH_1,0);break;                //占空比0
				default:break;
		}
		while(KEY==1);
	}
}

3、實驗結果

image

4、測試占空比

  為方便測試,將“TIMER2_CH1”通道PWM輸出功能轉移至PB5引腳,直接在預定義中修改:

#define PWM_OUT_PORT                        GPIOB
#define PWM_OUT_PIN                         GPIO_PIN_5
#define PWM_OUT_PORT_CLK         			RCU_GPIOB

然后接上邏輯分析儀進行測試,通過按鍵“KEY”可對輸出信號的占空比進行相應的調整,測試如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM