5.STM32通用定時器TIM3中斷


 
        

1.通用定時器TIM3中斷

#include "timer.h"
#include "led.h"
void TIM3_Int_Init(u16 arr,u16 psc)
{
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;
    
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);  //使能TIM3時鍾
    
    TIM_TimeBaseInitStructure.TIM_Period = arr;     //自動重裝載值
    TIM_TimeBaseInitStructure.TIM_Prescaler=psc;  //定時器分頻
    TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上計數
    TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; 
    
    TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);//初始化TIM3
    
    TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //使能TIM3更新中斷
    TIM_Cmd(TIM3,ENABLE); //使能TIM3
    
    NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn; //定時器3中斷
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01; //搶占優先級1
    NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; //響應優先級3
    NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    
}

//終端服務函數
void TIM3_IRQHandler(void)
{
    if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中斷
    {
        LED1=!LED1;//LED1翻轉
    }
    TIM_ClearITPendingBit(TIM3,TIM_IT_Update);  //清楚中斷標志位

該文件下包含一個中斷服務函數和一個定時器 3 中斷初始化函數,中斷服務函數比較簡單,
在每次中斷后,判斷 TIM3 的中斷類型,如果中斷類型正確,則執行 LED1的翻轉。

2.Tout= ((arr+1)*(psc+1))/Tclk

其中:

arr:自動重裝值。 psc:時鍾預分頻數
TclkTIM3 的輸入時鍾頻率(單位為 Mhz)。
ToutTIM3 溢出時間(單位為 us)。 

定時器溢出時間計算方法:Tout=((arr+1)*(psc+1))/Ft us.

 


免責聲明!

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



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