程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> STM32F103 TIM3定時器初始化程序

STM32F103 TIM3定時器初始化程序

編輯:C++入門知識

//TIM3 分頻
#define	TIM3_DIV1	  (1-1)
#define	TIM3_DIV18	  (18-1)
#define	TIM3_DIV72	  (72-1)


//*************************************
// 函數名:TIM3_NVIC_Configuration
// 描述  :TIM3中斷優先級配置
// 輸入  :無
// 輸出  :無
 	
//*************************************
void TIM3_NVIC_Configuration(void)
{
    NVIC_InitTypeDef NVIC_InitStructure; 
    												
    NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;	  //選擇中斷通道
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //搶占式優先級別值
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;	//響應式中斷優先級別值
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;	   //中斷使能值
    NVIC_Init(&NVIC_InitStructure);						//根據上述值初始化中斷級別
}
//*************************************
// 函數名稱:TIM3_BASEInit
// 函數功能:初始化TIM3 為定時模式
// 入口參數:計數個數 分頻數
// 出口參數:無
// 返回值  :無
//***************************************
void TIM3_BASEInit(uint16_t Tcon,uint16_t psc)
{

  	RCC->APB1ENR |= 1<<1; //定時器3時鐘使能
	TIM3->CR1 |= 1<<7 ;  //設置自動重裝載允許
	TIM3->CR1 &= ~(1<<4) ;  //設置向上計數 
	TIM3->ARR = Tcon ; //定時器計數次數
	TIM3->PSC = psc ;  //設置分頻數
	TIM3->SR  &= ~0x0001;  //清除溢出標志
//	TIM3->DIER |= 1<<6 ;   //允許觸發中斷
//	TIM3->EGR |= 0X0001 ;	  //允許產生更新事件
	TIM3->DIER |= 0X0001 ;   //允許更新中斷
	TIM3->CR1 |= 0X0001 ;   //允許計數

}
//===系統庫操作初始化TIM3=====
void TIM3_BASEInitSys(int16_t Tcon,uint16_t psc)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
    TIM_DeInit(TIM3);            //復位定時器
    TIM_TimeBaseStructure.TIM_Period = Tcon;  //定時器重裝載值
    TIM_TimeBaseStructure.TIM_Prescaler = psc ;         //時鐘預分頻
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;  // 時鐘分頻
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上計數模式
    TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);   //初始化定時器的值

    TIM_ClearFlag(TIM3,TIM_FLAG_Update);    //清除定時器中斷標志 
    TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);  //使能中斷
    TIM_Cmd(TIM3,ENABLE);            //開啟時鐘

}




//---實例應用----
	//用寄存器操作
	TIM3_BASEInit(125,TIM3_DIV72) ; //72M/72 = 1M	125u中斷一次

	//用系統庫操作
//	TIM3_BASEInitSys(125,TIM3_DIV72) ; 	//72M/72 = 1M	125u中斷一次

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved