码迷,mamicode.com
首页 > 其他好文 > 详细

(STM32F4) Timer 基本操作

时间:2018-12-14 17:43:23      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:很多   star   startup   分享   UNC   mod   分享图片   ble   src   

Timer (計時器) 就是慢慢數時間,在timer內部有一個計數器。

而計數器會數到Register的value當數值數到設定值Timer就會發起IRQ

而程式就會轉跳到中斷向量裡頭去執行想要做的事情。

Timer 計時器配置

1 TIM_TimeBaseInitTypeDef TIM3_TimeBase; 
2 TIM3_TimeBase.TIM_ClockDivision = 0;
3 TIM3_TimeBase.TIM_CounterMode   = TIM_CounterMode_Up;
4 TIM3_TimeBase.TIM_Period        = 20;
5 TIM3_TimeBase.TIM_Prescaler     = 84 - 1;
6 TIM_TimeBaseInit(TIM3, &TIM3_TimeBase);
7 TIM_Cmd(TIM3, ENABLE);
8 TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);

在這段配置裡頭比較重要的是知道啟動Timer的輸入頻率,以及Timer的計數頻率,與設定的週期

有了這些資訊之後我們就知道如何去觸發Timer 的 IRQ

這邊提及一下Timer的輸入頻率跟RCC配置有相關,我們透過Clock Tree可以知道假設啟動Timer的APBx (x = 1/2)

有設定除頻的話,Timer的輸入頻率會是APBx * 2

技术分享图片

STM32F407 System clock = 168MHz

APB2 = 42MHz, APB2 = 84MHz

所以我們的初始設定TIM3輸入頻率是 42MHz * 2 = 84MHz

1 /* HCLK = SYSCLK / 1*/
2 RCC->CFGR |= RCC_CFGR_HPRE_DIV1;
3       
4 /* PCLK2 = HCLK / 2*/
5 RCC->CFGR |= RCC_CFGR_PPRE2_DIV2;
6     
7 /* PCLK1 = HCLK / 4*/
8 RCC->CFGR |= RCC_CFGR_PPRE1_DIV4;

這段程式碼在startup_stm32f4xx.s 已經先配置過一次RCC所以在初始狀態APB1/2頻率如上敘述。

回到Timer多久觸發一次IRQ的計算,目前已知最重要的輸入頻率所以接下來的計算都是靠我們設定的Register去計算

首先在配置IRQ觸發頻率時,通常我們會先確定要用怎樣的頻率去計數這段時間。所以我們會去配置除頻系數

 1 TIM3_TimeBase.TIM_Prescaler = 84 - 1;

以這行程式碼而言,我的除頻系數填的是83而我的計數頻率會變成1Mhz

計數頻率 = 84MHz / (83 + 1) = 1Mhz

再來是我要計數的數值就是決定觸發IRQ的關鍵

 1 TIM3_TimeBase.TIM_Period = 20; 

IRQ觸發頻率 = 1Mhz / (20 + 1) = 47.63KHz

頭過上面的配置Timer就會開始啟動了,但實際要發起IRQ還是要透過中斷機制,所以還是必須配置中斷向量

1 NVIC_TIM3.NVIC_IRQChannel                   = TIM3_IRQn;
2 NVIC_TIM3.NVIC_IRQChannelPreemptionPriority = 0;
3 NVIC_TIM3.NVIC_IRQChannelSubPriority        = 0;
4 NVIC_TIM3.NVIC_IRQChannelCmd                = ENABLE;
5 NVIC_Init(&NVIC_TIM3);

 在Function Block 只用到一小部分 Timer 很強大還有很多細節須要去學習

技术分享图片

 

(STM32F4) Timer 基本操作

标签:很多   star   startup   分享   UNC   mod   分享图片   ble   src   

原文地址:https://www.cnblogs.com/ollie-lin/p/10119626.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!