//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中斷一次