Ders 5: Stm32f407 ile TIMER Kullanımı

Bu dersimizde TIMER hakkında genel bilgilere deginip basit olarak uygulama gelistirecegiz.TIMER için basit olarak bir sayaç diyebiliriz,belirli bir sayıdan aşağı doğru veya tam tersi yönde sayma işlemi yapabiliriz.Aynı zamanda sayma aralıklarını da seçebiliriz.Sayma işlemi işlemcimizin clock hızına göre yapılabildiği gibi harici işaret ile de yapılabilir.

timer_Feature

Datasheetten aldığım ekran görüntüsünü inceleyecek olursak 7 adet 16 bitlik, 1 adet 32 bitlik tımer birimimizin oldugunu görmekteyiz. Bu tablodan aynı zamanda sayaç oluşturma sırasında kullanacağımız max clock hızları hakkında bilgiler de elde ediyoruz. Unutmadan, tüm timer birimleri aynı şekilde çalışmıyor( counter type blogundan da bariz şekilde belli oluyor)

▬ Tablodan da görüleceği üzerebir genelleme yapacak olursak;

► Gelişmiş Özellikleri Olanlar : TIM1 (16 bit) ve TIM8 (16bit)

► Genel Amaçlı Olanlar -1 : TIM2 (16bit), TIM3 (32bit), TIM4 (32bit) ve TIM5(16bit)

► Genel Amaçlı Olanlar -2: TIM9’dan TIM14’e kadar.

► Basit Özellikleri Olanlar: TIM6 (16bit) ve TIM7 (16bit)

Basit olması açısından ilk örnek TIM6 yada TIM7 ile yapılabilir,biz örneği TIM7 üzerinden yapacağız.

 

TIMER ayarları için bilmemiz gerekenler köşesine göz atalım,

► Kullanılacak pinlere ve TIMER birimine clock verilmeli

► Pin ayarları yapılmalı (bu ayarlar için önceki derslerimize göz atabilirsiniz)

► TIMER ayarları yapılmalı,bu bölüm için,

◘ Öncelikle datasheet i inceleyelim

1

 

Buradan da göreceğimiz üzere Prescaler-Autoreload vs ayarlarını yapmamız gerektiğini görüyoruz.

Gelelim bu değerleri bulmaya,

Öncelikle TIM7 kullanacağımızı söylemiştim, TIM7 nin çalışma frekansı 84MHz oldugunu ilk fotoğraftan görebiliyoruz,buna göre;

TIMER için ön bölücü denklemi fCK_PSC / (PSC +1) olduguna göre PSC değerine 41999 dersek 84MHz / 42000 = 2000 Hz olarak bulunur. Bu değere göre sayılacak değeri de 2000 olarak seçersek sayac 1 saniye olarak ayarlanır.

Prescaler = 41999                          Autoreload = 1999

► Timer adında proje oluşturup gerekli ayarları yapıyoruz. Öncekilere ek olarak “Manage Run” kısmında TIM seçeneğini de seçiyoruz.

2

Ayarları da yaptıktan sonra 0.25 ms boyunca ledlerimizi set eden programı yazıyoruz.

3

#include "stm32f4xx.h"
 
GPIO_InitTypeDef  GPIOD_InitStructure;
 
void AYARLAR(void)
{
	//Clock Ayarlari
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7,ENABLE);
 
  //Pin Ayarlari
  GPIOD_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
  GPIOD_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIOD_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIOD_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  GPIOD_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
 
  //TIM7 Ayarlari
  TIM_DeInit(TIM7);
  TIM_PrescalerConfig(TIM7,41999,TIM_PSCReloadMode_Update);
  TIM_SetAutoreload(TIM7,1999);
 
  GPIO_Init(GPIOD, &GPIOD_InitStructure);
  GPIO_ResetBits(GPIOD,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
  TIM_Cmd(TIM7,ENABLE);
}	
int main(void) 
{
	AYARLAR();
  while (1) 
		{
	  if(TIM_GetCounter(TIM7)<500)
			{
		  GPIO_SetBits(GPIOD,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
	    }
			else
		  GPIO_ResetBits(GPIOD,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
    }
}

 

♣ Diğer dersimiz olan TIMER ile PWM oluşturup ve Servo motor sürme dersinde 
devam etmek üzere...

DİPNOT: system_stm32f4xx.c dosyasında ki PLL değerleri;

SystemCoreClock = 168000000;

PLL_M = 8

PLL_Q = 7

PLL_N = 336 olarak ayarlanmalı,neden diye soracak olursanız,

168.000.000= PLL_VCO / 2 işlemine göre PLL_VCO = 336.000.000 olur.

PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N , PLL_N default olarak seçilirse PLL_M 8 olur

(system_stm32f4xx.c dosyası  253.satırdan itibaren bakabilirsiniz)

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir