微波EDA网,见证研发工程师的成长! 2025婵犵數濮烽弫鍛婃叏閹绢喗鍎夊鑸靛姇缁狙囧箹鐎涙ɑ灏ù婊呭亾娣囧﹪濡堕崟顓炲闂佸憡鐟ョ换姗€寮婚敐澶婄闁挎繂妫Λ鍕磼閻愵剙鍔ゆ繛纭风節瀵鎮㈤崨濠勭Ф闂佸憡鎸嗛崨顔筋啅缂傚倸鍊烽懗鑸靛垔椤撱垹鍨傞柛顐f礀閽冪喖鏌曟繛鐐珕闁稿妫濋弻娑氫沪閸撗€妲堝銈呴獜閹凤拷04闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾剧懓顪冪€n亝鎹i柣顓炴閵嗘帒顫濋敐鍛婵°倗濮烽崑鐐烘偋閻樻眹鈧線寮撮姀鈩冩珕闂佽姤锚椤︻喚绱旈弴銏♀拻濞达綀娅g敮娑㈡煕閺冣偓濞茬喖鐛弽顓ф晝闁靛牆娲g粭澶婎渻閵堝棛澧遍柛瀣仱閹繝濡烽埡鍌滃幗闂佸搫娲ㄩ崑娑㈠焵椤掆偓濠€閬嶅焵椤掍胶鍟查柟鍑ゆ嫹11闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾剧懓顪冪€n亝鎹i柣顓炴閵嗘帒顫濋敐鍛婵°倗濮烽崑鐐烘偋閻樻眹鈧線寮撮姀鈩冩珖闂侀€炲苯澧扮紒顕嗙到铻栧ù锝堟椤旀洟姊洪悷鎵憼闁荤喆鍎甸幃姗€鍩¢崘顏嗭紲闂佺粯鐟㈤崑鎾绘煕閵娿儳鍩g€殿喖顭锋俊鎼佸煛閸屾矮绨介梻浣呵归張顒傜矙閹达富鏁傞柨鐕傛嫹 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾剧懓顪冪€n亝鎹i柣顓炴閵嗘帒顫濋敐鍛婵°倗濮烽崑鐐烘偋閻樻眹鈧線寮撮姀鐘栄囨煕鐏炲墽鐓瑙勬礀閳规垿顢欑紒鎾剁窗闂佸憡顭嗛崘锝嗙€洪悗骞垮劚濞茬娀宕戦幘鑸靛枂闁告洦鍓涢敍娑㈡⒑閸涘⿴娈曞┑鐐诧躬閹即顢氶埀顒€鐣烽崼鏇ㄦ晢濠㈣泛顑嗗▍灞解攽閻樺灚鏆╁┑顔芥尦楠炲﹥寰勯幇顒傦紱闂佽宕橀褔鏌ㄩ妶鍡曠箚闁靛牆瀚崗宀勬煕濞嗗繑顥㈡慨濠呮缁辨帒螣閼姐値妲梻浣呵归敃銈咃耿闁秴鐒垫い鎺嶈兌閸熸煡鏌熼崙銈嗗濠电姷鏁告慨鐑藉极閸涘﹥鍙忛柣鎴f閺嬩線鏌熼梻瀵割槮缁惧墽绮换娑㈠箣濞嗗繒浠鹃梺绋款儍閸婃繈寮婚弴鐔虹鐟滃秹宕锔藉€跺┑鐘叉处閳锋垿鏌熺粙鎸庢崳缂佺姵鎸婚妵鍕晜鐠囪尙浠紓渚囧枛椤兘銆佸☉銏″€烽悗鐢登瑰鎶芥⒒娴h櫣甯涙繛鍙夌墵瀹曟劙宕烽娑樹壕婵ḿ鍋撶€氾拷
首页 > 硬件设计 > 嵌入式设计 > STM32 通用定时器 介绍

STM32 通用定时器 介绍

时间:11-23 来源:互联网 点击:

STM32的定时器是个强大的模块,定时器使用的频率也是很高的,定时器可以做一些基本的定时,还可以做PWM输出或者输入捕获功能。

时钟源问题:

名为TIMx的有八个,其中TIM1和TIM8挂在APB2总线上,而TIM2-TIM7则挂在

APB1总线上。其中TIM1&TIM8称为高级控制定时器(advanced control timer).他们所在的APB2总线也比APB1总线要好。APB2可以工作在72MHz下,而APB1最大是36MHz。

闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾剧懓顪冪€n亝鎹i柣顓炴閵嗘帒顫濋敐鍛婵°倗濮烽崑娑⑺囬悽绋垮瀭濡わ絽鍟粻娑樏归敐鍛础缂佸鑳剁槐鎾诲磼濮橆兘鍋撻悜鑺ュ€块柨鏇氱劍閹冲矂姊绘担鍛婂暈闁荤喆鍎抽幑銏狀潨閳ь剙顕f繝姘亜缁炬媽椴搁弲顒勬⒑閹稿海绠撴繛璇х到鏁堟俊銈呮噺閸嬧剝绻濇繝鍌涘櫣妞わ絽銈搁幃浠嬵敍濞戞ɑ璇為梺璇″枟閻燂妇鎹㈠┑瀣倞闁靛ě鍐ㄥ婵犵數濮烽弫鎼佸磹椤栫偛鐒垫い鎺戝绾惧鏌熼崜褏甯涢柣鎾寸洴閹鏁愭惔鈥茬敖婵犫拃鍐粵闁逛究鍔嶇换婵嬪川椤曞懍鍝楅梻浣告贡閹虫挾鈧氨澧楁穱濠囧箹娴h倽銊╂煥閺冣偓閸庡磭绱為幒妤佲拻闁稿本鐟ㄩ崗宀勬煙閾忣偅宕岀€规洜鏁诲浠嬵敇閻愭鍞甸梻浣芥硶閸o箓骞忛敓锟�...

定时器的时钟不是直接来自APB1或APB2,而是来自于输入为APB1或APB2的一个倍频器。

下面以定时器2~7的时钟说明这个倍频器的作用:当APB1的预分频系数为1时,这个倍频器不起作用,定时器的时钟频率等于APB1的频率;当APB1的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作用,定时器的时钟频率等于APB1的频率两倍。

假定AHB=36MHz,因为APB1允许的最大频率为36MHz,所以APB1的预分频系数可以取任意数值;当预分频系数=1时,APB1=36MHz,TIM2~7的时钟频率=36MHz(倍频器不起作用);当预分频系数=2时,APB1=18MHz,在倍频器的作用下,TIM2~7的时钟频率=36MHz。

有人会问,既然需要TIM2~7的时钟频率=36MHz,为什么不直接取APB1的预分频系数=1?答案是:APB1不但要为TIM2~7提供时钟,而且还要为其它外设提供时钟;设置这个倍频器可以在保证其它外设使用较低时钟频率时,TIM2~7仍能得到较高的时钟频率。

再举个例子:当AHB=72MHz时,APB1的预分频系数必须大于2,因为APB1的最大频率只能为36MHz。如果APB1的预分频系数=2,则因为这个倍频器,TIM2~7仍然能够得到72MHz的时钟频率。能够使用更高的时钟频率,无疑提高了定时器的分辨率,这也正是设计这个倍频器的初衷。

TIM通用定时器配置步骤:

1.配置TIM时钟  

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

2.定时器基本配置

void TIM2_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
// TIM_OCInitTypeDef TIM_OCInitStructure ;
TIM_DeInit(TIM2); //复位TIM2定时器


TIM_TimeBaseStructure.TIM_Period = 5; // 2.5ms
TIM_TimeBaseStructure.TIM_Prescaler = 36000; // 分频36000
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_ITConfig(TIM2, TIM_IT_Update, ENABLE);


TIM_Cmd(TIM2, ENABLE);
}

TIM_Period设置了在下一个更新事件装入活动的自动重装载寄存器周期的值。它的取值必须在0x0000和0xFFFF之间。

TIM_Prescaler设置了用来作为TIMx时钟频率除数的预分频值。它的取值必须在0x0000和0xFFFF之间。

TIM_ClockDivision的作用是做一段延时,一般在特殊场合的时候会用到,可不关心。

TIM_CounterMode选择了计数器模式。

  TIM_CounterMode_Up
    TIM向上计数模
    TIM_CounterMode_Down
    TIM向下计数模式
    TIM_CounterMode_CenterAligned1 TIM中央对齐模式1计数模式
    TIM_CounterMode_CenterAligned2 TIM中央对齐模式2计数模式
    TIM_CounterMode_CenterAligned3 TIM中央对齐模式3计数模式

单片机时钟频率72MHz,APB1 二分频36MHz,故TIM2自动2倍频至72MHz,故定时器中断频率为72000000/36000/5=400Hz

3.使能定时器中断TIM_Cmd(TIM2, ENABLE);

4.配置NVIC。

NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

5.写中断函数

void TIM2_IRQHandler(void)

{

......//中断处理

}

STM32通用定时器.

[ 2012-3-5 7:44:00 | By: zhpg009 ]

STM32有8路寄存器,包括TIM1和TIM8两个高级定时器,TIM6和TIM7两个基本定时器,TIM2-TIM5四个通用定时器,定时器是完全独立的,而且没有互相共享任何资源,它们可以一起同步操作,所有TIMx定时器在内部相连,用于定时器同步或链接。当一个定时器处于主模式时,它可以对另一个处于从模式的定时器的计数器进行复位、启动、停止或提供时钟等操作。

定时器的时钟:

计数器时钟可由下列时钟源提供:

1:内部时钟(CK_INT)

2:外部时钟模式1:外部输入脚(TIx)

3:外部时钟模式2:外部触发输入(ETR)

4:内部触发输入(ITRx):使用一个定时器作为另一个定时器的预

灏勯涓撲笟鍩硅鏁欑▼鎺ㄨ崘

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top