STM32F4之定時器

STM32F407有14個定時器,其中有12個16位的定時器,2個32位的定時器

這幾種定時器的區別

 

定時器的溢出時間計算:

Tout(溢出時間)=ARR+1)(PSC+1)/Tclk

ARR:自動重裝載寄存器,用於裝載計數器

PSC:PSC預分頻器(分頻範圍1~65535)

Tclk:USART1的外設時鐘週期,可以在STM32F407的芯片手冊中找到時鐘框圖

用定時器3,做一個實驗:

目標使用定時器進行500ms的led閃爍

    //聲明一個GPIO結構體變量
	GPIO_InitTypeDef GPIO_InitStructure;
	//聲明一個定時器結構體變量
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructrue;
	//聲明一箇中斷優先分組的結構體變量
	NVIC_InitTypeDef NVIC_InitStructure;
	//使能GPIO外設時鐘
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
	//定義一個GPIO結構體變量
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9 |GPIO_Pin_10;//對應引腳分別接到Led0,led1
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;         //GPIO爲輸出模式
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;    //100MHZ
	GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;	    //推輓輸出
	GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;		    //上拉­
	GPIO_Init(GPIOF,&GPIO_InitStructure);
	
	//¶設置定時器中斷的優先分組
	NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;   //搶佔優先級爲1
	NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03;		     //響應優先級爲3
	TIM_TimeBaseInitStructrue.TIM_Period=4999;     //Tout=(ARR+1)(PSC+1)/Tclk   (4999+1)(8399+1)/(1/84M)
	TIM_TimeBaseInitStructrue.TIM_Prescaler=8399;
	TIM_TimeBaseInitStructrue.TIM_CounterMode=TIM_CounterMode_Up;
	TIM_TimeBaseInitStructrue.TIM_ClockDivision=TIM_CKD_DIV1;
	//使能定時器3的外設時鐘
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
	
	//初始化定時器3
	TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructrue);

	//設置優先級分組  爲組2
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	//初始化優先級分組
	NVIC_Init(&NVIC_InitStructure);
    //配置定時器的中斷的中斷源
	TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
	//使能定時器3
	TIM_Cmd(TIM3,ENABLE);
	while(1)
    {
       //無限循環等待中斷
    }
	
}
//定時器3的中斷函數
void TIM3_IRQHandler(void)
{
	if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET)
	{
		LED0=!LED0;
    LED1=!LED1;
		TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
	}
}

此時就可以進行led每隔500ms翻轉

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章