Merhaba,
Öncelikle ultrasonik sensörler doğrudan işlemcinin gpio pinlerinden okunan değerin zamanını ölçerek kullanılamaz. Çünkü kullanılan komutların gerçekleşmesi için birden fazla clock cycle işlemcinin kendisi tarafından harcanır. Mikrosaniye cinsinden bir değer ölçerken kaçırdığın minicik bölümler sana yüksek seviyede hassasiyet kaybı oluşturur. Bu tür işlemler için timerların input capture özelliği vardır yani yansımayı donanım seviyesinde dinler ve registere yazar sen registeri okuduğun için herhangi bir zaman kaybı yaşatmaz. Şu örneği incele
https://controllerstech.com/hcsr04-ultrasonic-sensor-and-stm32/
Diğer bir sorun ise ana while döngüsünün sonunda
return mesafe2; komutu var derleyici return komutunu gördüğü an tüm döngüleri kırarak fonksiyonu sonlandırır. Bu yüzden döngün sadece bir kere çalışıp kapanıyor. Bu satırı sil.
Başka bir sorun göremedim.