
Merhaba,
Arkadaşlar bu yazımızda kartımızın üstünde bulunan user butonunun kullanımıyla ilgili bir uygulama gerçekleştireceğiz.Malumunuz kartımızın üzerinde bir user butonu bulunmakta ve bu buton A0 pini ile bağlantılı durumdadır.Uygulamamızda user butonuna basılmasıyla birlikte kartımızın üzerinde bulunan ledlerin yanması,butondan elimizi çektiğimizde ledlerin sönmesi işlemi gerçekleştirilecektir.
Ledlerimiz için yaptığımız konfigürasyon ayarları aşağıda gösterilmektedir.
[php]
//GPIOD
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
//Yapıyı başlatıyoruz
GPIO_InitTypeDef GPIO_InitDef;
//12,13,14,15 nolu pinler ayarlanıyor.
GPIO_InitDef.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13|GPIO_Pin_14 | GPIO_Pin_15;
//Çıkış olarak ayarlanıyor..
GPIO_InitDef.GPIO_Mode = GPIO_Mode_OUT;
//Çıkış tipi push-pull olarak ayarlanıyor.
GPIO_InitDef.GPIO_OType = GPIO_OType_PP;
GPIO_InitDef.GPIO_PuPd = GPIO_PuPd_NOPULL;
//50MHz pin hızı
GPIO_InitDef.GPIO_Speed = GPIO_Speed_50MHz;
// GPIOD üzerindeki pinler başlatılıyor.
GPIO_Init(GPIOD, &GPIO_InitDef);
[/php]
User butonu için yaptığımız konfigürasyon ayarları aşağıda gösterilmektedir.
[php]
//GPOIA
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
//Pin 0
GPIO_InitDef.GPIO_Pin = GPIO_Pin_0;
//Mode giriş olarak ayarlanıyor.
GPIO_InitDef.GPIO_Mode = GPIO_Mode_IN;
//Çıkış tipi push-pull olarak ayarlanıyor.
GPIO_InitDef.GPIO_OType = GPIO_OType_PP;
GPIO_InitDef.GPIO_PuPd = GPIO_PuPd_DOWN;
//50MHz pin hızı
GPIO_InitDef.GPIO_Speed = GPIO_Speed_50MHz;
// GPIOA üzerindeki pinler başlatılıyor.
GPIO_Init(GPIOA, &GPIO_InitDef);
[/php]
Peki ben butonun durumunu nasıl denetleyeceğim.Aşağıda gösterilmektedir.
[php]
GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)
[/php]
Bunların hepsini inceledikten sonra kodlarımızın tamamı aşağıda gösteriliyor..
[php]
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_gpio.h"
int main(void) {
GPIO_InitTypeDef GPIO_InitDef;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
GPIO_InitDef.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13|GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitDef.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitDef.GPIO_OType = GPIO_OType_PP;
GPIO_InitDef.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitDef.GPIO_Speed = GPIO_Speed_100MHz;
//Initialize pins
GPIO_Init(GPIOD, &GPIO_InitDef);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_InitDef.GPIO_Pin = GPIO_Pin_0;
GPIO_InitDef.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitDef.GPIO_OType = GPIO_OType_PP;
GPIO_InitDef.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_InitDef.GPIO_Speed = GPIO_Speed_100MHz;
//Initialize pins
GPIO_Init(GPIOA, &GPIO_InitDef);
while (1) {
if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)) {
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);
}
}
}
[/php]
Proje dosyalarına buradan ulaşabilirsiniz.
Proje çalışma videosunu buradan izleyebilirsiniz.