STM32f407 giriş uygulamasına yardım

Başlatan comencan, 25 Temmuz 2016, 08:45:00

comencan

Merhaba,
STM'e giriş için kendime bir proje seçtim ve internette örneğini göremedim herhangi bir bilginiz varsa yardımcı olabilir misiniz acaba? STM32f407-Discovery kart üzerinde küçük bir proje.
2 tane Board'um olacak
1.Boarduma terminalden veri göndermek istiyorum.
1.Boardumdan gönderdiğim veriyi 2.Boarda gönderip.
2.Boardumdan da gelen veriye göre 4 basamaklı sayıcıya yazı yazdırmak istiyorum.
Hal kütüphanesi kullanıyorum STMCubeMx'de iki ayrı proje oluşturdum.
Donanım giriş çıkışlarda bir sorunum yok.Terminalden boardıma gelen veriyi nasıl işleyeceğimi ve diğer board'a aktaracağımı bilmiyorum yardımcı olabilirseniz veya yol gösterebilirseniz sevinirim.Teşekkür ederim, iyi çalışmalar.Saygılarımla.

KABO

   seri haberleşme,spi,veya diger haberleşme portlarıyla  diger borda bilgi gonderebilirsin.gonderdigin bilgiyi işleyip ona gore işlem yaptırabilirsin. Kolay gelsin.
BILGI PAYLASTIKCA COGALIR...

Cemre.

#2
UART için benim kullandığım yöntem şöyle,

uint8_t MAG_RX_Buffer[64],MAG_RX_Data[64]; // buffer

HAL_UART_Receive_IT(&huart1, MAG_RX_Data, 1);

Yukarıdaki fonksiyonu main'de Init fonksiyonlarından sonra çağırıyorum. Bunun yaptığı iş UART'tan 1 karakter geldiğinde kesme üretmek için donanımı kurmaktır. Yani işlemci bu satırda veri gelsin diye beklemiyor. UART'ı kurduk, veri gelmesini bekliyoruz. Veri geldiğinde çağrılacak fonksiyon CpltCallback fonksiyonu.

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	if (huart->Instance == USART1)	//current UART
	{
		if (MAG_RX_Data[0] == 36) // "$" karakteri geldiyse buffer temizle
		{
			for (MAG_RX_Index = 0; MAG_RX_Index<100; MAG_RX_Index++) MAG_RX_Buffer[MAG_RX_Index] = 0;
			MAG_RX_Index = 0;
		}
		if (MAG_RX_Data[0] != 13) // "*" karakterine kadar
		{
			MAG_RX_Buffer[MAG_RX_Index] = MAG_RX_Data[0];
			MAG_RX_Index++;
		}
		else
		{
			MAG_RX_Cplt = 1;
		}
		HAL_UART_Receive_IT(&huart1, MAG_RX_Data, 1);
	}
}


Yukarıdaki kod parçası bizim callback fonksiyonumuz. Uart1 1 karakterlik veri aldığında hemen bu fonksiyona dallanıyoruz. Benim uygulamamda gelen veri $ ile başlayıp * ile bitiyordu (GPS datası ile aynı). Yukarıda bunun kontrolleri yapılıyor. Sorun olursa belirtirsiniz.
Kontrollerden sonra Recive_IT kesmesi tekrar kuruluyor. Bu şekilde UART'tan gelen her bir karakter tek tek işlenip Buffer değişkenime aktarılıyor. Ben de MAG_RX_Cplt değişkenimi kontrol ederek veriyi kullanıyorum. Bu fonksiyon User Code 4 alanında tanımlansa olur.

Benzer örnekler CubeMXF4 paketinde de var. İki kartın haberleştirilmesi vs ile ilgili. Eksik birşey yazmadıysam bu şekilde sorunsuz kullanılabilir. Sorunuz olursa buradan sorun lütfen.

İyi günler, iyi çalışmalar.