Skocz do zawartości
Komentator

Kurs STM32 F4 - #5 - Pomiar napięcia (ADC), DMA, STMStudio

Recommended Posts

html_mig_img
Tym razem omówimy konfigurację przetwornika ADC, odkryjemy podstawy współpracy z DMA oraz nauczymy się korzystać z STMStudio! Mierząc napięcie możemy np. monitorować stan zasilania urządzenia, czy odczytywać informacje z czujników analogowych. Rozwiązanie okazuje się szczególnie użyteczne, jeśli dodatkowo do pracy zaprzęgniemy moduł DMA.

UWAGA, to tylko wstęp! Dalsza część artykułu dostępna jest na blogu.

Przeczytaj całość »

Poniżej znajdują się komentarze powiązane z tym wpisem.

Udostępnij ten post


Link to post
Share on other sites

Cześć!

Dzięki za kurs, opisujesz wszystko bardzo przystępnie.

Zauważyłem jeden babol.

W sekcji obsługi poprzez przerwanie, w funkcji

HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)

przekazujesz wskaźnik, a następnie korzystasz z operatora wyłuskania adresu, co jest niepoprawne.

Zamiast:

PomiarADC = HAL_ADC_GetValue(&hadc1);

powinno być:

PomiarADC = HAL_ADC_GetValue(hadc1);

Pozdrawiam i dziękuję za kurs 😉

Udostępnij ten post


Link to post
Share on other sites

Nie jest do końca źle. Po prostu autor użył zamiast wskaźnika otrzymanego jako argument HAL_ADC_ConvCpltCallback o nazwie "hadc", od razu struktury o nazwie "hadc1". Poprawnie kod powinien wyglądać tak:

    PomiarADC = HAL_ADC_GetValue(hadc);

Udostępnij ten post


Link to post
Share on other sites

Ha, w kodzie zmieniłem, a tutaj dałem stary parametr funkcji 😉

Oczywiście masz rację! Pozdrawiam 🙂

Udostępnij ten post


Link to post
Share on other sites

blad jest tu

uint16_t Joystick[2];

jak dwu elementowa tablica to

powinno byc

uint16_t Joystick[1];
...
Joystick[0] = 100;
Joystick[1] = 5050;

Udostępnij ten post


Link to post
Share on other sites

grizka, nie? Tablice są numerowane od 0, ale ich wymiar podaje się normalnie!

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

To i ja dołożę swoje przysłowiowe 5 gr.

HAL_ADC_Start_DMA(&hadc1, (uint32_t*)Joystick, 2);

Tak powinien wyglądać poprawnie kod dla DMA w przykładzie z joystickiem.

Błędy ujawniły się dopiero podczas korzystania z Keila.

Układ z któego korzystam: STM32F4 Discovery

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

A jak zrobić pomiar z kilku kanałów ADC1 w trybie blokującym?

Dziękuje za kurs, brakowało czegoś takiego

Udostępnij ten post


Link to post
Share on other sites
To i ja dołożę swoje przysłowiowe 5 gr.
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)Joystick, 2);

Tak powinien wyglądać poprawnie kod dla DMA w przykładzie z joystickiem.

Błędy ujawniły się dopiero podczas korzystania z Keila.

Układ z któego korzystam: STM32F4 Discovery

Hmm, nigdy nie trafiłem na takie problemy w Keilu, chociaż korzystałem z niego dość krótko (kilka miesięcy). Niemniej jednak fakt - funkcja przyjmuje jako argument typ uint32_t*, więc chcąć być zupełnie poprawnym, należałoby to jawnie zrzutować, tak jak to zaproponowałeś. Nigdy nie spotkałem się z tym problemem w Eclipse.

A jak zrobić pomiar z kilku kanałów ADC1 w trybie blokującym?

Dziękuje za kurs, brakowało czegoś takiego

Postaram się odpowiedzieć na Twoje pytanie jak tylko czas mi na to pozwoli!

Udostępnij ten post


Link to post
Share on other sites

Nie wiem czemu, ale mam problem z STM Studio.

Nie mogę wybrać zadeklarowanych zmiennych z pliku z rozszerzeniem .elf ponieważ STM Studio ich nie widzi. Gdy wskazuje mu plik z projektu ze stronki to działa tak jak powinno.

Winny w tym wypadku jest kompilator, że nie tworzy mi tych zmiennych ?

Udostępnij ten post


Link to post
Share on other sites

komarekzm, osobiście nie miałem takiego problemu, więc tylko mogę doradzić, abyś sprawdził, czy na 100% wybierasz odpowiedni plik. Może sięgasz np. do złego katalogu (np. starej wersji projektu, gdy nie było tych zmiennych)? Takie błędy są najprostsze, a można zmarnować na nich najwięcej czasu 😉

Udostępnij ten post


Link to post
Share on other sites

Strasznie to jest frustrujące . Rozgryzasz zawiłe wzory, rozpisujesz sobie wszystko, czujesz że z każdym wzorem przybywa skill, a tu coś takiego :/ .

Udało mi się wkąńcu i teraz działa 😃 , ale nie wiem dlaczego wcześniej nie chciało zadziałać , mianowicie skompilowałem projekt za pomocą "Build all", przedtem kompilowałem za pomocą "Build project" (klikając prawy przyciskiem na główny folder projektu).

Udostępnij ten post


Link to post
Share on other sites

komarekzm, grunt, że się udało! Dzięki, że podzieliłeś się rozwiązaniem tego problemu - zapewne pomoże w przyszłości innym 🙂

Udostępnij ten post


Link to post
Share on other sites

komarekzm, jesteś pewien, że chciałeś obserwować zmienne globalne (tylko do takich STM Studio ma dostęp)?

Udostępnij ten post


Link to post
Share on other sites

Moją wcześniejszą wiadomość można wrzucić do kosza. Później drugi raz napotkałem się na ten problem i bindowanie za pomoc build all nie pomogło. Zdecydowanie pomogło zapisanie maina, chociażby za pomoc CTRL + s i później skompilowanie.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »

×