Bu bölümde, 4x4 matrix keypad üzerinde yer alan butonlardan birine (bu örnekte ilk buton) basarak, elimizdeki F401-RE kart üzerindeki LED'i yakıp söndürmemizi sağlayan programı Mbed ve STM32CubeIDE yoluyla yazmaya çalışacağız.
Program için kullanacağımız devre aşağıdaki şekilde gösterildiği şekilde hazırlanacaktır:
4x4 matrix keypad üzerinde yer alan butonlardan birine (bu örnekte ilk buton) bastığımızda, F401-RE kart üzerinden dijital bir giriş sinyali verilir ve LED yanıp sönmeye başlar. Butonu bıraktığımızda LED'in yanp sönme işlemi sona erer.
1. Önce buradaki talimatları uygulayarak, Mbed OS online geliştirme ortamında yeni bir program oluşturalım.
2. main.cpp dosyası içine aşağıdaki kodları yazarak kaydedelim:
#include "mbed.h"
DigitalIn myInput(D2);
DigitalOut myLED(LED3);
int main() {
while (1) {
if (!myInput) {
myLED = 1; // LED yanar.
wait(0.5); // 500 ms. bekleme
myLED = 0; // LED söner.
wait(0.5); // 500 ms. bekleme
}
}
return 0;
}
3. Programı derleyelim ve elde ettiğimiz .bin uzantılı dosyayı bilgisayarımıza kaydedelim.
4. Bilgisayarımıza kaydettiğimiz .bin uzantılı dosyayı, kart bilgisayara bağlandığında Windows Explorer’da görünen flash bellek içine kopyalayalım.
5. Windows Explorer'da kartı temsil eden sürücüye kopyaladığımız .bin uzantılı dosya kart tarafından otomatik olarak okunarak çalıştırılır. Kart kendini resetler ve .bin uzantılı dosya silinir.
6. Program çalışmaya başladığında, 4x4 matrix keypad üzerinde yer alan butonlardan birine bastığımızda, LED 500 msn aralıklarla yanıp söner, butonu bıraktığımızda yanıp sönme işlemi sona erer.
1. Önce buradaki talimatları uygulayarak, STM32CubeIDE ortamında yeni bir proje oluşturalım.
2. Projemize verdiğimizin isme sahip .ioc uzantılı dosyaya tıkladığımızda karşımıza gelen pencerede PA10 kutusuna tıkladığımızda karşımza gelen seçeneklerden GPIO_Input seçeneğini seçelim:
3. Bu işlemi gerçekleştirdiğimizde, aşağıda gösterilen kodlar projemizin main.c dosyası içindeki MX_GPIO_Init fonksiyonunun sonuna eklenir.
/*Configure GPIO pin : PA10 */
GPIO_InitStruct.Pin = GPIO_PIN_10;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
4. main.c dosyasının içindeki kodları aşağıdaki şekilde düzenleyerek kaydedelim:
int main(void)
{
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART2_UART_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
if(!HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_10)) { // Keypad üzerindeki buton basılı ise yanıp sönme işlemi gerçekleşir.
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // GPIOA->ODR |= (1<<5);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // GPIOA->ODR &= ~(1<<5);
HAL_Delay(500);
}
/* USER CODE BEGIN 3 */
}
}
LED'in yanma ve sönük kalma süresi aynı ise, while döngüsü içindeki kodları aşağıdaki şekilde de düzenleyebiliriz:
while (1)
{
/* USER CODE END WHILE */
if(!HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_10)) { // Keypad üzerindeki buton basılı ise yanıp sönme işlemi gerçekleşir.
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
HAL_Delay(500);
}
}
5. Programı derleyelim.
6. Doğrudan Run butonuna basarak veya elde ettiğimiz .bin uzantılı dosyayı, kart bilgisayara bağlandığında Windows Explorer’da görünen flash bellek içine kopyalayalım.
7. Program kart tarafından otomatik olarak okunarak çalıştırılır. Kart kendini resetler.
8. Program çalışmaya başladığında, 4x4 matrix keypad üzerinde yer alan butonlardan birine bastığımızda, LED 500 msn aralıklarla yanıp söner, butonu bıraktığımızda yanıp sönme işlemi sona erer.