İçeriğe geç

1-) GPIO

Spread the love

Aşağıdaki Kodlar ile kullanacağımız Port ve Pin ayarlamalarını yapıyoruz.

static void MX_GPIO_Init(void)

{

GPIO_InitTypeDef GPIO_InitStruct;

/* Portların Clock ları Aktif Etme */

__HAL_RCC_GPIOH_CLK_ENABLE();

__HAL_RCC_GPIOA_CLK_ENABLE();

__HAL_RCC_GPIOD_CLK_ENABLE();

/*Başlangıçta Tüm Aktif Edilen Pinleri Sıfırlıyor. */

HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15, GPIO_PIN_RESET);

/*A0 Pinini Giriş Olarak Ayarlama */

GPIO_InitStruct.Pin = GPIO_PIN_0;

GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

GPIO_InitStruct.Pull = GPIO_PULLDOWN;

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

/*PD12 , PD13 ,PD14 , PD15 Pinlerinin Ayarları */

GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

}

Örnek olarak da A0 a bağlı butona bir kere basıldığında  D12  , D13 , D14 , D15 pinlerine bağlı ledler ileri yönde yanma animasyonu yapmaktadır. Bir daha basıldığında ise ledler geriye doğru yanma animasyonu yapmaktadır. Bu durum sonsuza dek aynı şekilde devam etmektedir.  Aşağıdaki kodlar bu uygulamaya aittir.

int main(void)

{

HAL_Init();

SystemClock_Config();

MX_GPIO_Init();

HAL_GPIO_WritePin(GPIOD,GPIO_PIN_12,GPIO_PIN_SET);

while (1)

{

if(durum == 0){

butondurum = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);

while(butondurum == 0){

butondurum = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);

durum=1;

}

HAL_GPIO_WritePin(GPIOD,GPIO_PIN_15,GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOD,GPIO_PIN_12,GPIO_PIN_SET);

HAL_Delay(1000);

HAL_GPIO_WritePin(GPIOD,GPIO_PIN_12,GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOD,GPIO_PIN_13,GPIO_PIN_SET);

HAL_Delay(1000);

HAL_GPIO_WritePin(GPIOD,GPIO_PIN_13,GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOD,GPIO_PIN_14,GPIO_PIN_SET);

HAL_Delay(1000);

HAL_GPIO_WritePin(GPIOD,GPIO_PIN_14,GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOD,GPIO_PIN_15,GPIO_PIN_SET);

HAL_Delay(1000);

HAL_GPIO_WritePin(GPIOD,GPIO_PIN_15,GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOD,GPIO_PIN_12,GPIO_PIN_SET);

}

if(durum == 1){

butondurum = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);

while(butondurum == 0){

butondurum = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);

durum=0;

}

HAL_GPIO_WritePin(GPIOD,GPIO_PIN_15,GPIO_PIN_SET);

HAL_GPIO_WritePin(GPIOD,GPIO_PIN_12,GPIO_PIN_RESET);

HAL_Delay(1000);

HAL_GPIO_WritePin(GPIOD,GPIO_PIN_15,GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOD,GPIO_PIN_14,GPIO_PIN_SET);

HAL_Delay(1000);

HAL_GPIO_WritePin(GPIOD,GPIO_PIN_14,GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOD,GPIO_PIN_13,GPIO_PIN_SET);

HAL_Delay(1000);

HAL_GPIO_WritePin(GPIOD,GPIO_PIN_13,GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOD,GPIO_PIN_12,GPIO_PIN_SET);

HAL_Delay(1000);

}

}

}

 

Tarih:STM32F407VG Kodlar

İlk Yorumu Siz Yapın

Bir Cevap Yazın