Ders 3: Stm32f407 Buton ile Led kontrolü

Bu dersimizde stm32f407 discovery kit üzerinde bulunan (mavi olan) user butonu kullanarak kit üzerindeki ledleri butonun tek yada cift olma durumuna göre yakacağız.Kaynak kodları örnek alarak başka uygulamalar da geliştirebilirsiniz.

Buton

 

Kodlamaya geçmeden önce bilmemiz gerekenler;

► Ledlerin ve butonların işlemcinin hangi pinlerine bağlı olduğunu bilmemiz gerekiyor.

Şematik dosyamızın(önceki derste paylaşılan) 6. Sayfasında buton ve ledlerin hangi pine bağlı olduğu bilgisi verilmektedir.

Pin

Kullanıcı butonunun A0 da ledlerin ise D12-13-14-15. Pinlere bağlı olduğunu görmekteyiz.

► Kullanacağımız pinlerin bus hattına clock vermemiz gerekmektedir.

Hangi pinin hangi clock hattına bağlı olduğunu öğrenmek için datasheet e başvurabilirsiniz ya da önceki dersimizde bu bilgiyi bulabilirsiniz.

► Pinlere clock verildikten sonra pin için gerekli ayarlamalar yapılır ve main fonksiyonunu yazmak için hazır hale geliriz.

HATIRLATMA : Proje oluşturma için önceki dersimizi okuyabilirsiniz.

ADIM 1: Bu adımda Butona basıldıgı zaman ledleri set eden program yazacagız                                Button_Led adı altında proje oluşturduktan sonra kodumuzu yazmaya başlıyoruz

buton_led

 

ADIM 2: Bu adımda Butona basma sayısı cif ise D12 ve 13 ü,tek ise D14 ve 15 i set eden programı yazacagız,bunun için butona basılma sayısını tutacak bir değişkene ihtiyacımız olacak(buffer diyebiliriz)

buton_mod_led

Tek-Cift Duruma göre Led Yakma Programı

#include "stm32f4xx.h"                  // Device header
 
uint8_t buton_input,sayac=0;     // unsigned tipte 8 bitlik degiskenleri tanimladik   
 
void GPIO_conf(void)
{
	GPIO_InitTypeDef LED;  // Led icin structure tanimlamasi
	GPIO_InitTypeDef BUTTON; // Buton icin structure tanimlamasi
 
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); // Ledler icin clock
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); // Buton icin clock
	//LED CONF
	LED.GPIO_Pin  = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
        LED.GPIO_Mode = GPIO_Mode_OUT;
        LED.GPIO_Speed = GPIO_Speed_100MHz;
        LED.GPIO_OType = GPIO_OType_PP;
        LED.GPIO_PuPd = GPIO_PuPd_NOPULL;
	GPIO_Init(GPIOD, & LED);
	//BUTON CONF
	BUTTON.GPIO_Pin  = GPIO_Pin_0;
        BUTTON.GPIO_Mode = GPIO_Mode_IN;
        BUTTON.GPIO_Speed = GPIO_Speed_100MHz;
        BUTTON.GPIO_OType = GPIO_OType_PP;
        BUTTON.GPIO_PuPd = GPIO_PuPd_NOPULL;
	GPIO_Init(GPIOA, & BUTTON);
	/* structure tanimlamasi GPIO_InitTypeDef GPIO_InitStructure seklinde yapilip led,buton yada
	  diger gpio lar icin kullanilabilir,anlasilmasi kolay olmasi acisindan bu sekilde kullanildi*/
}
int main()
{
	GPIO_conf();
 
		while(1)
	{
		buton_input = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);
		 while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0))
		 { 
					sayac = sayac + buton_input;
 
						if(sayac % 2 == 0) // mod 2 islemi yapildi, islem cift ise
						{
							GPIO_SetBits(GPIOD,GPIO_Pin_12 | GPIO_Pin_13 );
							GPIO_ResetBits(GPIOD,GPIO_Pin_14 | GPIO_Pin_15);
						}
						else // tek ise
						{
							GPIO_SetBits(GPIOD,GPIO_Pin_14 | GPIO_Pin_15);
							GPIO_ResetBits(GPIOD,GPIO_Pin_12 | GPIO_Pin_13);
						}
	   }			
  }		
}

 

 

Buton ile Led Yakma Programı

#include "stm32f4xx.h"                  // Device header
 
uint8_t buton_input;     // unsigned tipte 8 bitlik degiskenleri tanimladik   
 
void GPIO_conf(void)
{
	GPIO_InitTypeDef LED;  // Led icin structure tanimlamasi
	GPIO_InitTypeDef BUTTON; // Buton icin structure tanimlamasi
 
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); // Ledler icin clock
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); // Buton icin clock
	//LED CONF
	LED.GPIO_Pin  = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
        LED.GPIO_Mode = GPIO_Mode_OUT;
        LED.GPIO_Speed = GPIO_Speed_100MHz;
        LED.GPIO_OType = GPIO_OType_PP;
        LED.GPIO_PuPd = GPIO_PuPd_NOPULL;
	GPIO_Init(GPIOD, & LED);
	//BUTON CONF
	BUTTON.GPIO_Pin  = GPIO_Pin_0;
        BUTTON.GPIO_Mode = GPIO_Mode_IN;
        BUTTON.GPIO_Speed = GPIO_Speed_100MHz;
        BUTTON.GPIO_OType = GPIO_OType_PP;
        BUTTON.GPIO_PuPd = GPIO_PuPd_NOPULL;
	GPIO_Init(GPIOA, & BUTTON);
	/* structure tanimlamasi GPIO_InitTypeDef GPIO_InitStructure seklinde yapilip led,buton yada
	  diger gpio lar icin kullanilabilir,anlasilmasi kolay olmasi acisindan bu sekilde kullanildi*/
}
int main()
{
	GPIO_conf();
	while(1)
	{
		buton_input = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0); // okunan buton degeri buton_input degiskenine aktar1ld1
 
			if(buton_input) // eger 1 ise
			{
				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);
			}
  }	
}

Bir Cevap Yazın

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