6 Ekim 2016 Perşembe

7- STM32F4 USART Kullanımı

Merhaba Arkadaşlar,
                Sıradaki örneğimiz Stm32f4 ile USART haberleşmesi nasıl yapılır, bunun hakkında kısa bilgi ardından da kod paylaşımı yapılacaktır.
USART; (Universal Synchronous-Asynchronous Receiver – Transmitter), 0 ve 1 ‘lerden oluşan verileri, iki dijital sistem arasında alma- gönderme işlemlerinde kullanılan bir iletişim protokülüdür. İletişim seri ve paralel olmak üzere iki şekilde yapılabilir. Bunlar paralel ve seri iletişimdir. Paralel iletişimde veriler göndericiden alıcıya aynı anda birden fazla sayıda bit gidecek şekilde gönderilir. Seri iletişimde ise veriler tek hat üzerinden sırayla giderler. Bu yüzden paralel haberleşme seri haberleşmeye göre daha hızlıdır. Ancak uzun mesafeler için paralel haberleşme uygun değildir. Usart haberleşmesi bir seri iletişim protokolüdür. 

STM32F4’de aşağıdaki tabloda gösterildiği gibi 8 adet USART birimi vardır.  


Aşağıda gösterildiği üzere USART1 APB2 bus hattına, USART2 APB1 bus hattına bağlıdır. Konfigürasyon ayarlamaları yapılırken bunlara dikkat etmemiz gerekir. Detaylı bilgilere kitaplardan ya da internet üzerinden araştırılarak ulaşılabilir. Biz direkt kod yazımına geçeceğiz.

 

Artık kod yazma kısmına geçebiliriz:
1 - Öncelikle gerekli kütüphane eklemelerini yapmamız gerek. Bunlar:
#include "stm32f4xx.h"                                               //stm32f4 kütüphanesi
#include "stm32f4xx_gpio.h"                    //GPIO kütüphanesi
#include "stm32f4xx_rcc.h"                       // RCC clock kütüphanesi
#include "stm32f4xx_usart.h"                  // usart kütüphanesi
#include <stdio.h>                                         // C kütüphaneleri
#include <stdlib.h>

char          str[50];                             //değişken tanımlaması
uint32_t              i;

2- Periph clock hatlarını aktifleştirelim:
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
3- Usart ayarlamalarını yapalım:
void USART_Config()
{
    GPIO_InitTypeDef                               GPIO_InitStructure;
    USART_InitTypeDef                            USART_InitStructure;
                              
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;   //alternatif fonksiyon için kullanacağız
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; 
  GPIO_InitStructure.GPIO_PuPd              = GPIO_PuPd_UP;
  GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_6;          //PB6 pini => USART1 (TX) pinidir
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
               
  // GPIO ALTERNATE FUNCTION olarak tanimlanan pinin konfigürasyonlari
  // pin ile bağlantı kuracagi modül belirlenir. 
 GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_USART1); //PB6 dan göndereceğiz
               
  // USART konfigürasyonlari:
   USART_InitStructure.USART_BaudRate       = 115200;  //baudrate
   USART_InitStructure.USART_HardwareFlowControl  = USART_HardwareFlowControl_None;
   USART_InitStructure.USART_Mode       = USART_Mode_Tx; //gönderme modu
   USART_InitStructure.USART_Parity       = USART_Parity_No;    //parity biti yok
   USART_InitStructure.USART_StopBits  = USART_StopBits_1;
   USART_InitStructure.USART_WordLength = USART_WordLength_8b; //8bit veri uzunluğu
   USART_Init(USART1, &USART_InitStructure);
                                                                                             
   USART_Cmd(USART1, ENABLE);
}

4- Ana Döngü:
int main(void)
{
      Periph_Config();
      USART_Config();
               
           while(1)
               {
                     sprintf(str, " stm32f4 uygulamasi \n"); //yazı olarak gönderilecek
                     USART_Puts(USART1, str); //usart fonksiyonu
                     i= 5000000;
                     while(i)     i--;
                }                                            
}

///////////////////////////
USART Fonksiyonu

void USART_Puts(USART_TypeDef* USARTx, volatile char *s)
                {
                          while(*s)
                            {
                                while(!(USARTx ->SR & 0x00000040));
                                USART_SendData(USARTx,*s);
                                *s++;
                             }
                }

Aşağıda kodun resmini bulabilirsiniz:


İyi Çalışmalar.

                                                                                                                      

Hiç yorum yok:

Yorum Gönder