Skocz do zawartości

STM32 – ADC i DMA, wartość się nie zmienia


lechoo93

Pomocna odpowiedź

Cześć, świetna pomoc w kursie, jednak mam problem z dostępem w kodzie do wartości odczytanych z DMA

Niby wszystko działa poprawnie, to znaczy w STM Studio widzę zmiany wartości w ADC_Value[1] oraz ADC_Value[2], natomiast gdy chce je wykorzystać w kodzie przypisując je do zmiennych posX oraz posY to nic się nie dzieje, to znaczy nowe zmienne mają wartości 0 cały czas.

Jakiś pomysł? 🙂

/* USER CODE BEGIN PV */
uint32_t ADC_Value[2];

uint32_t posX;
uint32_t posY;


/* USER CODE END PV */

/////////////////////

później inicjacje itd

/////////////////////

  HAL_ADC_Start_DMA(&hadc1, ADC_Value, 2);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
      
      posX=ADC_Value[0];
      posY=ADC_Value[1];
      HAL_Delay(1000);
    /* USER CODE END WHILE */



    /* USER CODE BEGIN 3 */
  }

Pozdrawiam,

Max

Edytowano przez Gieneq
Link do komentarza
Share on other sites

Wygląda na to, że ADC działa wolniej niż rdzeń mikrokontrolera (cóż za niespodzianka! ;). Nasuwa się więc wniosek, że trzeba zaczekać aż ADC zakończy próbkowanie i dopiero wtedy przypisać wyniki albo włączyć przerwanie od zakończenia działania DMA.

Dla sprawdzenia tej tezy proponuję użyć funkcji wykorzystującej polling, HAL_ADC_PollForConversion lub sprawdzać w pętli  czy hal_dma_state_ready.

 

Link do komentarza
Share on other sites

Czy działa wolniej, czy szybciej nie ma raczej najmniejszego znaczenia, w końcu jak nie w pierwszym to drugim obiegu pętli poprawne dane powinny być widoczne.

Proponuję więc zamiast sprawdzania stanu konwersji dodać volatile do zmiennych.

Link do komentarza
Share on other sites

Najlepiej wstaw cały kod bo nie wiadomo nawet czy adc jest włączone poprawnie, dma jest zdaje się uruchamiane tylko raz.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Autor wątku przecież napisał:

"Niby wszystko działa poprawnie, to znaczy w STM Studio widzę zmiany wartości w ADC_Value[1] oraz ADC_Value[2],"

Więc jeśli to prawda, konwersja działa poprawnie. Tak jak napisałem, proponuję dodać, volatile, a jak nie pomoże to można będzie szukać dalej.

Link do komentarza
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ę »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.