STM32 Variable Değişkenler

Başlatan Kessn, 29 Haziran 2022, 15:48:42

Kessn

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.

kimlenbu

#1
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 );

}

Kessn

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

Kessn

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.

94onur94

#4
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

Kessn

Tamamdır Hocam Çok Teşekkür Ederim
Kanalınızı Takibe Aldım Oradanda Soru Sorarım Artık Size :)