Merhabalar C programlama dili ile stm32 ide üzerinden bir geliştirme board'ı(nucleo) üzerinde çalışıyorum.Bilgisayar Mühendisliği 2.Sınıf öğrencisiyim yardım edebilirseniz benim için çok iyi olur.
Log(char*str){
HAL_UART_Transmit( &huart3, (uint8_t *)str,100, HAL_MAX_DELAY );
HAL_UART_Transmit( &huart3, (uint8_t *)"\r\n", 2, HAL_MAX_DELAY );
}
şeklinde bir fonksiyon oluşturmuştum şimdi ise bu fonksiyona parantez içerisindeki değerlere stirng veya float veri atayıp onun çıktısını almak istiyorum (internetten bulamadım) <stdarg.h> kütüphanesi kullanarak(va_list va_start vs)..
Yardımcı Olabilir Misiniz ?
Bu işte henüz yeniyim anlayabileceğim türden anlatırsanız çok sevinirim.
STM32'de string'i unutabilirsin. Float tipindeki değişkeni "char array" içine atmak istersen :
uint8_t tmpStr100[100];
Log(float degisken){
memset(tmpStr100,0,sizeof(tmpStr100));
sprintf((uint8_t *)tmpStr100, "%05.1f", degisken);
HAL_UART_Transmit( &huart3, (uint8_t *)tmpStr100,100, HAL_MAX_DELAY );
}
Alıntı yapılan: kimlenbu - 29 Haziran 2022, 17:35:31STM32'de string'i unutabilirsin. Float tipindeki değişkeni "char array" içine atmak istersen :
uint8_t tmpStr100[100];
Log(float degisken){
memset(tmpStr100,0,sizeof(tmpStr100));
sprintf((uint8_t *)tmpStr100, "%05.1f", degisken);
HAL_UART_Transmit( &huart3, (uint8_t *)tmpStr100,100, HAL_MAX_DELAY );
}
Abi yazdığın kodu aynen uyguladım ama main kısmında Log() fonksiyonunu cagirdigimda içine yazdığım değer yerine başka bir değer yazıyor bunu nasıl halledebilirim
Ve bu kodu <stdarg.h> kütüphanesindeki fonksiyonlar ile nasıl çalıştırabilirim (va_list,va_start..) bir abim böyle çalıştırabilirsin demişti sprintf ile birlikte ama tam olarak yapamadım şimdiden çok teşekkür ederim.
Aşağıdaki fonksiyonu ve includeları main dosyanda yaz ve C'deki standart printf gibi kullanabilirsin. Kullandığın UART birimine göre kodu değiştirmeyi unutma. Aşağıdaki fonksiyonda huart2 tanımlı.
#include "string.h"
#include "stdio.h"
#include "stdarg.h"
#include "stdlib.h"
void UART_Printf(const char* fmt, ...) {
char buff[256];
va_list args;
va_start(args, fmt);
vsnprintf(buff, sizeof(buff), fmt, args);
HAL_UART_Transmit(&huart2, (uint8_t*)buff, strlen(buff), HAL_MAX_DELAY);
va_end(args);
}
Örnek kullanım 92. ve 132. satır: https://github.com/onur94/STM32/blob/master/Adc%20DMA/Src/main.c#L92
Youtube kanalımda ki STM32 derslerimi takip edebilirsin. https://youtube.com/playlist?list=PL4JTIOfTfC1tU-Yfr2oYOFTkPI3gHgd2N
Tamamdır Hocam Çok Teşekkür Ederim
Kanalınızı Takibe Aldım Oradanda Soru Sorarım Artık Size :)