Skocz do zawartości

Kurs STM32L4 – #3 – wejścia/wyjścia, czyli GPIO w praktyce


Pomocna odpowiedź

7 godzin temu, Gazbi napisał:

To są tylko komentarze.

@Gazbi nie całkiem. Ogólnie to są "tylko" komentarze, ale pamiętaj, że korzystamy tutaj generatora kodu Cube, który bazuje właśnie m.in. na komentarzach. W tym przypadku nie można wklejać kodów w losowe miejsca, trzeba brać pod uwagę komentarze, ponieważ w przypadku złego umiejscowienia kodu może on "wyparować" przy późniejszym przebudowaniu projektu. Zwracaliśmy na to uwagę w kursie wiele raz. Zerknij do tego co jest napisane po fragmencie "dalej rozpoczyna się już główna część automatycznie generowanego projektu" 🙂 

Czy wprowadzałeś w programie jakieś inne zmiany bez zwracania uwagi na automatyczne komentarze? Jeśli nie to wstaw całą zawartość Twojego pliku main.c, lub wyeksportuj cały projekt - sprawdzimy.

Dziękuję za uwagi. Świadomie żadnych zmian nie wprowadzałem. Stworzyłem nowy projekt, we właściwe miejsce wpisałem na nowo polecenia i zadziałało.

 

Tak więc, nie wiem gdzie tkwił błąd.

Najważniejsze, że już działa, a od teraz pamiętaj, aby jednak "przestrzegać" miejsc, w których umieszcza się własny kod. Nie powinno być już żadnych problemów.

Już wiem, gdzie tkwił mój opisany wyżej problem. Bazując na wcześniejszym projekcie próbowałem dokonać zmian poprzez dodanie przycisku. Po skonfigurowaniu USER-BUTTON na pinie PC13 w CubeMX nie kliknąłem Zapisz i Cube nie wygenerował nowego kodu.🤔

Studiuję obecnie ćwiczenie z linijką diodową. Mam pytanie: z czego wynika, że porty PB14 i PB15 nie można zdefiniować jako GPIO Input/Output i pełnią one inną funkcję  niż zakłada to ćwiczenie (PB14- LED10)? Dlaczego w ćwiczeniu nie korzystacie z portów PB0-PB9, tylko od PB5 do PB14? Domyślam się, że był jakiś powód.

Mogę prosić o wyjaśnienie?

23 godziny temu, Gazbi napisał:

Studiuję obecnie ćwiczenie z linijką diodową. Mam pytanie: z czego wynika, że porty PB14 i PB15 nie można zdefiniować jako GPIO Input/Output i pełnią one inną funkcję  niż zakłada to ćwiczenie (PB14- LED10)?

@Gazbi podaj więcej szczegółów. Co dokładnie znaczy, że nie możesz wykorzystać tych wyjść? Jakie ustawienia masz dostępne dla tych wyprowadzeń? 

29 minut temu, Treker napisał:

@Gazbi podaj więcej szczegółów. Co dokładnie znaczy, że nie możesz wykorzystać tych wyjść? Jakie ustawienia masz dostępne dla tych wyprowadzeń? 

W PB14, po kliknięciu lewym klawiszem rozwija się inne menu niż np. dla PB1 i to mnie zmyliło a z wrażenia nie zauważyłem suwaka. Taki ze mnie Gapcio, przepraszam. Jest jakiś szczególny powód, że wybraliście porty od PB5- PB14?

Główne i najważniejsze kryterium wyboru pinów była taka, aby kolejne diody były podłączone w odpowiedniej kolejności do jednego portu. Bez tego nie byłoby możliwe robienie tych "sztuczek" z przesunięciem bitowym. Oprócz tego PB3 i PB4 są również wykorzystywane do wgrywania i debugowania programów przez JTAG. Zostały więc ominięte, aby nic nie zakłócało działania programu. Nie jest to niezbędne, ale w tym przypadku mamy dostępne dużo wolnych pinów, więc nie musieliśmy się ograniczać.

  • Lubię! 1
  • 5 miesiące później...

Ha, dawno nie było tutaj wpisu - to i ja się pochwalę: odkurzyłem swoją płytkę wreszcie i udało mi się to ćwiczenie z kursu zrobić, wykorzystując wszystkie piny jakie tylko były dostępne. Nie bawiłem się w struktury i tablice, ot po prostu przydługawy switch-case ale działa (ponad 40 LEDów)

Czy ktoś jest w stanie potwierdzić czy da się wykorzystać wszystkie wyprowadzenia portu PA? U mnie nie da się wykorzystać np. jako wyjścia PA2 i PA3 - nie ma żadnego błędu ale po prostu jest stan wysoki i tyle.

Dnia 17.11.2023 o 21:48, mwwojcik napisał:

U mnie nie da się wykorzystać np. jako wyjścia PA2 i PA3

@mwwojcik wskazane przez Ciebie piny są na płytce Nucleo połączone z konwerterem UART-USB. Nie można ich wykorzystywać jako zwykłe GPIO (tzn. jest to możliwe, ale konieczne byłoby usunięcie zworek na płytce - tym samym pozbawisz się komunikacji UART-USB).

  • 1 miesiąc później...
(edytowany)

Witam

Mam problem z podłączeniem zewnętrznej diody.

Kod:

399654614_Zrzutekranu2024-01-08173023.thumb.png.8b4556dd765e7d532efb14f9ec886367.png

Zdjęcie płytki:

adce2e4b-da38-4744-841d-335620d1fd97.thumb.jpg.8d305e27f29b4c7b1756a2ed1f660928.jpg

Screen pinów:

1339558919_Zrzutekranu2024-01-08173221.thumb.png.5dc89df102d6233db43a69d8176a7705.png

Nie ma żadnej reakcji po zbudowaniu i zdebugowaniu kodu. LED się nie świeci. Dioda działa bo sprawdzałem. Na płytce podpiąłem do chyba dobrego pinu. 

Z góry dziękuję za odpowiedź. 

 

 

 

Edytowano przez Dirichleta

@Dirichleta w zestawie do tego kursu nie ma baterii 9 V i na pewno nie powinieneś jej używać w tym projekcie, bo spalisz płytkę z STM32 - możliwe, że już to zrobiłeś. Odłącz całkowicie baterię i podłącz układ zgodnie ze schematem w kursie, czyli katoda do masy z Nucleo, a dioda przez rezystor do odpowiedniego pinu STM32. Sposób podłączenia znajdziesz na ilustracji podpisanej "Lokalizacja pinów używanych w ćwiczeniu".

  • 1 miesiąc później...

Witam.

Ode mnie pytanie trochę z innej beczki. W tej części kursu cały czas używamy specjalnie utworzonej zmiennej typu GPIO_PinState jako drugi argument funkcji HAL_GPIO_WritePin(). Czy są jakieś przeciwwskazania żeby zamiast tworzyć taką zmienną od razu podać jako ten argument 1/0 lub true/false?

Przykładowo:

HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, 1);

Efekt taki sam, więc pytanie tylko czy mogą wyniknąć z takiej prostoty komplikacje lub mniejsza czytelność kodu?

Btw. świetne kursy, robicie dobrą robotę

  • Lubię! 1

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