STM32 HAL USART İNCELEMESİ

Başlatan refikos, 08 Ağustos 2018, 14:34:09

refikos

 HAL_UART_RECEIVE_IT(&huart2,r_data,SIZE);
 HAL_UART_TRANSMIT_IT(&huart2,t_data,SIZE);
Buralardaki size kısmını değiştirerek inceleme yapıyorum ve bunların bazılarını tablo haline dönüştürdüm ama olayı tam kavrayamadım.Olay şöyle işliyor,butona basıldığı zaman HAL_UART_TRANSMIT_IT(&huart2,t_data,SIZE); kodu yazılı ve gelen verinin nasıl kullanılacağını belirten HAL_UART_RxCpltCallback fonksiyonu içinde  t_data=r_data+1; yazılı.Butona basıldığı zaman debug kısmında r_data ve t_datadaki değişimleri izleyerek size'in tam olarak ne işe yaradığını ve nasıl çalıştığını anlamaya çalışıyorum .Tablo aşağıdaki linktedir:
https://www.dosyaupload.com/id57

Tagli

HAL_UART_RECEIVE_IT() fonksiyonu, size parametresinde belirlenen sayıda byte'ı alıp, ikinci parametrede belirtilen adrese yazar ve bunu kendi içinde kesmeleri kullanarak yapar. İşi bitince de ilgili callback fonksiyonunu çağırır. Bu noktadan sonra kesme kapatılır, gelen byte'lar umursanmaz. Yani belli sayıda byte almak için sistemi önceden kuruyorsun. Tekrar alım yapman gerekirse, o fonksiyonu yine çağırarak tekrar kurman gerekir.

Burada şöyle bir sorun var: Ne kadar byte geleceğini çoğu zaman önceden bilemeyiz. Bu konu internet üzerinde de epey tartışılmış. Bazıları size = 1 yaparak denemişler ve her seferinde tekrar kurmuşlar ama bu durumda da arada byte'lar kaçmış. Genelde bu fonksiyonu hiç kullanmayıp DMA'lı versiyonu ile sorunlarını çözmüşler.

Bu fonksiyondaki gıcıklık, STM32 öğrenmeyi yeni başladığım günlerde (ki yaklaşık olarak 2016 sonuna denk gelir) beni HAL'dan soğutan yegane sebeptir. Hala da kullanmam, kendim register'lara değer vererek kod yazarım.
Gökçe Tağlıoğlu