logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Rozwiązano] [STM32F042K6]ADC + DMA: Wyniki ADC przekraczają 10^6, jak ustabilizować?

ps19 28 Lip 2018 20:18 540 10
REKLAMA
  • #1 17354663
    ps19
    Poziom 12  
    Posty: 133
    Pomógł: 2
    Ocena: 6
    Witam

    Mam mały problem z uruchomieniem ADC + DMA na STM32F042K6 (Nucleo).
    Wyniki z ADC zamiast mieścić się w zakresie 0-4095 to ich wartości oscylują powyżej 10^6

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 17354684
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #3 17354825
    ps19
    Poziom 12  
    Posty: 133
    Pomógł: 2
    Ocena: 6
    ADC jest 12 bitowe (rejestr jest 32 bitowy):
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Przez DMA odczytuję wartość 32 bitową czyli dalej nie powinno być problemów (W erracie nawet pisze, że dla odczytów DMA 8 i 16 bitowych coś jest nie tak).

    Podgląd wartości zmiennych (wynik_adc) debugerrem i przez USART daje taki sam wynik odczytu.

    Jak odczytam ze zmiennej 32bitowej wartość załóżmy 4095 (max dla 12 bitów) i wrzucę to do 16bitowej to dalej zmieści się w zakresie zmiennej.
  • Pomocny post
    #4 17354858
    gaskoin
    Poziom 38  
    Posty: 4159
    Pomógł: 436
    Ocena: 102
    Problemem jest źle ustawiony MSIZE. DMA jak inkrementuje wskaźnik do pamięci to u Ciebie robi to co 16 bitów zamiast co 32. Sprawdź też PSIZE, bo pewnie też jest źle.

    Cytat:
    MSIZE[1:0]: Memory size
    These bits are set and cleared by software.
    00: 8-bits
    01: 16-bits
    10: 32-bits
    11: Reserved


    ps19 napisał:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #5 17354896
    ps19
    Poziom 12  
    Posty: 133
    Pomógł: 2
    Ocena: 6
    Hmm ustawione jest na 32 bity:

    [STM32F042K6]ADC + DMA: Wyniki ADC przekraczają 10^6, jak ustabilizować?

    Chociaż jutro sprawdzę - spróbuję zmienić na inne rozmiary.
  • Pomocny post
    #6 17354902
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    W kodzie, który pokazałeś, DMA jest zaprogramowane na transfery 16-bitowe.
  • REKLAMA
  • #7 17354922
    ps19
    Poziom 12  
    Posty: 133
    Pomógł: 2
    Ocena: 6
    Faktycznie, jutro sprawdzę. :)
  • #8 17354957
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #9 17354973
    Konto nie istnieje
    Konto nie istnieje  
  • Pomocny post
    #10 17355205
    gaskoin
    Poziom 38  
    Posty: 4159
    Pomógł: 436
    Ocena: 102
    W erracie jest tylko napisane, że jest błąd w opisie w niektórych wersjach dokumentacji. Jak używasz bibliotek to nie ma to znaczenia. Nie czytaj po łebkach. Zmień MSIZE albo tablice na 16 bitowe elementy i będzie git.
  • #11 17356743
    ps19
    Poziom 12  
    Posty: 133
    Pomógł: 2
    Ocena: 6
    Działa, dziękuję za pomoc
    Problemem było niepoprawnie ustawione MSIZE i PSIZE.

    Poprawna konfiguracja - ustawione na 32 bity:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

Podsumowanie tematu

LABEL_AI_GENERATED
W dyskusji poruszono problem z odczytem wartości ADC na mikrokontrolerze STM32F042K6, gdzie wyniki przekraczały 10^6 zamiast mieścić się w zakresie 0-4095. Użytkownik zidentyfikował, że problemem były błędne ustawienia MSIZE i PSIZE w konfiguracji DMA. Po wskazówkach od innych uczestników, które sugerowały sprawdzenie ustawień DMA oraz typów zmiennych, autor potwierdził, że po poprawnej konfiguracji (ustawienia na 32 bity) problem został rozwiązany.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA