Skocz do zawartości

[STM32 Nucleo F411CE] Kod z kursu wiesza się w pętli while


Pomocna odpowiedź

Napisano

To mój pierwszy post, więc witam serdecznie wszystkich forumowiczów.

Mam problem z rozpoczęciem swojej przygody z STM32, kupiłem gotową płytkę z programatorem, ale za nic nie mogę uruchomić na niej żadnego kodu. Objawy są takie jak by kod wieszał się po kliku liniach nieskończonej pętli.

Do kodu wygenerowanego przez CubeMX dokładam mruganie wbudowaną diodą.

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
HAL_Delay(100);

Dioda się zaświeci, ale nigdy nie zgaśnie. Identycznie mogę:

- włączyć różne kolory na led RGB,
- zastąpić HAL_Delay kodem z pętlą for z dużą ilością powtórzeń,

Czego próbowałem i nie dawało rezultatów:

- Wyklikiwania całego projektu w Kail od zera bez użycia CubeMX,
- Dodawania

- Zamiany HAL_GPIO_TogglePin na HAL_GPIO_WritePin (naprzemiennie ..SET/..RESET)

- Kombinowałem z inicjalizacją portu

- Ogółem weryfikowałem, żeby wszystko było co do joty jak w kursach / przykładach w internecie.

Poniżej wrzucę jeszcze całą funkcję main, może komuś coś przyjdzie do głowy, będę bardzo wdzięczny za pomoc w uruchomieniu.

int main(void)
{
 HAL_Init();
 SystemClock_Config();
 MX_GPIO_Init();
 MX_USART1_UART_Init();

GPIO_InitStructA.Pin = GPIO_PIN_5;
 GPIO_InitStructA.Mode = GPIO_MODE_OUTPUT_PP;
 GPIO_InitStructA.Pull = GPIO_PULLUP;
 GPIO_InitStructA.Speed = GPIO_SPEED_LOW;
 HAL_GPIO_Init(GPIOA, &GPIO_InitStructA); 

 while (1)
 {
	  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
	  HAL_Delay(100);
	  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
 }
}

Problem w tym właśnie, że w swoim pierwszym kodzie nigdy tej diody nie gasisz -- tylko ciągle powtarzasz jej zapalanie, co oczywiście od drugiego razu nie ma już żadnego efektu.

Drugi kod co prawda diodę gasi, ale zaraz potem natychmiast ją zapala, więc nawet nie jesteś w stanie tego zauważyć.

Cześć,

Wystarczy, żebyś wewnątrz pętli while(1) dodał na końcu jedną linijkę:

          HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); 
         HAL_Delay(100);   // dioda swieci, odczekaj 100 ms
         HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);

         HAL_Delay(100);   // dioda nie swieci, odczekaj 100 ms

i dioda zacznie [ś]migać.

Oczywiście zakładam domyślnie, że parametr funkcji HAL_Delay() to liczba milisekund a nie mikrosekund.

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...