Ana sayfa > Programlama > C Gömülü Programlama > Seri haberleşme

Seri haberleşme

Bu bölümde, F401-RE mikrodenetleyici kart ile bilgisayar arasında seri port üzerinden veri alışverişi yapmamızı sağlayan programı Mbed ve STM32CubeIDE yoluyla yazmaya çalışacağız.

Seri haberleşme, dijital verilerin aktarılması olarak tanımlanabilir.

Senkron ve asenkron haberleşme

Senkron haberleşmede veri ile birlikte bir de saat (clock) sinyali kullanılır. Veri saat sinyali ile eş zamanlı olaral iletilir. İletişim için 2 hat gerekir. Asenkron iletişimde ise saat (clock) sinyali yoktur.

USART (Universal (syncronous) Asyncronous Receiver Transmitter)

Mikrodenetleyicilerde yaygın olarak kullanılan bir seri haberleşme birimidir.

USART veri formatı aşağıdaki özelliklere sahiptir:

  • UART iletişimde veriler frame şeklinde iletilir.
  • Her bir frame içinde 1 start bit, 8 veri biti ve stop biti bulunur.
  • Stop biti 1 veya 2 bit olabilir.
  • Ayrıca parite biti bulunabilir.

USART özellikleri aşağıda gösterilmektedir:

  • UART seri iletişim kurmak için MCU'lar içinde bulunan çevre biriminin adıdır.
  • RS232 fiziki bir katmandır.
  • Genellikle MCU'ların UART çıkışları 3,3 v. veya 5 V. seviyelerindedir.
  • Uzun mesafelerde elektriksel gürültülerden etkilenmemek için USART-RS232 çeviriciler kullanılır.
  • 2 MCU doğrudan USART birimleri üzerinden haberleşebilir.
  • UART birimlerinde RX, TX ve GND uçları bulunur.
  • Haberleşecek birimlerin TX ve RX uçları çapraz bağlanır. GND bağlantıları ortaklanır.

Baud rate kavramı özellikleri aşağıda gösterilmektedir:

  • Seri haberleşme hızları Baud rate ile ifade edilir.
  • Genellikle 300-115200 bps arasında değişir.
  • bps: bits per second
  • İki biriminde haberleşebilmesi için aynı baud rate değerlerinde iletişim yapması gerekir.

Uart-usb converter kartlar ile mikrodenetleyici le bilgisayarı haberleştirebiliriz. Bu kart bilgisayar üzerinde sanal bir com port oluşturarak bu işlemi yapar. F-401RE kartı üzerinde (üst kısım) bu işlemi yapan bir bölüm vardır.

Tera Term yazılımı kurulumu

Mikrodenetleyici üzerinden seri port yoluyla bilgisayara bir veri gönderdikten sonra bu verileri görüntülemek için bir terminal yazılımına ihtiyacımız olacaktır. TeraTerm, CoolTerm vb. yazılımlar seri iletişim kurmak ve veriyi PC ekranına yazmak için kullanılır.

Seri haberleşme ile ilgili programları kullanmadan önce, seri port üzerinden yapılan haberleşmeyi görmemizi sağlayan Tera Term adlı programı sitesinden indirelim ve bilgisayarımıza kuralım.

Seri haberleşme (Mbed ile)

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"

Serial pc(USBTX, USBRX, 115200);
int id = 0;

int main() {
    while (1) {
	   pc.printf("Data send: %d\n", id++);
       wait(1.0); // 1 saniye bekleme
    }     
}

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şlar.

7. Verileri ekranda göstermek için, Tera Term programını çalıştıralım. Karşımıza gelen pencerede, Serial seçeneğini ve port bölümünde kartımızın bağlı olduğu sanal seri portu seçip OK butonuna tıklayalım.

8. Ekranda anlamsız karakterler gösterilecektir. Bunu düzeltmek için, Tera Term programının menüsünden Setup - Serial port... seçeneğine tıklayalım:

9. Speed seçeneğini 115200 olarak ayarlayalım ve New setting butonuna tıklayalım:

10. Ekrandaki karakter dizisi başlangıç sütunu kayık olarak gözükecektir. Bunu düzeltmek için, Tera Term programının menüsünden Setup - Terminal... seçeneğine tıklayalım:

11. Receive seçeneğini AUTO olarak ayarlayalım ve OK butonuna tıklayalım:

12. Tüm karakterler düzgün bir şekilde görüntülenecektir:

Seri haberleşme (STM32CubeIDE ile)

1. Önce buradaki talimatları uygulayarak, STM32CubeIDE ortamında yeni bir proje oluşturalım.

2. main.c dosyasının içindeki kodları aşağıdaki şekilde düzenleyerek kaydedelim:


#include "main.h"
#include <stdio.h>

int main(void)
{
  /* USER CODE BEGIN 1 */
  char cdizi[40];
  int id=0;  

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* 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 */
    /* USER CODE BEGIN 3 */
	HAL_UART_Transmit(&huart2,  (uint8_t*) cdizi, sprintf(cdizi, "Data send: %d\n", id++), 100);
	HAL_Delay(1000);
  }
  /* USER CODE END 3 */
}

3. Programı derleyelim.

4. 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.

5. Program kart tarafından otomatik olarak okunarak çalıştırılır. Kart kendini resetler.

6. Program çalışmaya başlar.

7. Tera Term programının çalışması ile ilgili olarak, Mbed örneğinin 7-12 maddeler arasındaki işlemleri uygulayalım.