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