"Enter"a basıp içeriğe geçin

STM32F103VCT6 USART1 Haberleşmesi

hikayedir atlayabilirsiniz.

Uzun bir süreden sonra tekrar bir şeyler yazabileceğim. Bu yazıyı bana mail yoluyla ulaşıp soru soran bir arkadaşın sayesinde yazıyorum. Buradan bu yazıyı yazmama vesile olduğu için teşekkür ederim.

Bilindiği üzere yeni nesil mikrodenetleyiciler gittikçe yaygınlaşmakta ve picleri halının altına süpürmekte. İnternet 5-6 yıl öncesine göre çok daha fazla bilgi edinme kaynağı olmakta. 2006 yılında e-proje gibi sitelerde bir şeyler öğrenmeye çalışan ve genellikle anfi (amplifikatör) yapmaya çalışan liseli gençlerdik. Şimdiyse 3 boyutlu yazıcılardan insansız hava araçlarına (drone)   kadar hayal edemeyeceğimiz bir çok gelişmeyi çok hızlı bir şekilde denemekte ve sonuçlarını elde etmekteyiz.

Paylaşacağım bilgi çok küçük bir bilgi olsa da yeni başlayanlar için önemli bir yere sahip olacağı kanısındayım.

————————————————————————————————————————————-

Eklediğim yazılım parçası HY-mini STM32V kartı ile denenmiş bir kod parçasıdır.  Paylaşmış olduğum kod parçası kart ile birlikte gelen örnek kodların düzenlenmiş halidir. Bir sonraki yazımda seri porttan gelen verileri nasıl yakalayıp işleyeceğimiz konusunda yazmak istiyorum (vakit bulabilirsem).

STM32F103VCT6 mikro denetleyicisi cortex M3 ARM mimarisine sahiptir. 72 MHz çalışma hızıyla ARM ailesine göre nispeten düşük bir hızda çalışmaktadır. 256 KByte flash’ı ve 48 Kbyte RAM’i bulunmaktadır. 16 Adet 12 bit ADC ve 2 adet 12 bit DAC’ı bulunmaktadır. 5 adet UART desteklemektedir. LPC serisi ARM işlemcilere göre daha ucuz olması seri üretim cihazlarda önemli bir etmendir.

USART Ayarlamaları 

Usart ayarlamalarında aşağıdaki tabloda bulunan registerlar kullanılmakta, ve daha detaylı bilgi için micromouse sitesinden yararlanabilirsiniz. STM’nin kütüphanelerini kullanarak yapacak olursak;

void USART_Configuration1(uint32_t	Baudrate)
{ 
  GPIO_InitTypeDef GPIO_InitStructure;
  USART_InitTypeDef USART_InitStructure; 

  RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1,ENABLE);
  /*
  *  USART1_TX -> PA9 , USART1_RX ->	PA10
  */				
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;	         
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
  GPIO_Init(GPIOA, &GPIO_InitStructure);		   

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;	        
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  USART_InitStructure.USART_BaudRate = Baudrate;
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_Parity = USART_Parity_No;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

  USART_Init(USART1, &USART_InitStructure); 
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
  USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
  USART_Cmd(USART1, ENABLE);
}

Dikkat edilmesi gereken nokta aşağıdaki kod satırlarıdır. Eğer RXNE interrupt’ını kullanmacaksanız “disable” yapmanız yeterli. Bir de TXE interrupt’ı var bu RS485 gibi uygulamalarda veri gönderiminin bittiğini anlayabilmek amacıyla kullanılabilir.

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
USART_ITConfig(USART1, USART_IT_TXE, ENABLE);

Projenin kaynak kodlarını indirmek için tıklayınız.

İlk Yorumu Siz Yapın

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir