STM32F4xx Std_Lib USART (Örnek)

Başlatan Klein, 02 Kasım 2012, 15:28:29

Klein

Bu örneğimiz Usart3 RX kesmesi ile ile alınan veriyi aynen geri gönderen ECHO örneği.
Programı test etmek için hyper terminal kullanılabilir.  Hyper terminalde ne yazarsanız aynen size geri döner.
Daha önceki örneklerde , kütüphane ekleme , init vs.. konular anlatıldığı için, burada o konulara girmiyorum.


Kod:
#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_usart.h"
#include "stm32f4xx_tim.h"
#include "misc.h"

/********* Function prototypes *************************************/
void SendChar(char Tx);
void SendTxt(char *Txt);

GPIO_InitTypeDef GPIO_InitStruct;
NVIC_InitTypeDef NVIC_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TBInitStruct;
USART_InitTypeDef USART_InitStructure;

uint8_t timer_update=0;
uint32_t ledtime=0;



/*****************  Interrupt handlers  ***********************************/
void TIM7_IRQHandler(void)
{
	TIM7->SR=0;
	timer_update=1;
}

void USART3_IRQHandler(void)
{
char temp;
	temp=USART_ReceiveData(USART3);
	SendChar(temp);
}

/***************************************************************************/


void init_tim7(void){

	RCC_APB1PeriphClockCmd(RCC_APB1ENR_TIM7EN,ENABLE); // Timer saat kaynağını aç
	TIM_TBInitStruct.TIM_Prescaler = 4199; // ÖnBölücü (PSC) değeri 4199
	TIM_TBInitStruct.TIM_Period =1; // Otomatik geri yükleme (ARR) eşiği 1
	TIM_TimeBaseInit(TIM7,&TIM_TBInitStruct); // Timeri init et

	TIM_ITConfig(TIM7, TIM_IT_Update, ENABLE); // Timer Update olayında interrupt istesin.
    NVIC_InitStructure.NVIC_IRQChannel = TIM7_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);


    TIM_Cmd(TIM7, ENABLE);// Timeri başlat
}


void init_gpio(void){
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);

  // Ledlere bağlı pinlerin başlatma ayarları
  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStruct.GPIO_OType= GPIO_OType_PP;
  GPIO_InitStruct.GPIO_Speed= GPIO_Speed_100MHz;
  GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOD,&GPIO_InitStruct);

	// Usart 3'e  bağlı pinlarin başlatma ayarları
	  GPIO_PinAFConfig(GPIOB,10,GPIO_AF_USART3);
	  GPIO_PinAFConfig(GPIOB,11,GPIO_AF_USART3);
	  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
	  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
	  GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
	  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
	  GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
	  GPIO_Init(GPIOB, &GPIO_InitStruct);
}

void init_usart(void){

// usart başlatma ayarları
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
  USART_InitStructure.USART_BaudRate = 9600;
  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(USART3, &USART_InitStructure);
  NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

  USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);
  USART_Cmd(USART3,ENABLE);

}


void SendChar(char Tx)
{
      while(!(USART3->SR&0x80));  // TX Buffer dolu ise bekle (Rehber Sayfa 646)
      USART_SendData(USART3,Tx);
}

void SendTxt(char *Txt)
{
      while(*Txt)
        {
          SendChar(*Txt);
          Txt++;
        }
}


int main(void)
{

  SystemInit();
  init_gpio();
  init_usart();
  init_tim7();

	while(1)
    {
  	  	if(timer_update){
            timer_update=0;

            if(++ledtime > 5000){
      			ledtime =0;
                GPIO_ToggleBits(GPIOD,GPIO_Pin_12);
            }
        }

    }
}

electricker

Hocam stm32f4 le çalışmaya yeni başladım. İki bilgisayar arasında .txt vs. dosya paylaşımını bu sistemle nasıl yaparız ? ya da nereden başlamam gerekiyor ? ??? ??? ???

Klein

STM32F4'e girmeden önce  fat yapısı, dosya yapısı vs.. gibi konulara hakim olmak gerek.

caglar

Ben bu örneği kopyalayıp yapıştırdım kütüphaneleri de seçtim ama sanırım kütüphanelerden kaynaklı hata alıyorum.
timer2.axf: Error: L6218E: Undefined symbol USART_SendData (referred from main.o).
Bütün hatalar böyle ve yeni başladığım için anlamadım açıkçası.
Yardımlarınızı bekliyorum.
Herkese kolay gelsin...

Klein

USART_SendData(..) fonksiyonu tanımsız diyor.

"stm32f4xx_usart.h" dosyasının var olup olmadığını kontrol edin.

caglar

Bu dosyayı projeye ekledim ama hala böyle bir hata veriyor.
Anlayamadım.

Klein

"stm32f4xx_conf.h" içerisinden  /*#include "stm32f4xx_usart.h" */ satırını bulup, satırı uncomment yapın.
Eğer bulamazsanız main.c dosyasının başına ekleyin.

#include "stm32f4xx_usart.h"

Kaanx

#7
Hocam öncelıkle elınıze saglık cok sagolun uygulama için buradaki kodunuzu yazdım bir sorun yok çalısıyor suan fakat PC ye sanal port uzerınden veri göndermek istedim RealTerm de bunu göremedım hocam
sizin kodunuza ek olarak int main de
int main(void)
{
	SystemInit();
	init_gpio();
	  init_usart();
	  init_tim7();
	  SendTxt("PicProje");
	  while(1)
	      {
	    	  	if(timer_update){
	              timer_update=0;

	              if(++ledtime > 5000){
	        			ledtime =0;
	                  GPIO_ToggleBits(GPIOD,GPIO_Pin_12);
	              }
	          }

	      }

}

olarak yazdım fakat real term de hiç bir veri göremedim.Donanımsal olarak board uzerınde baglantı yapmam gerekiyor mu birde hocam bunu merak ettim ? Af ile yönlendırme yapılıyor zaten gerek yok dıye dusndum fakat emın olamadım.

Erhan YILMAZ

Hocam keilde stm32f4 libraryleri kullanarak proje oluşturmayı gösteren konuyu düzenleyecektiniz son durumu nedir? Konu linkini bulamıyorum.

Klein

Haftaya Expomed fuarı var. Ona hazırlanıyoruz. Çoğunlukla siteye bile giremiyoru. Fuar dönüşü ilgileneceğim.

sadogan

Alıntı yapılan: Klein - 01 Nisan 2013, 04:27:26
Haftaya Expomed fuarı var. Ona hazırlanıyoruz. Çoğunlukla siteye bile giremiyoru. Fuar dönüşü ilgileneceğim.
Hocam stant ve firma isminiz nedir gelebilirsek ziyaret edelim.

Klein


berat23

deneme1.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f4xx.o).
deneme1.axf: Error: L6218E: Undefined symbol assert_param (referred from misc.o).


böyle bir hata alıyorum.

Gökhan BEKEN

Hocam , kütüphane dosyaları projemde bulunmadığı için, KEIL aşağıdaki satırlarda hata veriyor, bu dosyaları nerden bulabiliriz?
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_usart.h"
#include "stm32f4xx_tim.h"
#include "misc.h"
Özel mesaj okumuyorum, lütfen göndermeyin.

JKramer

F4 için Standart Peripheral Lib, ST'nin sitesinden indirebilirsiniz.