Skocz do zawartości

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


lukaszjankowski

Pomocna odpowiedź

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);
 }
}
Link do komentarza
Share on other sites

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

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

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.

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.