STM32F103ZE有8個定時器,其中2個高級定時器 TIM1、TIM8(帶死區(qū)控制),
4個通用定時器(TIM2、TIM3、TIM4、TIM5),2個基本定時器(TIM6、TIM7),沒捕獲比較通道,主要用于驅動DAC。下表是對這8個定時器的詳細描述。
一、使用例程代碼:文章來源:http://www.zghlxwxcb.cn/news/detail-661609.html
//
//通用定時器3中斷初始化
//這里時鐘選擇為APB1的2倍,而APB1為36M
//arr:自動重裝值。
//psc:時鐘預分頻數(shù)
//這里使用的是定時器3!
void TIM3_Int_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //時鐘使能
//定時器TIM3初始化
TIM_TimeBaseStructure.TIM_Period = arr; //設置在下一個更新事件裝入活動的自動重裝載寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //設置用來作為TIMx時鐘頻率除數(shù)的預分頻值
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //設置時鐘分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上計數(shù)模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根據(jù)指定的參數(shù)初始化TIMx的時間基數(shù)單位
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中斷,允許更新中斷
//中斷優(yōu)先級NVIC設置
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中斷
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占優(yōu)先級0級
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //從優(yōu)先級3級
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器
//TIM_Cmd(TIM3, ENABLE); //使能TIMx
TIM_Cmd(TIM3, DISABLE); //失能TIMx
}
//定時器3中斷服務程序
void TIM3_IRQHandler(void) //TIM3中斷
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //檢查TIM3更新中斷發(fā)生與否
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx更新中斷標志
//插入中斷執(zhí)行代碼
}
}
二、定時時間計算:文章來源地址http://www.zghlxwxcb.cn/news/detail-661609.html
Tout(溢出時間) = (ARR + 1)(PSC +1)/Tclk
Tclk = 72M,PSC設為7199,72M/7200 = 10K; T = 0.1ms , 設為500ms = (4999 + 1) * 0.1
TIM3_Int_Init(4999,7199);//10Khz的計數(shù)頻率,計數(shù)到5000為500ms
TIM3_Int_Init(999,719); //定時10ms
TIM3_Int_Init(99,719); //定時1ms
// Tout = ((4999+1)×(7199+1))/72 = 500000us = 500ms
到了這里,關于STM32定時器使用計算的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!