(09-03-2020, Saat: 08:11)frmman Adlı Kullanıcıdan Alıntı: Gönderme satırınızı aşağıdaki gibi düzenleyip tekrar denermisiniz.
Not: Baudrate, parity, doğru fiziksel bağlantı gibi hususları hatırlatmayı gerekli görmüyorum.
HAL_UART_Transmit(&huart2,(uint8_t*)com_giden,strlen(com_giden),10);
strlen de hata alırsanız yukarıya
#include <string.h> i eklemeyi unutmayın.
Interrupt ile haberleşen UART içerisinde bu şekilde interrupt kullnmadan haberleşme yapmak mümkün mü ? Uygun mu?
(Eleştiri değil bilmediğim için soruyorum)
Bu kodu da denediim sonuç aynı. Aynı bilgisayarda farklı projenin sorunsuz bağlandığını gördüm.
Şaşkınım, anlam veremiyorum. Projeyi yeniden create edip deneyeceğim.
Bu sorundan farklı olarak şöyle bir sıkıntım var.
Interrupt ile gelen UART datasını uint_8 içinden char dizisine aktarıyorum.
Bilgisayardan şöyle bir komut dizisi gönderiyorum:
Kod: (Select All)
<10-8-0-1>
Kod: (Select All)
int bas,bit=0;
for (int k = 0; k < 12; ++k) {
if (com_gelen[k]=='<') bas=k+1; //< işaretinin yeri
if (com_gelen[k]=='>') bit=k; //> işaretinin yeri
Kod: (Select All)
memset(komut, NULL, sizeof(komut));
uint_8 olarak gelen datayı komut char dizisini içine atıyorum:,
Kod: (Select All)
HAL_Delay(100);
int kk=0;
for (int k = bas; k < bit; ++k){
komut[kk] = com_gelen[k];
kk++;
}
Bu noktada normalde while içinde idöngü tamamlanınca döngü sonunda com_gelen i null yapıyorum:
Kod: (Select All)
memset(com_gelen, NULL, sizeof(com_gelen));
buraya kadar komut sorunsuz çalışırsa bir sonraki döngüde hatasız devam ediyor.
ANCAK;
eğer bir sıkıntı olursa işlem
Kod: (Select All)
memset(com_gelen, NULL, sizeof(com_gelen));
satırına ulşamadığından bu değişken null yapılamıyor ve bir sonraki uart datsı geldiğinde en sondaki boş karakterden itibaren yazmaya başlıyor, Şöyleki:
Sorunsuz çalışırsa uart dan gelen verinin görünümü

Eğer sorun oluşursa gelen data en son boş byte dan itibaren yazılmaya başlıyor şöyle:

sorunu çözmek için bu for döngüsünde bir çözüm bulmak yada gelen veriyi yeniden pare etmem gerekiyor.
Kod: (Select All)
int bas,bit=0;
for (int k = 0; k < 12; ++k) {
if (com_gelen[k]=='<') bas=k+1;
if (com_gelen[k]=='>') bit=k;
}
her zaman komut char dizisi içine < işaretinden > işaretine kadar olan kısım yazılmalı bi üstteki for döngüsünü yada
gelen datayı yeniden parse etmem gerekiyor.
kinci resimdeki gibi en son byte dan itibaren veriyi com_gelen uint_8
değişkenine yazdığı için için hemen üstteki < ve > iaretlerini arayan for döngüsü doğru < işaretinin dizi içerisindeki yerini > işaretinden sonra verdiğinden ben
Kod: (Select All)
<10-8-0-1>
şeklinde parse etmek için data beklerken
Kod: (Select All)
<10-8-
bu şekilde data alınca işleme devam edemiyorum. Her iki resimdede data gelmiş olsa da sorunsuz şekilde nasıl parse edebilirim?
Kod: (Select All)
uint8_t com_gelen[12];
Tecrübe ve tavsiyenizi duymayı çok isterim.
Genelde ingilizce klavye ile ileti gönderiyorum.