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