Önceki yazımızda systick timer kullanarak gecikme uygulaması yapmıştık. Bu yazımızda benzer bir uygulamayı genel amaçlı bir timer kullanarak yapacağız.
Öncelikle projemize timer kütüphanesini eklememiz gerekiyor. Daha sonra timer ayarlarını yapıyoruz. Son olarak ana döngü içerisinde sürekli timerın bayrağını kontrol ediyoruz. Timer ayar kısmında belirttiğimiz sayıya ulaşınca bayrağı high durumuna çekiyor. Ana döngüde bunu yakaladığımızda bayrağı sıfırlıyor ve ledi tersliyoruz.
#include "stm32f4xx.h" #include "stm32f4xx_rcc.h" #include "stm32f4xx_gpio.h" #include "stm32f4xx_tim.h" int main(void) { /* GPIO init */ // LED PIN AYARI RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); // A portunun saat darbesini aktifleştidik. GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; // 5 numaralı pin için ayarlıyoruz. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; // Pin çıkış tipini ayarladık. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; // Pinimizi output olarak ayarladık. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; // Pull Up direncini pasif yaptık. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // Pinin maksimum çalışma frekansını ayarladık. GPIO_Init(GPIOA, &GPIO_InitStructure); // Ayarları uyguluyoruz. /* TIMER init */ TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); /* Time base configuration */ TIM_TimeBaseStructure.TIM_Period = 10000 - 1; // 10000 darbe sayıyoruz. 10 Hz bir timer elde ettik. TIM_TimeBaseStructure.TIM_Prescaler = 840 - 1; // 84 MHz saat frekansını 100 KHz'e düşürdük. TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); /* TIM2 enable counter */ TIM_Cmd(TIM2, ENABLE); while (1) { if (TIM_GetFlagStatus(TIM2, TIM_FLAG_Update) != RESET) { TIM_ClearFlag(TIM2, TIM_FLAG_Update); GPIO_ToggleBits(GPIOA, GPIO_Pin_5); // Ledi tersliyoruz. 10 Hz frekansımız olduğundan led 100 ms on, 100 ms off konumunda. } } }// main sonu.
Timer frekansını 10 Hz olarak ayarladığımız için led 100 ms yanık, 100 ms sönük oluyor.
Proje dosyasını linkten indirebilirsiniz. –> coide_timer_uygulamasi