Stm32 HAL Przerwania ADC i Debug

Wszystko co dotyczy płytek z rodziny Discovery firmy STM
ODPOWIEDZ
xamrex
Nowy
Posty: 1
Rejestracja: 28 lut 2018, 16:29

Stm32 HAL Przerwania ADC i Debug

Post autor: xamrex » 28 lut 2018, 17:01

Witam
Postanowiłem okiełznać procki ARM, i pobawić się ADC.
Mam zestaw STM32F429I-DISC1

Bazuję na tym poradniku:
https://forbot.pl/blog/kurs-stm32-f4-5- ... io-id13099
Wszystko fajnie działa.
ALE
jeśli włączę tryb Debugowania to nie jest już tak różowo.

Przedstawię swój program:

Kod: Zaznacz cały

void HAL_ADC_ErrorCallback(ADC_HandleTypeDef *hadc){
	;
}
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc){

	i++;
	if (i>999){ i=0;
	HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
	}	

}

int main(void)
{
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_ADC1_Init();

 HAL_ADC_Start_IT(&hadc1);// Rozpoczecie nowej konwersji
 HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);

  while (1)
  {
	HAL_Delay(500);
	HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
  }

}
Oraz konfiguracja ADC:
Obrazek

Więc program w funkcji main w pętli głównej miga diodą - LED2,
a w przerwaniu od zkończonego pomiaru ADC inkrementuje zmienną i. Po doliczeniu do tysiąca zmienia stan Diody LED

Jeśli wgram program do procka układ zachowuje się tak jak zsotało to opisane. Wszystko działa poprawnie.
Schody pojawiają się przy debugowniu.

Gdy nie mam żadncyh breakpointw, w trybie debugu wszystko również działa tak jak powinno.
Natomiast gdy ustawię breakpointa na funckję/callbecka void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
To jednorazowo program wchodzi w tą funkcję. Później więcej jej nie wywołuje. (można zaobserowować to tym, ze dioda nie zmienia swojego stanu).
Dodatkowo wywoływana jest funkcja HAL_ADC_ErrorCallback.

Więc podsumowując.
Podczas debugu gdy nie mam ustawionego breakpointa na funckję/callbecka void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) obie diody migają, co jest poprawne.
Lecz w momecie gdy ustawię break point na tą funkcję, to ADC wystawia błąd i wywoływana jest funckja HAL_ADC_ErrorCallback
Program potem dalej działa (miga diodą LED2), ale nie wchodzi już do callbacka od ADC -> Dioda LED cały czas świeci

Dlaczego tak się dzieje?

Czy da się w jakiś sposób zaradzić na to?


Tutaj filmik:
https://youtu.be/Sh2IjR6RlbI

ODPOWIEDZ