31 Temmuz 2020 Cuma

STM32 HAL Kütüphanesi ile DMA Üzerinden ADC Okuma Hatası ve Çözümü

STM32CubeIDE ile oluşturduğum bir projede DMA üzerinden 3 kanal ADC okuması yapacaktım. Bu kapsamda ADC ve DMA birimlerini aşağıdaki şekilde düzenledim.



Aslında her şey doğru görünüyor. Bu şekilde projeyi oluşturdum ve aşağıdaki fonksiyon ile ölçümü başlattım ancak ölçüm sonunda sadece son tanımlanan ADC kanalının değerini buffer arrayin ilk elemanında görüyordum.

HAL_ADC_Start_DMA ( &hadc1, ( uint32_t * ) aADCxConvertedData, ADC_CONVERTED_DATA_BUFFER_SIZE );
Bunun problemini araştırırken code generator tarafına olan bir hatadan dolayı problem çıktığını tespit ettim. Code generator kodu aşağıdaki sırada oluşturuyor. Bu şekilde DMA ayarlarından önce ADC ayarları yapıldığı için DMA konfigürasyonu hatalı oluyor. ADC, DMA yapısı istediğimiz gibi çalışmıyor.




ADC ile DMA Init fonksiyonlarını yer değiştirdiğimizde problem ortadan kalkıyor ve ADC start fonksiyonu çağrıldıktan sonra tanımlanan buffera ADC değerleri sırasıyla yazılıyor.



Bu kısmı düzelttikten sonra ADC ölçümünü tetikleyebilir ve ölçüm verilerini ister bir periyodik interrupt içerisinde ister aşağıda verdiğim ölçüm tamamlandı interruptı içerisinde değerlendirebilirsiniz.

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *AdcHandle)
İyi çalışmalar.



Hiç yorum yok:

Yorum Gönder

CAN Bus Frame Tipleri

Yazıya başlamadan önce CAN Bus temelleri ve mesaj yapısının temellerini incelemek için bu linkte yer alan blog yazısını inceleyebilirisiniz ...