STM32 GPIO Output ile harici led yakılması



Daha önceden gösterdiğimiz örnek ile en başından itibaren nasıl proje oluşturduğumuzu hemen ardından da Clock ayarlarının ve Debug (Hata ayıklama) ayarlarının nasıl yapıldığını göstermiştik. Yine aynı konfigürasyonları gerçekleştirdikten sonra A5 pinini GPIO_Output olarak seçiyorum. Burada göz önünde bulundurulması gereken önemli bir faktör de hem işlemciden fazla akım çekilmesini engellemek hem de led diyotun fazla akım çekerek kendini bozmasını engellemek adına doğru değerlikli bir direnç seçimidir. Aşağıdaki tabloda DIP ledlerin voltaj düşüm tablosu ve akım tablosu verilmiştir.

Renk

Vf (Volt)

Tipik Akım (mA)

 

LED Boyutu

Tipik Akım (If)

Maksimum Akım

Kırmızı

1.8 - 2.2V

10 - 20 mA

 

3mm LED

10 - 20 mA

20 - 25 mA

Yeşil

2.0 - 3.2V

10 - 20 mA

 

5mm LED

10 - 20 mA

20 - 30 mA

Mavi

3.0 - 3.4V

10 - 20 mA

 

Beyaz

3.0 - 3.4V

10 - 20 mA

 

 

Bu tablodaki veriler göz önüne alındığında Kırmızı renkli bir diyot için Vf değerini 2 volt olarak alırsak led diyottan geçecek akım değerimiz aşağıda formülize edilmiştir.





GPIO Output olarak seçtikten sonra ise pinimiz artık Out çıkışı olarak konfigüre edilmiş olacaktır. Bu Out çıkışı işlemcinin VDD güç girişine bağlı olan besleme gerilimi değer aralığı kadar (3.0 - 3.3) gerilim çıkışını verebilmektedir. Sadece 1 ve 0 çıkışlarıyla yani 3.3V ve 0 Volt çıkışları verebilmektedir. Devre bağlantı şeması aşağıdaki görseldeki gibidir.



Projenin Main.c kodu

  /* Infinite loop */

  /* USER CODE BEGIN WHILE */

  while (1)

  {

         HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, 0);

         HAL_Delay(500);

         HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, 1);

         HAL_Delay(500);

    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */

  }

  /* USER CODE END 3 */



Sırayla 5 led yakılması örneği




Bu örneğimizde işlemcinin A1, A2, A3, A4, ve A5 pinlerine seri bağlı 5 adet 330 ohm’luk direnç ve direncin diğer ucuna da bağlı DIP Ledlerin Anode ucuna bağlanmış Catode ucu da işlemcinin GND’sine bağlanmıştır. Yazmayı amaçladığımız kod ise sırasıyla A1’den başlayarak A5’e kadar tüm ledler 500 milisaniye aralıklar ile yanacak daha sonra ise yine 250 milisaniye aralıklarla A5’den A1’e doğru olarak sönecektir.

  /* USER CODE BEGIN WHILE */

  while (1)

  {

         HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, 1);

         HAL_Delay(500);

         HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, 1);

         HAL_Delay(500);

         HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, 1);

         HAL_Delay(500);

         HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, 1);

         HAL_Delay(500);

         HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, 1);

         HAL_Delay(500);

         HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, 0);

         HAL_Delay(250);

         HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, 0);

         HAL_Delay(250);

         HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, 0);

         HAL_Delay(250);

         HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, 0);

         HAL_Delay(250);

         HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, 0);

         HAL_Delay(250);

    /* USER CODE END WHILE */

 

    /* USER CODE BEGIN 3 */

  }

Yorumlar