STM32學(xué)習(xí)筆記——利用通用定時(shí)器TIM2進(jìn)行精確延時(shí)
1.3.4自動(dòng)重裝載寄存器(TIMx_ARR)
1.3.5狀態(tài)寄存器(TIMx_SR)
本篇中主要關(guān)心該寄存器第0位
當(dāng)產(chǎn)生溢出時(shí),該標(biāo)記位被置1,執(zhí)行更新事件后由軟件清0。
其他眾多關(guān)于TIM寄存器可查閱《STM32F10x參考手冊(cè)》
1.4基本計(jì)數(shù)中斷過程
按照自己的理解,使能中斷及定時(shí)器后,根據(jù)時(shí)鐘來源以及預(yù)分頻器(TIMx_PSC)所設(shè)置的分頻數(shù)開始計(jì)數(shù),當(dāng)計(jì)數(shù)達(dá)到自動(dòng)重裝載寄存器(TIMx_ARR)中所存儲(chǔ)的值時(shí),狀態(tài)寄存器(TIMx_SR)中對(duì)應(yīng)的標(biāo)志位(第0位)置1,通過軟件檢查該位則可以更新事件。
例如:系統(tǒng)中APB1(TIM2被掛在APB下)時(shí)鐘頻率為36MHz,設(shè)置TIMx_PSC分頻為36000,則作為定時(shí)器TIM2的時(shí)鐘頻率為36000000/36000=1000Hz,即1秒內(nèi)內(nèi)部開關(guān)計(jì)數(shù)1000次,每次1ms,設(shè)置TIMx_ARR重裝值為1000,則計(jì)數(shù)達(dá)1000次時(shí),TIMx_SR中第0位標(biāo)志位被置1,此時(shí)為延遲1秒。
2TIM固件庫函數(shù)
2.1函數(shù)TIM_DeInit
函數(shù)名 | TIM_DeInit |
函數(shù)原型 | voidTIM_DeInit(TIM_TypeDef*TIMx) |
功能描述 | 將外設(shè)TIMx寄存器重設(shè)為缺省值 |
輸入?yún)?shù) | TIMx:x可以是2、3或4,來選擇TIM外設(shè) |
被調(diào)用函數(shù) | RCC_APB1PeriphClockCmd(). |
例:重設(shè)TIM2
- TIM_DeInit(TIM2);
2.2函數(shù)TIM_TimeBaseInit
函數(shù)名 | TIM_TimeBaseInit |
函數(shù)原型 | voidTIM_TimeBaseInit(TIM_TypeDef*TIMx,TIM_TimeBaseInitTypeDef*TIM_TimeBaseInitStruct) |
功能描述 | 根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時(shí)間基數(shù)單位 |
輸入?yún)?shù)1 | TIMx:x可以是2、3或4,來選擇TIM外設(shè) |
輸入?yún)?shù)2 | TIMTimeBase_InitStruct:指向結(jié)構(gòu)TIM_TimeBaseInitTypeDef的指針,包含了TIMx時(shí)間基數(shù)單位的配置信息 參閱Section:TIM_TimeBaseInitTypeDef查閱更多該參數(shù)允許取值范圍. |
TIM_TimeBaseInitTypeDefstructure
TIM_TimeBaseInitTypeDef定義于文件“stm32f10x_tim.h”:
- typedefstruct
- {
- u16TIM_Period;
- u16TIM_Prescaler;
- u8TIM_ClockDivision;
- u16TIM_CounterMode;
- }TIM_TimeBaseInitTypeDef;
TIM_Period
TIM_Period設(shè)置了在下一個(gè)更新事件裝入活動(dòng)的自動(dòng)重裝載寄存器周期的值。它的取值必須在0x0000和0xFFFF之間。
TIM_Prescaler
TIM_Prescaler設(shè)置了用來作為TIMx時(shí)鐘頻率除數(shù)的預(yù)分頻值。它的取值必須在0x0000和0xFFFF之間。
TIM_ClockDivision
TIM_ClockDivision設(shè)置了時(shí)鐘分割。該參數(shù)取值見下表。
TIM_ClockDivision | 描述 |
TIM_CKD_DIV1 | TDTS=Tck_tim |
TIM_CKD_DIV2 | TDTS=2Tck_tim |
TIM_CKD_DIV4 | TDTS=4Tck_tim |
TIM_CounterMode
TIM_CounterMode選擇了計(jì)數(shù)器模式。該參數(shù)取值見下表。
TIM_CounterMode | 描述 |
TIM_CounterMode_Up | TIM向上計(jì)數(shù)模式 |
TIM_CounterMode_Down | TIM向下計(jì)數(shù)模式 |
TIM_CounterMode_CenterAligned1 | TIM中央對(duì)齊模式1計(jì)數(shù)模式 |
TIM_CounterMode_CenterAligned2 | TIM中央對(duì)齊模式2計(jì)數(shù)模式 |
TIM_CounterMode_CenterAligned3 | TIM中央對(duì)齊模式3計(jì)數(shù)模式 |
例:
- TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
- TIM_TimeBaseStructure.TIM_Period=0xFFFF;
- TIM_TimeBaseStructure.TIM_Prescaler=0xF;
- TIM_TimeBaseStructure.TIM_ClockDivision=0x0;
- TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
- TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
2.3函數(shù)TIM_ClearFlag
函數(shù)名 | TIM_ClearFlag |
函數(shù)原型 | voidTIM_ClearFlag(TIM_TypeDef*TIMx,u32TIM_FLAG) |
功能描述 | 清除TIMx的待處理標(biāo)志位 |
輸入?yún)?shù)1 | TIMx:x可以是2,3或者4,來選擇TIM外設(shè) |
輸入?yún)?shù)2 | TIM_FLAG:待清除的TIM標(biāo)志位 參閱Section:TIM_FLAG查閱更多該參數(shù)允許取值范圍 |
TIM_FLAG值
TIM_FLAG | 描述 |
TIME_FLAG_Update | TIM更新標(biāo)志位 |
…… | …… |
例:
- TIM_ClearFlag(TIM2,TIME_FLAG_Update);
2.4函數(shù)TIM_ITConfig
函數(shù)名 | TIM_ITConfig |
函數(shù)原型 | voidTIM_ITConfig(TIM_TypeDef*TIMx,u16TIM_IT,FunctionalState NewState) |
功能描述 | 使能或者失能指定的TIM中斷 |
輸入?yún)?shù)1 | TIMx:x可以是2,3或者4,來選擇TIM外設(shè) |
輸入?yún)?shù)2 | TIM_IT:待使能或者失能的TIM中斷源 參閱Section:TIM_IT查閱更多該參數(shù)允許取值范圍 |
輸入?yún)?shù)3 | NewState:TIMx中斷的新狀態(tài) 這個(gè)參數(shù)可以取:ENABLE或者DISABLE |
評(píng)論