STM32タイマー

  

STM32のタイマの計算は、多くの用途があります:

(a)は、システムクロック(のSysTick)

、非常に簡単な設定を、次のように生成されている1msの割り込みをセット、及び10msの遅延生成機能:

空隙RCC_Configuration(ボイド){RCC_ClocksTypeDef RCC_ClockFreq; SystemInit(); //system_stm32f10x.cからファイルのみRCCを完了するために配置されていてもよい、この関数を呼び出す必要が.RCC_GetClocksFreq(& RCC_ClockFreq);

//のSysTickは、システムクロックを分周--1ms割り込み(SysTick_Config(SystemFrequency /1000)){ながら(1); //キャプチャエラー}}もし

空隙SysTick_Handler(ボイド)//割り込みハンドラプログラム{一方(TIM){tim--;}}

//呼び出しプログラム:Delay_Ms(10);

もちろん、前提は、変数ティム揮発性のタイプを設定し、設定することです。

(B)は、第2タイマのカウント時間を含む(TIMx)

TIM_TimeBaseStructure.TIM_Prescaler = 2; //プリスケーラ(分周クロック)72M /(2 + 1) = 24MTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //カウントアップTIM_TimeBaseStructure.TIM_Period = 65535; //18K /144 = 125hzTIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1の負荷値; TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0の、TIM_TimeBaseInit(TIM3、& TIM_TimeBaseStructure);

計算一定時間:TIM_TimeBaseStructure.TIM_Prescaler = 2; //分周器2 72M //2=24MHzTIM_TimeBaseStructure.TIM_Period = 65535(2 + 1); //カウント値65535((1 + TIM_Prescaler)/72M)*(1 + TIM_Period)=((1 + 2)/72M)*(1 + 65535)= 0.00273秒= 366.2Hz * /

エビ網、テストされていないから二点()(1)TIMx (1-8)、既定で提供するライブラリで、クロックは72Mであり、(2)TIM_TimeBaseStructure.TIM_RepetitionCounter = 0は、あなたがそれに対応するレジスタを与える割り込みカウントがオーバーフローし、オーバーフローする前に何度も繰り返される繰り返しTIM1 RCRと呼ばれる。この値が設定されていない場合は、一度中断した電気が、ランダムのレジスタ値は、1秒を持っていたとき、N秒が一度中断してしまうことがあり、あなたのスーパービッグ頭をしましょう!

は、システムクロックは、TIM1はPCLK2(72MHz)に由来している72Mhzであることを前提とし、 TIM2-7は

タイマー

1、TIM_TimeBaseStructure実質的に設けられている
キーPCLK1クロックプリスケーラ番号、オートリロードレジスタ値期間によって設定されます= 7199 .TIM_Prescaler; //クロックプリスケーラ例の数:

クロック周波数= 72 /(クロックプリスケーラ+1)

2、TIM_TimeBaseStructure.TIM_Period = 9999; //更新または割り込み周波数は0xFFFFを累積することによって生成された自動値(タイミング

時間)レジスタリロードサイクル(これも前記一定時間)

3、TIM_TimeBaseStructure.TIM_CounterMode = TIM1_CounterMode_Up; //タイマー

パターン

4、TIM_TimeBaseStructure.TIM_ClockDivision = 0x0の
をカウントアップ; //時分割値

5、TIM_TimeBaseInit(TIM2、& TIM_TimeBaseStructure); //初期化タイマー2

6、TIM_ITConfig(TIM2、TIM_IT_Update、ENABLE); //は中断オーバーフロー割り込み

7を開いて、TIM_Cmd( TIM2)ENABLE; //オープンタイマ

または:

TIM_TimeBaseStructure.TIM_Prescaler = 35999; //分割35999 72M /

(35999 + 1)/2 = 1Hzの1秒の割り込みオーバーフロー時間

TIM_TimeBaseStructure.TIM_Period = 2000; //カウント値2000

((1 + TIM_Prescaler)/72M)*(1 + TIM_Period)=((1+ stm32f10x.h"の#include = 1秒* /

一般的な基本的なタイマ機能は、タイマランプが点滅を
実施STM32

の#include" 35999)/72M)* + 2000(1) " misc.h"

空隙RCC_Configuration(ボイド);ボイドNVIC_Configuration(ボイド);ボイドGPIO_Configuration(ボイド);ボイドTIM3_Configuration(ボイド);

INTメイン(ボイド){RCC_Configuration( ); NVIC_Configuration(); GPIO_Configuration(); TIM3_Configuration();

TIM_ClearFlag(TIM3、TIM_FLAG_Update); TIM_ARRPreloadConfig(TIM3、DISABLE);

TIM_ITConfig(TIM3、TIM_IT_Update、ENABLE); TIM_Cmd (TIM3は、ENABLE);

一方、(1){;}}

空隙TIM3_Configuration(ボイド){

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_TimeBaseStructure.TIM_Period = 9999; TIM_TimeBaseStructure.TIM_Presca LER = 7199; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3、& TIM_TimeBaseStructure);}

空隙RCC_Configuration(ボイド){SystemInitを();

RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM3、ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC、ENABLE);

}


空隙NVIC_Configuration(ボイド){NVIC_InitTypeDef NVIC_InitStructure;

NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(& NVIC_InitStructure);}

空隙GP​​IO_Configuration(ボイド){GPIO_InitTypeDef GPIO_InitStructureと、< BR> ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC、&#038; GPIO_InitStructure);

}

の#include" stm32f10x_it .H"

のボイドTIM3_IRQHan dler(ボイド){IF(TIM_GetITStatus(TIM3、TIM_IT_Update)= RESET!){

TIM_ClearITPendingBit(TIM3、TIM_IT_Update); GPIO_WriteBit(GPIOC、GPIO_Pin_7、(BitAction)(1 - GPIO_ReadOutputDataBit(GPIOC、GPIO_Pin_7)) );}}

Copyright © Windowsの知識 All Rights Reserved