1. 程式人生 > >STM32F407VG (五)定時器

STM32F407VG (五)定時器

博客 計數 led eba reset gpio onf cpu bsp

一、定時器節本分類和主要特點 1.STM32定時器分類: 1)看門狗定時器 2)SysTick定時器 3)RTC定時器
4)通用定時器 a)通用定時器TIM2~TIM5, 當中TIM2和TIM5是32位,TIM3和TIM4是16位 具有四個獨立通道 中斷/DMA事件 支持增量編碼器和霍爾傳感器
b)通用定時器TIM9~TIM14,16位定時器 最多具有連個獨立通道 中斷事件
5)基本定時器TIM6,TIM7,16位定時器 同步電路觸發DAC 中斷/DMA事件
6)高級定時器TIM1。TIM8,16位定時器
具有四個獨立通道 中斷/DMA事件 支持增量編碼器和霍爾傳感器 輸入信號能夠改變計數器狀態或復位 可改變定期器寄存器的反復計數器。


二、實例1. 定時中斷 1.時鐘初始化 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE); TIM_DeInit(TIM2); /* 時鐘預分頻數 */ //84000000/84=1000000,預分頻後時鐘為1M

TIM_TimeBaseStructure.TIM_Prescaler= (84 - 1); /* 自己主動重裝載寄存器周期的值(計數值) */ /* 累計 TIM_Period個頻率後產生一個更新或者中斷 */ TIM_TimeBaseStructure.TIM_Period =1000-1 ; /* 採樣分頻 */ TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; /* 向上計數模式 */ TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
//調用初始化函數 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); /* 清除溢出中斷標誌 */ TIM_ClearFlag(TIM2, TIM_FLAG_Update); /*設置產生TIM_FLAG_Update中斷*/ TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); /* 開啟時鐘 */ TIM_Cmd(TIM2, ENABLE);
2. 設置中斷向量。具體的解釋見本博客有關“中斷”部分的文章 1)中斷初始化 NVIC_InitTypeDef NVIC_InitStructure; /* Enable TIM2 interrupt IRQ channel */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);
2)中斷函數 void TIM2_IRQHandler(void) { static unsigned int cpu_counter = 0; if(TIM_GetITStatus(TIM2,TIM_IT_Update) != RESET) { TIM_ClearITPendingBit(TIM2,TIM_FLAG_Update); cpu_counter ++; if(cpu_counter >= 500) //等閃爍的周期是1s { cpu_counter = 0; GPIO_ToggleBits(LED1); } } } 技術分享
技術分享 波形非常標準吧:)

STM32F407VG (五)定時器